- PdM(楽楽シリーズ)
- フロントエンドエンジニア
- 業務改善(BPR)
- 他77件の職種
-
開発
- フロントエンドエンジニア
- Javaエンジニア(楽楽明細)
- エンジニアオープンポジション
- ブリッジSE(大阪)
- PM(楽楽シリーズ)
- オフショアPJマネージャー
- Webエンジニア(大阪PHP)
- テックリード(大阪/PHP)
- ブリッジSE/オフショア開発
- フロントエンドマネージャー候補
- プロジェクトマネージャー
- エンジニアリングマネージャ
- AI導入エンジニア
- プロダクト開発部長
- Webエンジニア
- Webエンジニア
- フロントエンド(リーダー)
- モバイルエンジニア
- Android/iOSアプリ
- 社内SE(大阪/セキュリティ)
- インフラエンジニア
- インフラエンジニア/マネージャ
- インフラエンジニア
- 社内SE(データエンジニア)
- 戦略企画・データマネジメント
- QAリーダー/マネージャー
- システム企画
- 品質管理/技術支援チーム
- AI/機械学習エンジニア
- データ基盤エンジニア
- エンジニアリング
- UIデザイナー(リーダー)
- コーポレートデザイナー
- UIデザイナー
-
ビジネス
- PdM(楽楽シリーズ)
- 開発マネージャー
- プロジェクトマネージャ(大阪)
- 導入支援/導入コンサルタント
- プロダクトマネージャー
- プロダクトマネージャー(AI)
- PMMプロダクトマーケティング
- プロダクトセキュリティ
- 技術推進部長
- 労務
- 総務
- IR
- HRBP
- データマネジメント・マーケ戦略
- 経営企画
- コーポレート広報
- 内部監査(業務監査)
- 営業企画(イネーブルメント)
- ITセールス(名古屋)
- セールスマネージャー
- 法人営業/カスタマーサクセス
- フィールドセールス(名古屋)
- フィールドセールス(法人営業)
- フィールドセールス
- ITセールス(広島)
- 法人営業
- フィールドセールス(東京)
- 営業企画(戦略立案)
- ITセールス
- ビジネスオープン
- ITセールス経験者
- オンラインマーケティング
- オフラインマーケティング
- 製品企画/法要件(楽楽明細)
- ブランド企画
- 製品企画/プロダクトマーケ
- CSマーケティング
- マーケティング担当
- ブランド企画・ブランディング
- マーケティングリーダー
- 営業推進リーダー(楽楽精算)
- その他
はじめに
皆さんはじめまして。エンジニアのsts-250rrです。
Git初心者である方の中には、Gitの大枠がどんなものかは知っているし、使ったこともある。
でも機械的にgit status
,git add -A
としていたり、git commit
をしていた。
というような方もおられるのではないでしょうか?(私はその口でした・・・)
各コマンドの正しい知識を持たずに機械的にコマンドを実行するのでは、 業務を行う上で正しい操作ができないことも考えられます。チームの開発ではなおさら御法度といえるでしょう。
私自身含め、そのような方が今後Gitで失敗をしてしまわないように手助けができればと思います。
本記事では、ローカル環境で作業をする際のGitの構成であるリポジトリやワークツリー・インデックスに関してまとめ、利用するコマンドがどのような操作であるのかを再確認していきます。 それらを把握したうえで、よく利用するGitコマンドをシーン別に分けて紹介し、コマンドによる操作のイメージを持っていただきたいと思います。
加えて、コミットの流れやコミットで失敗してしまったときの対処法も載せておきましたので、困ったときの参考になると幸いです。
2017-10-05 Git初心者のためのローカル作業時の備忘録 Git Gitコマンド 初心者向け
リポジトリ・ワークツリー・インデックスって?
リポジトリ・ワークツリー・インデックスって?
Gitではローカルで作業する際に以下のような構成でプロジェクトを管理しています。 この部分の構成を理解していると、addやcommitによってどのような操作がなされるのかがわかってくるかと思います。
- リモートリポジトリ[Remote repository]
サーバに配置されており、複数人でプロジェクトを共有する場所。
*本記事での話題の対象ではありません。 - ローカルリポジトリ[local repository]
ローカル環境内でのプロジェクトのファイルやディレクトリの変更履歴を記録する場所。
- ヘッド[HEAD]:最新のコミット状態を示す。
- インデックス[index]
ローカルリポジトリにコミットを行う準備をする場所。ワークツリーから登録された内容をgit commit
でコミットする。
インデックスが存在することで、ワークツリー内の必要のないファイルはコミットしないといったことができる。 - ワークツリー[work tree]
実際に作業を行っているディレクトリであり、編集を行った最新のファイルが存在する。
ここでの作業内容をgit add
することでインデックスに変更を登録する。
これらローカル内の3つの構成により、Gitではプロジェクトの管理が行われています。 この部分が理解できればadd
やcommit
、それらの操作を取り消すreset
といった操作が理解しやすくなったのではないでしょうか。
シーン別:よく使うGitコマンド
前節まででローカル環境でのGitの構成の大枠は掴んでいただけたでしょうか?
本節では、多様なgitコマンドの中からよく使うコマンドを3つのシーンに分けてまとめています。
逆引きのように利用していただけると幸いです。
編集を確認したいとき
- log
git log
:最新までのコミットログを確認。git log --oneline
:コミットログを簡潔に確認。
- status
git status
:ローカルで編集されたファイルの一覧を表示。
- diff
git diff
:インデックスとワークツリーの全ての差分を表示。git diff ファイル名
:インデックスとワークツリーのしてファイルの差分を表示。
編集したものをリポジトリにコミットしたいとき
- add
git add -A
:ワークツリーの内容をすべてインデックスに登録。git add <ファイル名>
:編集した1ファイルのみをインデックスに登録。git add <ファイル名1> <ファイル名2>
:複数の編集をインデックスに登録。
- commit
git commit
:インデックスの内容を全てコミットする。git commit -m 'message'
:コミットと同時に1行メッセージを書く。
addやコミットを取り消したいとき
- reset
git reset
:git addの内容を取り消す。git reset --soft HEAD^
:直前のコミットのみを取り消す。git reset --hard HEAD^
:現時点のインデックスやワークツリーごと直前のコミットを取り消す。
コミットするときの流れ
本節では実際コミットをするまでの流れを以下のTest.javaファイルと共に確認していきます。
Test.javaにある編集を加えました。編集は正しく反映されているでしょうか?
自身の編集が完了したらgit status
で現在の状態を確認します。
Test.javaに変更があったようです。ソース内ではどのような変更があったのgit diff
で確認します。
出力部分が追加されたようですね。ではこの編集をインデックスに登録しましょう。
確実にインデックスに追加したい自身の編集ファイルのみ git add src/test/Test.java
で登録しましょう。
再度、現在の状態を確認します。
インデックスに登録されている様子が確認できました。 それではコミットしていきましょう。
問題なくコミットできたようです。
最後にコミットの履歴のログを確認しておきましょう。
ここまでの作業が完了すればローカルでの編集内容が履歴として記録されることになります。
以降は同様に編集→コミットしていけばよいわけですね。
個人的にコミットまでの注意点は
git diff
で変更差分を確認すること。git add
で必要のないファイルまでインデックスに登録しないこと
この2点だと思っています。
この点を意識できているかどうかだけでも、Gitに対する理解が深まるのではないでしょうか。
コミットで失敗したとき
次に、今までやってきた「addやcommitをやり直したい」そんなときの流れを簡単に確認します。
例として、前節で行ったコミットが間違えていたのでなかったことにしましょう。
git reset
のオプションを指定して直前のコミットをなかったことにします。
ログやステータスを確認してコミットが取り消されていることと現在の状態を確認します。
直前のコミットTest出力の追加
が取り消されています。 ここまでで、直前のコミットを取り消し、編集内容がインデックスに登録されているという状態が確認できました。 次にこのadd自体も取り消してみましょう。
この場合はオプション無しのgit reset
です。
addされた内容がインデックスの登録から外れた様子も確認できました。
ここまでで直前のコミットを取り消し、編集内容も取り消しました。つまり、2つ前のコミットの状態まで戻ったことになります。ここからは引き続き作業を行っていきましょう。
おわりに
最初にも述べたように機械的に行うcommit
やadd
はGitを利用していく上で良いことではありません。
自身が利用するツールに関してはどのような利用方法があるのか、どのような操作であるのかを確認して利用していくと良いかと思います。
自身の学習を踏まえた記事ではありますが、読んで頂いた方々の参考になれば幸いです。