鉴于两个分支有分歧和具体的承诺从一个分支(而不是一切)需要被介绍给其他的git樱桃挑选正是实现。
一段时间后,有需要的两个分支合并完全。 怎么会知道的git它已经提交,这是樱桃采摘在过去,这样它不会恢复死刑?
鉴于两个分支有分歧和具体的承诺从一个分支(而不是一切)需要被介绍给其他的git樱桃挑选正是实现。
一段时间后,有需要的两个分支合并完全。 怎么会知道的git它已经提交,这是樱桃采摘在过去,这样它不会恢复死刑?
你可能想读
Git的摘樱桃VS合并工作流程的合并和摘樱桃之间比较不错,尤其是摘樱桃不存储父ID,因而不会知道,它已经提交,这是樱桃在过去采摘,使其不会恢复死刑。
和
http://davitenio.wordpress.com/2008/09/27/git-merge-after-git-cherry-pick-avoiding-duplicate-commits/如何避免在这种情况下重复提交,使用rebase
。
在“ 避免重复犯中提到”文章托尼奥的回答说:
试想一下,我们有主支和分支B:
o---X <-- master
\
b1---b2---b3---b4 <-- b
现在我们迫切需要在提交B1和B3的主人,而不是在b中的剩余的提交。 所以,我们做的是结账主分支和摘樱桃提交B1和B3:
$ git checkout master
$ git cherry-pick “b1’s SHA”
$ git cherry-pick “b3’s SHA”
其结果将是:
o---X---b1'---b3' <-- master
\
b1---b2---b3---b4 <-- b
比方说,我们做的另一个承诺上主,我们得到:
o---X---b1'---b3'---Y <-- master
\
b1---b2---b3---b4 <-- b
如果我们现在就合并分枝b进入主:
$ git merge b
我们会得到如下:
o---X---b1'---b3'---Y--- M <-- master
\ /
b1----b2----b3----b4 <-- b
这意味着由B1和B3引入的变化将在历史中出现两次。 为了避免这种情况,我们可以变基,而不是合并:
$ git rebase master b
这将产生:
o---X---b1'---b3'---Y <-- master
\
b2---b4 <-- b
最后:
$ git checkout master
$ git merge b
给我们:
o---X---b1'---b3'---Y---b2---b4 <-- master, b
(在这个线程 )
该OP在注释中补充说:
但仍然似乎我不很明白如何变基工作。我的意思是,即使基础重建后不应樱桃采摘的提交仍然出现?
号的git commit
手册页明确提到:
如果上游的分支已经包含所做的改变 (例如,因为你邮寄这是上游应用补丁程序), 然后犯下将被跳过 。
例如,运行git变基上的以下历史主(其中A”和A引入同一组的变化,但具有不同的提交者信息):
A---B---C topic
/
D---E---A'---F master
将导致:
B'---C' topic
/
D---E---A'---F master
您可以检测是否提交已经存在于主用git cherry master
(如果你是在topic
分支)。