【问题标题】:Identifying branch of commits in Git after deleting a branch删除分支后在 Git 中识别提交的分支
【发布时间】:2014-03-23 21:02:16
【问题描述】:

我正在从 subversion 切换到 Git,我正在尝试更好地了解我应该如何管理分支。

假设我的软件中有一个错误,在我的错误跟踪系统中记录为问题 123。我可能会在 git 中创建一个新分支来修复名为“issue123”的错误。我提交了一些更改来修复错误,并将其合并回主开发分支。

此时听起来我应该删除分支。与修复相关的提交将保留在存储库中,因为问题 123 已解决,所以我不再需要指向分支的指针。

所以我的问题是,如果我在合并后删除分支,以后有什么办法可以找到我修复问题 123 的位置吗?还是我的合并提交消息应该类似于“合并问题 123 修复”?

【问题讨论】:

    标签: git git-branch


    【解决方案1】:

    一旦你将侧分支“bug123”合并到 - 让我们说“Main”,合并本身将是一个名为“Merge branch bug123”的提交。你不需要命名它。 合并提交将包含您为修复“bug123”所做的所有更改。

    【讨论】:

      【解决方案2】:

      如果您想查看该特定分支的特定历史记录,您可以在将其重新合并时始终选择非快进合并。这样主开发分支中的其他工作将不会与历史。

      git merge --no-ff
      

      另一种方法是在将功能分支合并到主开发分支之前将其压缩为单个提交。这样做的好处是允许快速合并,并且仍然保持功能分支的更改与其他开发工作不同。缺点是您会丢失功能分支内的历史记录。

      git merge --squash
      

      在任何一种情况下,您都可以强制 git 始终创建合并提交,并留下关于合并及其相关问题的合理提交消息。

      git merge --commit
      

      我建议创建一些本地分支并尝试使用所有选项,看看它们如何影响您的存储库。

      【讨论】:

        【解决方案3】:

        合并自动填写一条消息,例如“将分支'功能'合并到分支开发中”。我总是将这些消息保持原样,这样我就可以看到合并的分支曾经被称为什么。这是唯一保证保留此信息的地方。如果您删除这些合并消息和分支,就是这样。你再也想不出是什么了。

        我将为某些功能检查一个新分支,对其进行处理,然后切换回我分支的任何分支 - 通常是 master,但并非总是如此 - 然后是 git merge --no-ff <feature branch>。以下是我为动画装配角色的项目中的一些示例提交:

        * c117bff Make squash joint scaling uniform
        * 9eb9ac2 Fix eyelid control limit
        *   b50c967 Merge branch 'lipWeightImprovements'
        |\  
        | * 6f98ea7 Smooth cheek weighting
        | * fdf3f91 Improve lip weights
        |/  
        *   4434223 Merge branch 'hair'
        |\  
        | * a3f3f89 Add hair controls for front half of head
        | * 22a6bf4 Add joints for and weight front hair pieces
        |/  
        * c338c14 Move archived script into archive/scripted folder
        

        注意两个合并分支 - 每个都说“合并分支'随便'”。这是 master 分支的一个独特方面,我不是很喜欢。如果您合并到 master,它不会将 master 放在合并消息中。如果我合并到了“发布”分支,它会将“发布”添加到这些消息中。尽管我后来删除了分支头,但合并消息告诉我这些分支曾经被称为什么。

        这里有两点需要注意:

        1. 此图是使用git log --all --decorate --graph --oneline 生成的(这些标志可以按任何顺序排列)。这组 4 个标志非常常见,以至于大多数人都给它们起了别名,而且我见过各种各样的别名。我将la 用于“列出所有”,它只是这4 个标志。我也有 laslass 用于“短”和“超短”版本,而那些只是附加,例如-10-25 标志,这是我工作的每台机器的不同数字。我喜欢las 显示略低于屏幕一半的列表,lass 显示略低于四分之一屏幕的列表。我也有 lb - 'list branch' - 这些版本,只是去掉了 -all 标志,所以它只列出了我所在分支的历史记录。
        2. 当您提交时,它会移动到该图的左上角。直接在左侧下方的提交行将是“第一父母”,这意味着通过当前分支的历史合并的提交。所有合并 in 的分支总是从左边进来。 Git 甚至会在右边画一条穿过其他线的线,这样它在某些情况下可以环绕左边,所以合并 in 的分支总是从右边进来,然后合并到左边。通过这种方式,您可以随时了解您的历史记录。

        如果你想要我的 la/lb 别名,只需运行以下命令:

        git config --global alias.la 'log --oneline --graph --all --decorate'
        git config --global alias.las 'log --oneline --graph --all --decorate -20'
        git config --global alias.lass 'log --oneline --graph --all --decorate -8'
        git config --global alias.lb 'log --oneline --graph --decorate'
        git config --global alias.lbs 'log --oneline --graph --decorate -20'
        git config --global alias.lbss 'log --oneline --graph --decorate -8'
        

        这将为所有存储库设置它(通过您的 ~/.gitconfig 文件)。调整数字以适应口味。

        【讨论】:

          【解决方案4】:

          您不必删除分支,但将其存档并整理确实是一个好习惯:

          $ git tag archive/branch branch
          $ git branch -d branch
          

          How can I archive git branches?

          当你标记分支并删除它时,你仍然可以通过标记找到它,但它不会显示在分支列表中。

          所以我的问题是,如果我在合并后删除分支,以后有什么办法可以找到我修复问题 123 的位置吗?还是我的合并提交消息应该类似于“合并问题 123 修复”?

          您绝对应该使用有意义的合并消息,例如“merge fix_123 into master”无论是否删除分支 fix_123。

          当您有一个命名 fix、develop、staging 等分支的好方法时,合并消息是自描述的,因为默认使用分支名称。

          回答你的第一个问题,如果你在删除之前标记了分支,你可以通过标记找到你修复问题的地方。

          【讨论】:

            猜你喜欢
            • 2022-10-15
            • 1970-01-01
            • 2019-01-31
            • 2021-08-02
            • 2015-02-13
            • 2017-01-24
            • 1970-01-01
            • 2016-07-20
            • 2014-07-14
            相关资源
            最近更新 更多