Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.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 - Fatal编程技术网

如何强制手动合并git而不是快进

如何强制手动合并git而不是快进,git,Git,我创建了一个分支来解决一个问题。在这个分支中,我放置了许多调试行来识别问题,并修复了它。因此,我: * (issue_b47) Without the bug but with a lot of useless debug things * (HEAD, master) With the bug 如果我写这个 git checkout master git merge issu_b47 git将进行快进合并,然后我将继承所有我不想要的调试内容 我想做的是手动合并我的difftool。怎

我创建了一个分支来解决一个问题。在这个分支中,我放置了许多调试行来识别问题,并修复了它。因此,我:

* (issue_b47)    Without the bug but with a lot of useless debug things
* (HEAD, master) With the bug
如果我写这个

git checkout master
git merge issu_b47
git将进行快进合并,然后我将继承所有我不想要的调试内容

我想做的是手动合并我的
difftool
。怎么做


我认为在difftool的左面板上更容易清楚地看到
issue\u b47
分支,在右面板上更容易看到
master
分支。我可以决定保留与解决问题相关的内容,保存差异并完成合并。使用git有什么方法可以做到这一点吗?

听起来您希望对分支上的提交进行一些更改。有很多方法可以做到这一点。这里有几个常见的例子:

  • 修复内容(去掉调试内容),然后
    gitadd-A;git commit——修改分支上的
    ,然后正常合并

  • git reset——软头~1
    在分支上,然后
    git reset HEAD.
    ,将把所有内容都拉回来,让您重新开始提交。您将有未老化的更改

  • 来自iss_b47分公司

    git difftool HEAD~1 -- <file>
    
    git difftool头~1--
    
    假设您配置了合适的difftool,您将得到一个并排的窗格,您可以在其中来回移动更改,然后保存结果。此时,您可以
    git提交--amend
    ,然后进行git合并


    在关闭更改中,您碰巧只对调试更改执行了
    git commit
    ,然后执行了
    git commit--amend
    ,并修复了错误,然后您可以使用reflog自动提取更改。

    使用此命令可以避免快进

    git merge --no-ff branchname
    
    使用--no commit强制不提交,并使用--squash创建自己的提交,而不是与(问题7)相同的提交

    执行此命令后,git将执行自动合并并将修改后的文件放入索引中。您可以按git状态查找修改过的文件


    在此阶段,您可以使用任何工具进行手动合并。在此之后,git add+git commit完成合并。您将从问题中获得一个单独的提交,\u b47,因为它过去是快进的(这是正常的,因为两个提交中有不同的更改)

    第一个解决方案是我通常做的,但最好对两个分支的被指控文件进行区分。我将清楚地看到我所做的改变。使用这种方法,我可以保留与解决问题相关的内容。我认为无论如何,git都无法做到这一点。您可以使用git reset--soft HEAD~1获得您想要的;吉特复位头。;git add-p,最后一位将导致git获取每一块更改,并询问您是否要将其添加到提交中。@coin这是一个很好的示例,说明为什么有人应该接受这一原则。这对你现在没有帮助,但是你应该考虑一下你未来的工作流程。
    git merge --no-commit --squash issu_b47