我想知道,在合并期间选择提交的优先级是什么,如下所述。
我有develop
分支。
D1 - D2 - D3
然后我从中创建了release
分支并添加了一些提交。
D1 - D2 - D3 - R4 - R5
与此同时,还增加了一些开发提交
D1 - D2 - D3 - D6
然后,我使用release
git rebase -i HEAD~3
分支中删除了一些提交
D1 - x - x - R4 - R5
如何使用release
将develop
分支合并到git merge --no-ff release
?我希望这样:
D1 - D2 - D3 - R4 - R5 - D6
我是否有可能通过删除提交合并分支?
D1 - x - x - R4 - R5 - D6
我期待有关“幕后”的解释:)
答案 0 :(得分:4)
如果您在revert
中执行了release
,则会在合并时恢复这些提交。如果你做了rebase
,它就不会。这是因为revert
显示您明确删除它们,并在历史记录中保留该事实。 rebase
看起来好像release
中从未发生过这些提交,因此merge
没有理由删除它们。
就优先级而言,无论如何,两个分支都具有相同的优先级。回到分支的最后一次提交,如果每个分支以不同的方式改变某些东西,git会将其显示为合并冲突。 rebase
没有恢复这些提交的唯一原因是因为你重写了历史记录,使它看起来好像从未出现在分支中。
顺便说一下,你确实意识到你可以用git来测试这些东西,无论是在克隆中还是小心你的分支,可能花费的时间少于提问的时间?
答案 1 :(得分:2)
作为其他答案的补充:
我想知道,在合并期间选择提交的优先级是什么
Git通常在合并期间没有“优先级”的概念。在合并期间,所有分支都同样重要,Git会尝试组合所有分支的更改。
如果存在矛盾(例如不同的分支以不同的方式改变同一行),Git不会以某种方式让一个分支“获胜”,而是报告合并冲突。
这实际上是一个刻意的设计决定。 Linux谈论在Git中合并:
Linus:我个人,我希望有一些非常可重复和非聪明的东西。 我理解或的东西告诉我它无法做到。
http://www.wincent.com/a/about/wincent/weblog/archives/2007/07/a_look_back_bra.php
所以Git故意不会巧妙地试图找出哪个分支“更重要” - 它只是将决定留给用户。
答案 2 :(得分:1)
您似乎知道git-rebase
,所以:
$ git checkout develop
$ git rebase -i D1 release
交互模式允许您按照自己的方式选择和重新排序提交。