删除分支后在Git中标识提交的分支

时间:2014-02-22 04:49:19

标签: git git-branch

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

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

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

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

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

git merge --no-ff

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

git merge --squash

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

git merge --commit

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

答案 2 :(得分:0)

Merges会自动填写一条消息,例如“将分支'功能'合并到分支开发中”。我总是保留这些消息,所以我可以看到合并的分支曾经被调用过。这是保证这些信息保留的唯一地方。如果删除这些合并消息和分支,那就是它。你无法弄清楚什么是再一次。

我将检查一个新分支的某些功能,对其进行处理,然后切换回我分支的任何分支 - 通常是主,但不总是 - 然后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放入合并消息中。如果我已经合并到了'release'分支,它会为这些消息添加“发布”。即使我后来删除了分支头,合并消息告诉我这些分支曾经被调用过。

这里有两点需要注意:

  1. 此图表是使用git log --all --decorate --graph --oneline生成的(这些标记可以按任何顺序排列)。这组4个标志是如此常见,以至于大多数人将它们作为别名,我已经看到了各种别名。我使用la表示“全部列出”,它只是那4个标志。对于“短”和“超短”版本,我还有laslass,而且这些版本只有-10-25个标志,每个我工作的机器都有不同的数字。我喜欢las显示低于半屏幕的列表,lass显示不到四分之一的价值。我还有lb - 'list branch' - 这些版本的版本,它们只留下-all标志,所以它只列出了我所在的分支的历史。
  2. 进行提交时,会移到此图的左上角。直接向左提交的行将是“第一个父母”,意味着通过当前分支的历史记录将合并到中的提交。合并 in 的所有分支始终从左侧进入。 Git甚至可以通过右边的其他线绘制一条线,这样它在某些情况下可以绕过左边,只是因为合并 in 的分支总是从右边进入,然后合并到左边。通过这种方式,您可以随时了解历史记录中发生的事情。
  3. 如果你想要我的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文件)。调整数字来品尝。

答案 3 :(得分:0)

您不必删除分支,但将其归档并消除杂乱是一种很好的做法:

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

请参阅How can I archive git branches?

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

  

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

你绝对应该使用有意义的合并消息,例如“将fix_123合并到master”是否删除了分支fix_123。

如果您有一个很好的方法来命名修复,开发,登台等分支,那么合并消息是自描述的,因为默认情况下使用分支名称。

要回答您的第一个问题,如果您在删除之前标记了分支,则可以通过标记找到修复问题的位置。