昨年に途中参加させていただいたプロジェクトで、Gitを使ってソースコードの管理がされているものの、チーム全体の練度があまり高くなかった。
そこで「このくらいわかってればなんとかなる」っていうのをまとめてみたのだけれど、それをこちらにも残しておこうと思う。
Gitが既に入っている環境で、はじめてGitで並行開発してみたとかそういう人向けですね。
Gitを使えるとは言っても
Work treeとStage(Index)がわかっていない人が結構いる。「add」するって感覚がわからないのだそう。
というのも、社内で使用しているツールがバラバラで、なんとなく使っているという人が多かったみたいです。主にTortoiseGitとSourceTreeに二分されていた。GUIだとだいたいそうなるよね。
なので、まずはコマンドだとこんな感じですよっていう流れを覚えていただいたという次第。
まずはここから覚えよう
大切なのは「ローカルとステージ」「コミット」「マージ」「プッシュ」の4つです。これだけ覚えておけば、通常の作業は問題ないです。ね、簡単でしょ?
では、よく出る言葉を見てみましょう。
よく出る言葉
- repository(リポジトリ)
- gitで履歴管理を行う領域
- remote repository(リモートリポジトリ)
- サーバーにあるリポジトリ。pushする先はここ。単にリモートと呼ぶ事が多い
- local repository(ローカルリポジトリ)
- 自分のPCにある履歴の管理場所。作業するのはここ
- 任意のディレクトリで同一リポジトリでも違うリポジトリでも自由に作ることがでる
- branch(ブランチ)
- 履歴管理を分岐させたもの。違う機能を作るとか、リリース時期が違う時とかに使う
- commit(コミット)
- 変更したファイルを変更履歴に登録すること。あと、登録された履歴のこと
- work tree(ワークツリー)
- ファイルを編集・操作する領域
- index(インデックス)
- コミット予定のファイルを登録する領域
- stage(ステージ)
- インデックスにファイルを登録すること
- add(アド/アッド)する という方がよく使われると思う
- head(ヘッド)
- 現在作業しているブランチ、コミット
- checkout(チェックアウト)
- 現在のヘッドを任意のコミットに移動すること
- fetch(フェッチ)
- リモートリポジトリの変更を確認すること
- merge(マージ)
- 別のブランチを現在のブランチのヘッドに継ぎ足すこと
- リモートの同一名ブランチも「別のブランチ」扱いなので注意
- pull(プル)
- ローカルリポジトリにあるコミットに、リモートリポジトリの新しいコミットを反映させる
- フェッチしてマージするのと同じ
- push(プッシュ)
- ローカルリポジトリの変更をリモートリポジトリに反映させること
- diff(ディフ)
- ファイルの差分を表示する。単に差分って言ったりもする
- conflict(コンフリクト)
- マージの際に同一ファイルの同じ箇所が変更されてコミットが作られない状態
- 「コンフリクトした」以外だと競合してるとか言うと思う
これで「リモートのブランチのこのコミットからブランチを切って作業してね。ローカルの作業をコミットしたら元のブランチにマージしてプッシュしといて」って言われても平気ですね!
cuiでの操作を見てみよう
本題です。TortoiseGitやSourceTreeなどを使うことでguiでの操作は可能ですが、ネットでも書籍でもcuiでのコマンド操作を基準に教えているので、軽く覚えておくと良いかと。
この共通認識が欠けるからうまくいかないんだなーって感じます。イメージしてみるだけでも変わるはず。
よくつかうコマンド
大抵は以下のループになるかと。
※ <>の中身は適当に置き換えてたり飛ばしたりしてくださいね
-
git fetch <origin> <BRANCH NAME>
- remoteに変更がないか確認。<>は省略可能
-
git pull <origin> <BRANCH NAME>
- リモートブランチへの更新をローカルにマージ
- ブランチ指定するときは今いるブランチに気をつけないとダメだよ
-
git checkout -b <NEW BRANCH NAME>
- 現在のヘッドから新たにブランチを作ってチェックアウト
-
git diff
- コミット間/ファイル間の差分を確認
-
git add <FILE NAME>
- ファイルをコミット予定に入れる
- 前述にありますが、「ステージする」「アドする/アッドする」 とか言います
-
git commit -m'<COMMIT MESSAGE>'
- インデックスにあるファイルを、指定したコミットメッセージを付けてコミット
- -m''がない場合は、コミットメッセージ入力のため、コマンドライン上でエディタが起動します。viとかvimとかemacsとか
-
git push <origin> <BRANCH NAME>
- コミットをリモートに反映します
- リモートが他で更新されていた場合、マージしろって怒られるので先に一度fetchなりpullなりしましょう
たまにつかうコマンド
-
git checkout .
- いま編集しているやつを全部なかったことにして現在のブランチのヘッドに戻します
-
git stash save <STASH NAME>
- 一時的に作業中断して別ブランチを触りたい時、ファイルを退避させます。クイックセーブだね
- 作業前にリモートをプルしてなかったとかいう恥ずかしいときにも使えます。コンフリクトに注意
-
git stash pop <STASH NAME>
- 上記で退避させたファイルを呼び戻します
-
git stash list
- 退避させたファイルのリストを表示。たまに退避させたことすら忘れますよね
-
git commit --amend
- コミットメッセージをtypoしたとか恥ずかしい時に使います
- コミット漏れした時とかにも使います。コンパイル終わってなかった!とかたまにあるよね
-
git branch -m <NEW BRANCH NAME>
- ブランチ名をtypoしたとか恥ずかしい時に使います
-
git reset <COMMIT NUMBER>
- 間違ったをコミットしたとかバグをプッシュ前に見つけたとか、恥ずかしい時に使います
- もうプッシュしてたらやっちゃダメだよ
最後に
最初にも書きましたが、Gitを触りはじめた人や黒い画面が苦手でよくわかってない人が現場で作業する際、お作法がわかってなかったりする際に役立つことをまとめたつもりです。
足りない情報や正確性に欠ける部分があるかもしれません。ご指摘いただければ幸いです。