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