2016-07-13 115 views
4

后提交的混帐令我一直在试图为下面的文章中所描述的分支模型: http://nvie.com/posts/a-successful-git-branching-model/合并分公司

  1. 我做一个从主项新的分支,在那里
  2. 做了几次提交
  3. 回到分支主,并提出了一个提交
  4. git merge --no-ff分支项目,然后解决任何合并冲突

我认为所有来自另一个分支的合并提交将按顺序合并在一起,但似乎并非如此。以下是git log输出:

f28e150 Merge branch 'items' 
8281666 [Master] Another middle commit before merge 
73d0ca9 [items] commit 2 
0442978 [items] commit 1 

为什么主分支之前的项目分支显示的第一个两次提交?在合并提交下将它们展示在一起是不是更有意义,因为那时我将它与我的代码合并在一起?

调用图形选项:git log --graph它显示在正确的顺序

* f28e150 Merge branch 'items' 
|\ 
| * 73d0ca9 [items] commit 2 
| * 0442978 [items] commit 1 
* | 8281666 [Master] Another middle commit before merge 
|/ 

我想他们在一起的原因是为了让我更容易撤消整个合并

回答

7

简短的回答是git log对其输出进行排序,并且您必须选择您喜欢的排序顺序。 (它排序,因为它必须parent/child relationships in a graph provide only a partial ordergit log需要施以总订单

细节在the git log documentation描述,这是很长;搜索commit ordering(这里的链接应该直接带你到它)。

“反向时间顺序”默认的说法现在有点谎言(在老版本的Git中是这样),所以默认的顺序取决于你的特定版本的Git。请注意,--graph自动打开--topo-order,因此--topo-order可能是您想要的。

还要注意的是,你可以限制修订走路只看第一父的每个合并,使用--first-parent。在这种情况下,你根本看不到其他分支。对于--first-parent是有用的,每个合并的人都需要小心一点,这样你就没有“foxtrot合并”把提交转移到旁边分支。请参阅GIT: How can I prevent foxtrot merges in my 'master' branch?

+0

感谢您的澄清。然而,当你对过去的x次提交进行git reset时,将使用哪个命令? –

+0

'git reset'命令本身不使用这种编号系统。然而,'gitrevisions' *确实允许'〜n'(例如'HEAD_5')。这遵循*父链接*,特别是*第一父*链接。这不是一个'git reset'的东西,而是一个通用的“命名特定的关系提交”的东西,你可以使用例如'git show'来查看那个特定的提交。 https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html中有(许多)更多详细信息。 – torek