[git][初心者向け]ブランチ作成直後のpushの注意事項
Di部の岩澤です。
今回はGitでハマった件について小ネタ程度に書いてこうと思います。
先に結論だけでも
- ブランチ作成後の最初のgit pushには-uをつける
- ローカルブランチが追跡する上流ブランチを確認するには「git branch -vv」
- 上流ブランチを変更する場合は「git branch -u (リモートリポジトリ名)/(ブランチ名)」で行う
(勘の良い方は何をやらかしたかわかると思います...)
やらかし再現手順
以下がハマった手順です。
(簡単に言えば一つのブランチを複数PCで操作しようとしたらmergeしてくれないPCがある、です)
1) PC-Aでブランチを作成しつつcheckout
pc-a$ git checkout -b feature-#xxx
2) PC-Aでcommitしてpushする
pc-a$ git add sample.md pc-a$ git commit -m "#xxx sample.md追加" pc-a$ git push origin feature-#xxx
3) PC-Bでfeature-#xxxをcheckoutして作業継続
pc-b$ git checkout feature-#xxx (sample.mdを修正) pc-b$ git add sample.md pc-b$ git commit -m "#xxx sample.mdの修正" pc-b$ git push origin feature-#xxx
4) PC-Aで差分を取り込み
pc-a$ git fetch origin remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (1/1), done. remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0 Unpacking objects: 100% (3/3), done. From https://github.com/cm-iwasawa-akiumi/test_users_ctrl_1branch_ff a5da526..82dd1f4 feature-#xxx -> origin/feature-#xxx pc-a$ git merge fatal: No remote for the current branch.
PC-B側でpushした内容がmerge出来ません。おかしいですね...
原因
ローカルブランチごとの上流ブランチを確認してみます。
pc-a$ git branch -vv develop 95feafc [origin/develop] * feature-#xxx a5da526 #xxx sample.md追加
どうやらローカルブランチ「feature-#xxx」の上流ブランチが設定されていないようです。
解決まで
上流ブランチを設定および変更するには「git branch -u ~」コマンドを使います。
pc-a$ git branch -u origin/feature-#xxx Branch 'feature-#xxx' set up to track remote branch 'feature-#xxx' from 'origin'. pc-a$ git branch -vv develop 95feafc [origin/develop] * feature-#xxx a5da526 [origin/feature-#xxx: behind 1] #xxx sample.md追加
これでPC-A側のローカルブランチfeature-#xxxに上流ブランチが設定されました。
pc-a$ git merge Updating a5da526..82dd1f4 Fast-forward sample.md | 2 ++ 1 file changed, 2 insertions(+) pc-a$ git branch -vv * feature-#xxx 82dd1f4 [origin/feature-#xxx] #xxx sample.mdの修正
無事PC-A側にもmergeしてくれるようになりました!
そもそも
上記の再現手順だと上流ブランチが設定されません。
(私はこれを知らずにハマりました... OTL )
具体的には手順2に問題があります。
pc-a$ git push origin feature-#xxx
git pushに-uオプションを付与することで上流ブランチを設定できます。
pc-a$ git push -u origin feature-#xxx
まとめ
今回ハマった件は、1ブランチ1台で作業している時には気づけませんでした。
もしかするとみなさんも上流ブランチの設定を忘れているかもしれませんので、確認してみてはどうでしょうか?