如何强制手动合并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.
,将把所有内容都拉回来,让您重新开始提交。您将有未老化的更改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