Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
管理Git分支机构和分支机构?_Git_Mercurial_Git Branch_Branching And Merging - Fatal编程技术网

管理Git分支机构和分支机构?

管理Git分支机构和分支机构?,git,mercurial,git-branch,branching-and-merging,Git,Mercurial,Git Branch,Branching And Merging,我试图弄清楚如何管理Git分支,以便为我的开发过程提供一个正确且可读的流程 基本上,我们有一个主分支,一个项目分支,然后我们可以在这个项目分支下开始开发特性。我也希望能做支行 假设我将拥有master->project->feature 1->feature 1 sub 1 我在Hg中得到的结果如下: 我在git下实际得到的是: 基本上,整个开发流程都丢失了,1年内将无法知道“接口重构”是相关的,是“速度模型复制”的一个子部分 此外,我正在避免快进合并,因为它只是失去了所有历史的轨道,但是,

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

基本上,我们有一个主分支,一个项目分支,然后我们可以在这个项目分支下开始开发特性。我也希望能做支行

假设我将拥有master->project->feature 1->feature 1 sub 1

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

我在git下实际得到的是:

基本上,整个开发流程都丢失了,1年内将无法知道“接口重构”是相关的,是“速度模型复制”的一个子部分

此外,我正在避免快进合并,因为它只是失去了所有历史的轨道,但是,在几个月内,甚至我都无法判断“更新必要的setExecutionMode”是在“InterfaceRefactoring”而不是“复制…”下完成的

我正在认真考虑回到Hg,使用一个插件在Hg和Git之间架起一座桥梁,因为Git非常不友好,但我也非常想使用公司的工具,因为它仍然是一个现代高效的SCM(不像SVN或CVS)

我仍然认为我可以得到我想要的,我只是不知道如何得到。

我做错了什么?

Git没有Mercurial所称的“命名分支”。相反,Git所称的“分支”与Mercurial所称的非常相似。有几点不同:

  • 在Git中,每个头都必须有一个分支指针,否则它被认为是半不存在的(“分离头”),可能会在一段时间后被垃圾收集。此类标头不会出现在存储库历史记录中,但可以从中检索。这与Mercurial形成对比,Mercurial的书签是完全可选的
  • Git始终维护“远程分支”,而Mercurial只在本地和远程书签出现分歧时才这样做(您会收到“分歧书签”警告和一个名为
    foo@default
    已添加到存储库)。这意味着Git的本地分支必须在拉操作后手动快进,而Mercurial在拉操作时自动快进本地书签
  • 在Mercurial中,
    @
    是一种特殊的书签,可能存在也可能不存在。如果是,克隆默认会将其签出。它可以用作指向主干(默认分支)的指针,尽管这不是它的唯一用途。在Git中,
    @
    是当前提交的简写,而“main”分支被称为
    master

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

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

  • EDF合并速度复制
  • 速度快的东西
  • 重构接口的东西

有些人还从bugtracker中输入了一个数字,因为您无论如何都要使用非快进合并,所以可以请求哪些提交有助于使用merge with命令

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

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

我建议实际查看Git网络图,以便更准确地查看分支结构。在Git中,分支只是指向提交的指针。它不保存历史信息。我很好奇你如何避免快进合并。您是否执行额外的提交以确保合并发生?什么是git网络图?Wolf:有一个tortoiseGit合并选项:无快进(命令行:---无ff)。一般来说,功能请求和bug都应该出现在bug跟踪器中,所以不管Git和Mercurial如何,在大多数提交消息中输入bug编号都是很好的做法。谢谢。请不要说,如果我可以使用Mercurial,我肯定会:)