次の動作がgitでどのように良いかを理解するのに苦労しています。問題を説明するためにまとめた例については、以下を参照してください。多くの場合、私のチームと私は、私たちがそこに行きたくないブランチに変更/コミットを行っています。
> git init sandbox && cd sandbox
> echo "data a" > a.txt && echo "data b" > b.txt
> git add -A && git commit -a -m "initial population"
[master (root-commit) d7eb6af] initial population
2 files changed, 2 insertions(+)
create mode 100644 a.txt
create mode 100644 b.txt
> git branch branch1
> echo "more data a" >> a.txt && git commit -a -m "changed a.txt on master"
[master 11eb82a] changed a.txt on master
1 file changed, 1 insertion(+)
> git branch branch2 && git checkout branch2
Switched to branch 'branch2'
> echo "more data b" >> b.txt && git commit -a -m "changed b.txt on branch2"
[branch2 25b38db] changed b.txt on branch2
1 file changed, 1 insertion(+)
> git checkout branch1
Switched to branch 'branch1'
> git merge branch2
Updating d7eb6af..25b38db
Fast-forward
a.txt | 1 +
b.txt | 1 +
2 files changed, 2 insertions(+)
上記の点に注意してください。a.txtは、branch2で変更/変更されていなくても、マージで更新されます。上記のシナリオでは、gitはbranch2でa.txtが変更されていないことを認識し、したがって、branch1に更新を適用するときに、それらの変更を行わないことをインテリジェントに期待します。
私が間違っていることはありますか?はい、私はチェリーピックをすることができました。それは私が何を変更したかを知っているこの単純な例ではそうですが、変更がはるかに大きく、何が影響を受けたのかわからない実際の状況では現実的ではありません。
明確にするために、私はgitからこの動作を望んでいません。