管理Git分支和子分支?

时间:2015-09-01 14:46:31

标签: git mercurial git-branch branching-and-merging

我正在试图弄清楚如何管理Git分支,以便为我的开发过程提供正确且可读的流程。

基本上,我们有一个主分支,一个项目分支,然后我们可以开始在这个项目分支下开发功能。我也希望能够制作分支。

说我会有主人 - >项目 - >特征1 - > feature 1 sub 1 ...

我在Hg中得到的结果如下:

http://i.stack.imgur.com/lAz5c.png

我真正得到的是git:

http://i.stack.imgur.com/y6mmx.png

基本上,整个开发流程都会丢失,在1年内就无法知道"接口重构"是和#34;复制速度模型"的相关和子部分。

此外,我正在避免快速合并,因为它只是失去了对所有历史的记录,但是,在几个月内,我甚至无法告诉它"更新必要的setExecutionMode"是在" InterfaceRefactoring"而不是"复制......"

我正在认真考虑回到Hg并使用插件来建立Hg和Git之间的桥梁,因为Git非常难以用户友好,但我也非常想使用公司工具,因为它仍然是现代的高效的SCM(不像SVN或CVS)。

我仍然认为我能得到我想要的东西,我只是不明白怎么做 我做错了什么?

3 个答案:

答案 0 :(得分:1)

Git没有Mercurial所称的"命名分支。"相反,Git称之为"分支"与Mercurial所称的bookmarks非常相似。有一些差异:

  • 在Git中,每个头必须有一个分支指针,或者它被认为是半不存在的("分离的HEAD")并且可能在一段时间后被垃圾收集。此类头不会出现在存储库历史记录中,但可以从reflog中检索。这与Mercurial形成鲜明对比,Mercurial书签完全是可选的。
  • Git维持"远程分支机构"所有的时间,Mercurial只在本地和远程书签发生分歧时才会这样做(你得到一个"不同的书签"警告和一个名为foo@default的书签被添加到存储库中)。这意味着Git的本地分支机构必须在拉动后手动快速转发,而Mercurial会自动快速转发本地书签。
  • 在Mercurial中,@是一个特殊的书签,可能存在也可能不存在。如果是这样,克隆默认会将其检出。它可以用作指向trunk(默认分支)的指针,尽管这不是它的唯一用途。在Git中,@是当前提交的简写," main"而分支称为master

如果您需要类似Mercurial的分支,则应使用Mercurial而不是Git。

答案 1 :(得分:1)

Mercurial分支是附加到提交的字符串。 Git提交没有这样的专用字符串,但您可以为主题添加关键字:

  • EDF合并速度重复
  • DSPEED的东西
  • REFACTOR_INTERFACE的东西

有些人从bugtracker那里得到一个数字

答案 2 :(得分:0)

此外,由于您仍然使用非快进合并,因此可以通过命令请求哪些提交有助于合并

git log *mergehash*~1..*mergehash*

此范围查询也可以是各种UI,例如gitk(在视图定义中)和GitExtentions(在分支选择器中)