[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台で作業している時には気づけませんでした。
もしかするとみなさんも上流ブランチの設定を忘れているかもしれませんので、確認してみてはどうでしょうか?

参考文献

Git - リモートブランチ