- 2020/12/17更新
- 現在のブランチ状態をわかりやすくした
Gitに慣れ、だいたい以下の流れが定形になったので、備忘録として残します。
以下では、
(develop) $
上記を、developブランチにいることを表しています。
1. featureブランチの作成
機能Aを追加することになったので、developブランチから機能Aを実装する用のブランチ(feat/task-A)を作り、そこで機能Aを実装します。
# ローカルのdevelopブランチを最新の状態にする(リモートのdevelopブランチの状態にする) (master) $ git checkout develop # developブランチへ移動する (develop) $ git fetch # リモートの情報を、リモート追跡ブランチに取ってくる (develop) $ git merge origin/develop # リモート追跡ブランチをマージする # developブランチからfeat/task-Aブランチを作成する (develop) $ git checkout -b feat/task-A # feat/task-Aブランチを作成し、移動する
- リモート追跡ブランチに関しては、以下が詳しい。
2. 機能Aの実装中
機能Aを実装中、適当にきりのいい作業単位でコミットする
(feat/task-A) $ git add . # ファイルをすべてインデックスに追加する (feat/task-A) $ git status # addしたファイルの確認 (feat/task-A) $ git reset piyo.txt # インデックスから除外したいファイルがある場合はresetコマンドを使う(piyo.txtが除外される) (feat/task-A) $ git commit # インデックスをコミットする # エディタが開くので、コミットメッセージを入力する # 保存をするとコミット完了。やっぱりコミットしたくないときは保存しないで終了する # コミットログを見たいときは以下のようにします。 (feat/task-A) $ git log # commitのログが見れる(qで終了)
機能Aが実装完了するまで、これを繰り返します。
3. 機能Aの実装完了
feat/task-Aブランチで機能Aを実装しました。忘れずコミットします。
# 機能Aを実装完了したので、きちんとコミットする (feat/task-A) $ git add . (feat/task-A) $ git commit
ローカルリポジトリのコミットを、リモートリポジトリにpushします。
# ローカルのfeat/task-Aブランチのコミットを、リモートのfeat/task-Aにpushする。 (feat/task-A) $ git push origin feat/task-A
pushができたら、プルリクエストをします。プルリクエストをコマンドでやる方法はわからないので、GitHubだったらそのページに行ってぽちぽち適当にボタンをクリックします。
3-1. コンフリクトが発生したら
# 競合の解決方法例 # developブランチを最新の状態にする (feat/task-A) $ git checkout develop (develop) $ git fetch (develop) $ git merge origin/develop # developブランチをfeat/task-Aにマージする (develop) $ git checkout feat/task-A (feat/task-A) $ git merge develop # 競合が発生した場合、競合を解決する必要がある # 競合の解決は、基本的に手動でファイルを修正する # 注意1. 自分の変更内容を必ずしも優先しない # 注意2. わからなければ誰かに相談する # <<<<<<< HEAD # 自分の環境の変更点 # ======= # マージを試みた他の環境での変更点 # >>>>>>> [commit id] # ファイルを修正して競合を解決したら、通常通りにaddしてコミットします。 (feat/task-A) $ git add . (feat/task-A) $ git commit -m "fix conflict" # コミット出来たらfeat/task-Aをリモートへpushします。 (feat/task-A) $ git push origin feat/task-A
4. プルリクエストが承認されたら
ローカルのfeatureブランチはもう必要ないので削除します。
# ブランチ削除の前に、ブランチの作業分をdevelopにマージする (feat/task-A) $ git checkout develop (develop) $ git fetch (develop) $ git merge origin/develop # マージしたら削除できる (develop) $ git branch --delete feat/task-A # feat/task-Aブランチの削除
その他
git branch --delete feat/task-A できないとき
ローカルのdevelopブランチにfeat/task-Aの内容がマージされてない場合、エラーが出る。なので、developブランチを最新の状態にしてやれば良い。
# developブランチを最新の状態にする $ git checkout develop $ git fetch $ git merge origin/develop # 消せるようになる $ git branch --delete feat/task-A
git checkout [ブランチ] できないとき
ブランチを移動できないとき、大抵はコミットしてないのが原因です。コミットしたくない場合、stashで一時保存すればよい。