代码之家  ›  专栏  ›  技术社区  ›  Nanda Kishore

Git:无法理解主分支上发生分支(主题)提交/合并的原因

  •  6
  • Nanda Kishore  · 技术社区  · 16 年前

    注意:我不确定是否已经问过这个问题,因为我找不到任何适合我的上下文的问题(或者我无法理解现有的问题“上下文”)

    我(预期)的工作流程如下:创建主题分支==>关于主题分支的工作==>将文件提交到分支==>将主题分支更改合并到“主”分支(然后删除主题分支)

    我试着在几个分支上做同样的事情。它工作得很好。但后来当我检查git图时,即使我遵循相同的工作流程,所有的机会都发生在“master”上。没有树线分叉和汇聚!它显示了从那时起具有多个提交的一行。我不知道为什么?我的印象是,我用头指针搞砸了什么?

    为了提供一个实用的视图,下面是我的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)
    
    6 回复  |  直到 12 年前
        1
  •  5
  •   Community Mohan Dere    9 年前

    但后来当我检查git图时,即使我遵循相同的工作流程,所有的机会都发生在“master”上。没有树线分叉和汇聚!

    你会发现在这个 page all the possible merge scenarios
    (于2007年底编制,截至目前,投稿人: 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.2/ " git merge --no-commit branch

    与2.1类似,因为快进不会创建提交。


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


    我发现许多编码人员太习惯于集中式SCM,以至于他们忽略了这样一个事实,即我们的图形可视化工具实际上正在显示和连接不同的存储库。


    当我想了解社区在回购协议中所做的事情时,我可以点击图表,立即查看其他人所做的事情。
    如果我把Bertg的更改拉进去,下次我看到图表时,Bertg将不再显示,因为他将不再有任何我没有的提交。
    继续思考待办事项清单,你就会理解图表。

    因此,如果来自其他回购分支机构的合并是这样的(即,一旦这些分支机构被合并,您就再也看不到它们了),那么来自其他回购分支机构的合并可能也是这样 你自己的

    但我知道,因为:

    • 我不是这个项目的所有者。
        2
  •  7
  •   John Stoneham    16 年前

    我打赌你在找 --no-ff 打开 git merge merge 只需更新 HEAD 到新分支的顶端,如果没有中间的commit。

    如果要保留合并提交以帮助分组提交,请传递 .

        3
  •  0
  •   stefanB    16 年前

    你在用类似的东西吗

    git show-branch
    

    git log 显示每个分支的所有提交。

        4
  •  0
  •   Chris J    16 年前

    ...
    >> 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
    ...
    
        5
  •  0
  •   Jamey Hicks    16 年前

    git branch 但并没有检查它是否移动到分支机构。您可以按以下步骤一步完成此操作:

    git checkout master -b topic22
    

    这使您不太可能无意中向master承诺。

    现在您已经添加了所执行的命令序列,我看到您已经签出了分支。

    命令序列看起来不错。我认为看起来没有分支的原因是主分支上没有干预提交。合并后,它看起来像一个连续的开发流程。这在另一个答案中得到了很好的讨论,因此无需在此详述。

        6
  •  0
  •   Spencer    15 年前

    git merge --no-ff :

    git merge --squash git log .

    我们已经在一个链接到SVN的项目中使用了它(通过 git svn ),使我们的主要分支具有线性历史。这样,我们就不必在运行之前将git提交图展平 git svn dcommit .