2010-02-04 105 views
6

注意:我不确定是否已经提出这个问题,因为我找不到符合我的上下文(或I)的任何问题我无法理解现有问题的背景“)Git:无法理解主分支上发生分支(主题)提交/合并的原因

我很喜欢Git这些天。特别是,话题分支。我正在研究一个小型代码共享应用程序。我有(主),“认证”,“书签”,“评论”,“鼻子”等(本地)分支...

我的(打算)工作流程如下所示:创建主题分支==>处理主题分支==>将文件提交到分支==>将主题分支更改合并到“主”分支。 (后来删除主题分支)

我试着做同样的几个分支。它运行良好。但后来当我检查git图时,即使我遵循相同的工作流程,所有机会都发生在“主”上。没有树线分歧和聚合!它从那时起显示了一条带有多个提交的单线。我不知道为什么?我的印象是,我用头指针拧了一些东西?

举一个实际的看法,这是我的git图:http://github.com/none-da/zeshare/network

下面是我使用的命令:

>> git branch authentication_feature 
>> git checkout authentication_feature 
>> # I work with all the files here in "authentication_feature" branch 
>> git commit -m "Authentication_feature is up" # commiting to the branch 
>> git branch # just to confirm, which branch I am working on 
>> git checkout master # trying to shift to master branch 
>> git merge --no-commit authentication_feature # I merge in two steps. This is step 1 
>> git status;git add; git commit -m "Authentication_feature" merged to "master". # This is the step 2 
>> git log --graph --pretty=oneline # confirming the graph 
>> git push origin master # pushing to the remote server(github) 
+0

您的链接不适合我。你是如何创建分支的?我想我们需要更多的信息,比如你使用的命令。 – 2010-02-04 02:44:39

+0

恐怕没有足够的答案细节(链接超时),请确保遵循任何教程/手册并查看是否得到相同的结果。选中您进行更改的分支等等。 – stefanB 2010-02-04 02:52:34

回答

5

但后来当我检查git的图形,即使我遵循同样的流程,所有的机会都发生在“主”。没有树线分歧和聚合!

嗯......我看你的一些分支和合并的。

你会发现在这个page all the possible merge scenarios
(当时编译 - 2007年末 - 现在SO贡献者:Jakub Narębski

您可以在快进的情况下,这可以解释为什么你的合并将使所有的提交似乎都会在完成后提交:

2 /快进案例;有没有提交A,B,C,和我们 从以下情况开始:

1---2---3    <-- trunk <-- HEAD 
      \ 
      \-a---b---c <-- branch 

2.1/“git merge branch

1---2---3   /----- trunk <-- HEAD 
      \   v 
      \-a---b---c <-- branch 

一晃结果简单地移动树干的头部。在2.1

2.2 /“git merge --no-commit branch

喜欢,因为快进不创建一个承诺:
它不创建一个提交,因此。

所以,如果你没有在主犯,因为你分支出来,然后做主人的合并,你要做的就是重置主HEAD ...


另一个原因为分支不显示是在presentation page of the GitHub Network Graph visualizer描述的“待办事项列表效应”(这是“混帐图”你是指这里)

但你看到的每一次提交一次。让它沉入第二。
我发现,很多程序员都习惯了,他们错过了事实,我们的图形可视化工具实际上是显示和连接不同信息库的集中供应链管理。

如果我以自己为根图绘制图,那么该图显示了一些待办事项的代码列表,但我还没有将其拖入我的代码库。
当我想赶上什么社会在他们我的回购叉一直在做,我可以打了图表,就能看到立即别人已经达到。
如果我在Bertg的变化来拉,下一次我看到图表,Bertg将不再显示在所有的,因为他将不再有我没有任何承诺。
继续思考待办事项清单,您将了解该图表。

因此,如果对于来自其他回购分行的合并(即,您合并后不再看到这些分支机构),这可能是因为合并您自己的回购分支机构:合并后,您不会再在图表中看到它们。

但我这样做,因为:

  • 我不是该项目的所有者。
  • 我可能想从您的任何分支中提取我的回购变更。
+0

哦!这让我想!但如果你看到我的项目图,我开始在开始时看到不同的分支,并且合并了一个和两个分支,但后来即使我对另一个分支也做了同样的事情,但我没有看到该分支有类似的分支(之前已经发生过)。看起来好像整个提交是在master上完成的,我认为这就是整个问题,“git merge --no-commit”(我之前提到过)实际上是对这个问题负责的,不是吗? – 2010-02-04 08:42:17

+0

@Maddy: “'git merge --no-commit'”在这里并不是原因,如果你处于快进合并场景。请参阅我的编辑答案。 – VonC 2010-02-04 09:06:53

+0

'git merge --no-commit':With'--no-提交'执行合并,但假装合并失败并且不自动提交,给用户一个检查和进一步调整的机会他在提交之前合并结果。 - 所以这意味着代码被合并,但它不是在git记录器,所以你不会看到图中的任何合并,是正确的? – stefanB 2010-02-04 22:52:36

0

你没有说你实际使用什么命令,但我的猜测是,你用git branch创建了你的分支,但没有检查出它移动到分支。您可以按照以下步骤执行此操作:

git checkout master -b topic22 

这使您不太可能会无意中承诺主人。

既然你已经添加了你所做的命令序列,我看到你没有签出分支。

命令序列看起来很好。我认为它看起来没有分支的原因是因为在主分支上没有干预提交。合并后,它看起来像一个顺序开发流程。这在其他答案中有很好的讨论,所以不需要在这里详细说明。

+0

@Jamey,我用我使用的命令更新了我的问题。请咨询问题所在。 – 2010-02-04 05:08:35

+0

我总是发现topic22是一个有趣的功能。 – theIV 2010-02-04 05:09:40

0

你使用类似

git show-branch 

向您展示的分支机构和签到,一旦你合并你的分支掌握你看不到了修改 - 不知道为什么。

我找不到任何行为的解释,但似乎没有任何git存储库的问题,因为git log显示每个分支的所有提交。

所以我想这只是工具显示分支图的方式。

+0

@stefanB,我用我使用的命令更新了我的问题。请咨询问题所在。 – 2010-02-04 05:07:42

+0

@stefanB,但github网络图应反映我如何提交和合并否?我确定我使用命令的方式有些问题! – 2010-02-04 05:24:58

0

我是git和github自己的新品牌(链接仍然存在),但是在看完你的步骤之后,是不是因为你没有将实际分支推送到github?这似乎是为我工作至今(我插入推送命令):

... 
>> git commit -m "Authentication_feature is up" # commiting to the branch 
>> git branch # just to confirm, which branch I am working on 
>> git push origin authentication_feature # push the branch to github 
>> git checkout master # trying to shift to master branch 
... 
+0

@Chris,你将分支推送到远程地址,这很好,但没有合并到主站!如果你检查网络图形链接(如果github现在已经启动),我提到的方法确实创建了不同的线条(图线),只是以前。它现在只做:'(我也是新来的git的方式 – 2010-02-04 06:01:46

+0

重新:合并到主人 - 我删除了其他步骤(“...”) – 2010-02-04 14:50:47

7

我敢打赌,你正在寻找--no-ff开关git merge。默认情况下,merge只会将HEAD更新为新分支的提示,如果没有干预提交。

如果您想离开合并提交以帮助分组您的提交,请通过--no-ff

+0

我开始使用这个,我永远不会离开它。 – 2010-03-18 13:39:27

0

作为替代使用git merge --no-ff

如果要提交专题分会发展的作用主要分支,但不是所有的人的承诺,那么你可以使用git merge --squash。当您这样做时,提交未标记为合并,并且没有主题分支的第二个父代。单个提交列表包含在压扁合并的提交注释中,因为它们将以git log列出。

我们一直在使用这个与SVN链接的项目(由git svn),所以我们的主分支有一个线性历史记录。这样,我们不必在运行git svn dcommit之前将git落实图变平。

相关问题