状態
- masterブランチ。ローカルで1回コミットを行った。その後、リモートリポジトリが他のメンバーによって更新された。
- devブランチ。ローカルで1回コミットをする前の状態のmasterからブランチを作成している。
やりたいこと
masterブランチのリモートリポジトリで行われた変更のみをdevブランチに反映したい。 ただし、masterブランチでのローカルで行われたコミット内容はdevブランチに反映したくない。
結論
$git fetch $git checkout dev $git merge origin/master
fetchでorigin/masterリモートブランチを最新化し、devブランチにorigin/masterをmergeする。
本作業と同時にmasterブランチにリモートリブランチ(origin/master)のコミットを反映しても良い場合には以下でもOK。
$git pull $git checkout dev $git merge origin/master
git pullはgit fetchとgit mergeを実行するので、上記だとmasterブランチも変更される。 単純にやりたいことだけやるのであれば、git fetchの方が合っていると思われる。
追記(11/23) トピックブランチにマスターの変更を反映することを2回以上行うと大量のコンフリクトが発生する。
gitで双方向にmergeしているとひどいはまり方をすることがある件
上記より、トピックブランチへマスターの変更を反映するのはマスターへマージする直前のみとし、それ以外の場合にはマスターからブランチを再作成し、cherry-pickなどを利用するのが良いと思われる。
これは駄目
$git pull $git checkout dev $git merge master
これを実行するとローカルのコミットもdevブランチに反映されてしまうのでNG。
大切な事
- git pullとはgit fetchとgit mergeが行われている事を意識する
- git fetchが実行されると作業ディレクトリの内容はは変更されず、リモートブランチ(orgin/masterなど)のみが変更される
- masterブランチとリモートブランチ(origin/master)ブランチは別のブランチでである
0 件のコメント:
コメントを投稿