Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.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_Git Merge - Fatal编程技术网

Git 设置可随主机一起更新的调试分支

Git 设置可随主机一起更新的调试分支,git,git-merge,Git,Git Merge,我有两个分支master和debug。如果我尝试将调试合并到主分支,它会快速前进。因此,我使用以下命令来避免快速转发: $ git merge --no-ff debug Merge made by the 'recursive' strategy. file.txt | 117 +++++++++++++++++++++++++++----------------------------------- 1 files changed, 51 insertions(+), 66 deletio

我有两个分支master和debug。如果我尝试将调试合并到主分支,它会快速前进。因此,我使用以下命令来避免快速转发:

$ git merge --no-ff debug
Merge made by the 'recursive' strategy.
file.txt |  117 +++++++++++++++++++++++++++-----------------------------------
1 files changed, 51 insertions(+), 66 deletions(-)
对我来说,这似乎仍然很快。如何手动合并? 由于git没有按照我想要的方式运行,我开始怀疑我使用git是否是错误的,或者我没有遵循其他开发人员期望的做法


我希望有一个包含所有调试选项、注释和打印语句的分支,并在代码上取得实际进展。在调试分支中正常工作后,我希望将其合并到主分支中,只合并工作代码,而不是用于调试的额外信息。这是在git上进行版本控制的有效方法吗?

在您的情况下,合并会快速进行,这仅仅是因为在合并时分支“master”完全包含在分支“debug”中——也就是说,由于没有分歧,根本没有什么可合并的

现在的问题是:如何将调试分支合并到“master”中,以便它不会收到不需要的代码块(那些调试打印输出语句等)?你已经自己回答了吗?我的意思是,使用
--no ff
是一种可行的方法(一些工作流甚至建议始终使用它),但是为什么不使用
--no commit
在提交之前实际删除不需要的代码呢

换句话说,在我看来,出于某种原因,你决定这样做:

  • 在“主”分支中有一个“原始”代码
  • 从“主”分叉一个“调试”分支
  • 在那里添加一些新代码,在那里添加一些调试代码
  • 将“debug”合并回“master”,并期望此操作以某种方式只引入非调试代码

  • 显然,这是行不通的:Git无法知道合并时哪些代码可以携带,哪些代码正在调试。

    我同意你的最后一段,第4段是错误的。这就是为什么我想做手动合并。我想将调试分支上的提交保持为单独的,
    --没有提交
    为我完成了这项工作。谢谢Kostix。但是我希望git在提交之前能够打开git difftool,即使没有
    --no commit
    来解决差异,这样可以确保主分支不会留下任何代码,或者给开发人员一个浏览的机会。你写了“没有分歧”——既然有插入和删除,就没有分歧了吗?为什么会认为没有分歧?@Foresteer,你的问题是一个非常哲学的问题,因为它实际上涉及到其他问题,如“分支是什么?”、“合并到底由什么构成?”等。Git开发人员对分支和合并的定义进行了编码,这似乎与你的定义不同。我不知道从这一点上该往哪里走。。。Git的创建主要是为了管理源代码。Git中的合并尝试将所有文本更改从其他分支带入当前分支;如果这些文本更改发生冲突(或存在文件级删除/修改冲突),则会声明冲突。@Foresigner,因此,如果Git发现要合并的分支在技术上只是当前分支的简单延续,则当前分支仅升级为指向合并分支提示提交(“快进”)因为要从该分支引入所有更改,没有必要进行真正的合并。这就是Git的假设。如果您的意思是,您将要进行的ff合并不应带来所有更改,那么您必须使用
    --no commit
    命令行选项告诉Git这一点。@Foreigner,请注意,在某种意义上,进行这种编辑合并时,您正在破坏“契约”,因为这种合并的结果不会包括来自合并in分支的所有更改,这是默认情况下假定的。这种方法没有错,但你应该明白你在做什么。@Foreigner,关于“没有分歧”。。。应该强调的是,就Git而言,当要合并到另一个分支中的两个分支自其分支点以来都被修改(收到各自的提交)时,就会发生分歧——实际上创建了“fork”。这就是分歧。