GIT:合并期间什么是提交优先级?

时间:2012-09-05 11:52:39

标签: git branch

我想知道,在合并期间选择提交的优先级是什么,如下所述。

我有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

如何使用releasedevelop分支合并到git merge --no-ff release?我希望这样:

D1 - D2 - D3 - R4 - R5 - D6

我是否有可能通过删除提交合并分支?

D1 - x - x - R4 - R5 - D6

我期待有关“幕后”的解释:)

3 个答案:

答案 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

交互模式允许您按照自己的方式选择和重新排序提交。