我在 git 中有两个分支,master/ 和 1.7/。我使用cherry-pick将一些修复从master/移植到1.7/。(我没有使用合并,因为我只想要一些更改。):
$ git checkout 1.7
$ git cherry-pick -x <initial commit SHA>..<master change 2 SHA>
稍后,我将 1.7/ 合并回 master/,因为我希望将所有已进入 1.7/ 的更改(除了樱桃挑选本身)合并回主线:
$ git checkout master
$ git merge 1.7
我的问题是,这会将cherry-picks(最初来自 master/)再次提交到 master/ 中:
$ git log --oneline
8ecfe22 Merge branch '1.7'
fe3a60d master change 2 (cherry picked from commit f5cca9296e45d5965a552c45551157ba
9c25f53 master change 1 (cherry picked from commit 8fae2a68a356f5b89faa8629b9a23b23
f5cca92 master change 2
8fae2a6 master change 1
ffa10bf initial commit
在我的真实存储库中,它甚至导致了合并冲突。
所以我的问题是,我可以避免这种情况(如果可以,如何避免)?
重现此行为的完整命令列表:
$ git init
<create Dialog.js file>
$ git add Dialog.js
$ git commit -am "initial commit"
$ git branch 1.7
<edit Dialog.js file>
$ git commit -am "master change 1"
<edit Dialog.js file>
$ git commit -am "master change 2"
$ git log
$ git checkout 1.7
$ git cherry-pick -x <initial commit SHA>..<master change 2 SHA>
$ git checkout master
$ git merge 1.7
$ git log