2014-02-22 138 views
3

我正在从Subversion切换到Git,并且我试图更好地理解如何管理分支。在删除分支后识别Git中的提交分支

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

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

所以我的问题是,如果我合并后删除分支有什么办法后来找到我在哪里解决问题123?或者,我的合并提交消息应该是“合并问题123修复”之类的东西?

回答

0

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

0

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

git merge --no-ff 

另一种方法是在将特征分支合并到主开发分支之前压缩到单个提交。这具有允许快速合并并且仍然保持特征分支的变化不同于其他开发工作的优点。缺点是您从功能分支中遗失了历史记录。

git merge --squash 

在这两种情况下,你可以强制的git总是创建一个合并提交,并留下一个合理的提交信息有关合并和它涉及到的问题。

git merge --commit 

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

0

合并自动填入消息,如“合并分支”功能“分支开发”。我总是保持这些消息不变,所以我可以看到合并的分支曾经被调用过。这是这些信息唯一保留的地方。如果删除这些合并消息和分支,就是这样。你无法弄清楚再一次是什么。

我会为某个功能签出一个新的分支,在其上工作,然后切换回我分支的任何分支 - 通常是主人,但不总是 - 然后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 

注意两个合并分支 - 每一个说“合并分支‘什么’”。这是主分支的一个独特方面,我并不是那么喜欢。如果您合并到主设备,它不会将主设备放在合并消息中。如果我已经合并到了“发布”分支,它会在这些消息中添加“释放”。即使我稍后删除了分支头,合并消息告诉我那些分支曾经被调用过。

这里有注意两件事情:生产

  1. 这个图表是用git log --all --decorate --graph --oneline(这些标志可以以任意顺序)。这组4个标志非常常见,大多数人都会将它们别名,并且我已经看到了各种别名。我使用la作为'全部列出​​',而这只是4个标志。我还有laslass用于'短'和'超短'版本, -10-25标志,这是我工作的每台机器的不同数字。我喜欢las显示一半的屏幕价值的物品,lass显示略低于四分之一的价值。我也有lb - '列表分支' - 这些的版本,这只是离开-all标志,所以它只列出我所在分支的历史。
  2. 当您进行提交时,会移至此图的左上角。直接在左侧的提交线将成为'第一个父',这意味着通过当前分支的历史合并的提交。总是合并的所有分支从左边进来。 Git甚至会通过其他行向右划一条线,以便在某些情况下可以环绕左侧,所以分支合并总是从右侧进入,并合并到左侧。通过这种方式,你总能找出你的历史中发生了什么。

如果你想要我的LA /磅的别名,只需要运行这些命令:

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文件)。调整数字来品尝。

0

您不必删除该分支,但它是一个很好的做法确实归档和反杂波:

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

How can I archive git branches?

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

所以我的问题是,如果我合并后删除分支有什么办法后来找到我的问题123?或者,我的合并提交消息应该是“合并问题123修复”之类的东西?

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

当你有一个命名修复,开发,登台等分支的好方法时,合并信息是自描述的,因为默认情况下使用分支名称。

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