2つのブランチで並行して作業する
リモートのmaster最新を現在のブランチに取り込む
branchAにいるとして、
まずmaster最新の状態をフェッチする。
git fetch origin master
差分確認してみる
git diff branchA origin/master --name-only
ファイル検索して
git ls-files *test.cs
ファイル指定のdiffは場合はこう
git diff branchA origin/master -- dir/test.cs # --以降はファイル名
マージする
git merge origin/master
コンフリクトが起こったのでcheckout。origin/master優先
git checkout --theirs dir/test.cs
その後はaddしてcommitすれば解決
調子に乗ってmaster以外のremoteブランチもマージする
まず該当のリモートブランチを見つける
git branch -a | grep kiyasu
remotes/origin/dev/kiyasu というのが見つかったのでこれをFetch
git fetch origin dev/kiyasu # originというremote branchのdev/kiyasuをfetch
git ls-files test.js # 変更のあったファイルを検索
git diff branchA origin/dev/kiyasu -- dir/js/test.js # diff確認
git merge origin/dev/kiyasu # 問題なさそうなのでマージ
また一つ賢くなってしまった
チェリーピック
ブランチAのcommit-1fで行われた変更のみをブランチBに取り込みたい。こんな時は、ブランチBで
git cherry-pick (commit-1のhash)
とやればよい。これ面白いから好きだな。
自分じゃないbranchのコミットをremoteへpush
Unityの場合、アセットが多かったりしたら切り替えの際にアセット読み込みに時間がかかる。なので切り替えもあまりやりたくない。そのときは
git push origin ブランチ名
とすればよい。コロン使って何かする必要があるかも、と思っていたが一度--set-upstreamとかしておけばこれでいいようだ
マージ後に一度ちゃんと更新されてるか確認しておこう
git diff HEAD~ HEAD "ファイル名"
これで指定のファイルの直前のコミットと現在のコミットを比較できる