我在git中有两个分支,master /和1.7 /。我使用cherry-pick将一些修复从master / backport转移到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
我的问题是,这会将樱桃选择(最初来自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
答案 0 :(得分:2)
当您选择时,除非您使用快进选项-ff
,否则您正在创建新提交,当您合并回来时,git必须合并这些提交,即使它们可能实际上是无操作
Rebase可能会帮助您,而不是合并:
git rebase master 1.7
然后现在,合并分支(如果需要。)
如果您希望从您要丢弃的分支进行小的更改,则最好使用Cherry-pick。您的工作流程应根据需要进行合并或变更。