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

时间:2014-09-25 06:35:40

标签: 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手动合并。怎么做?

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

4 个答案:

答案 0 :(得分:1)

听起来你想要改变分支上的提交。有很多方法可以做到这一点。这里有几个常见的:

  1. 修复内容(删除调试内容),然后在分支上git add -A; git commit --amend,然后正常合并。

  2. git reset --soft HEAD~1在分支上,然后git reset HEAD .,将所有内容撤回,让您重新开始提交。您将进行非分期更改。

答案 1 :(得分:1)

使用此命令可以避免快进

git merge --no-ff branchname

答案 2 :(得分:0)

来自iss_b47分会

git difftool HEAD~1 -- <file>

假设您配置了合适的difftool,您将获得一个并排窗格,您可以在其中来回移动更改,然后保存结果。此时你可以git commit --amend然后git merge。

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

答案 3 :(得分:0)

使用--no-commit强制不提交,并且--squash创建它自己的提交而不是与(issue_b47)相同的提交

git merge --no-commit --squash issu_b47

执行此命令后,git将执行自动合并并将修改后的文件放入INDEX。您可以通过 git status 找到修改过的文件。

在此阶段,您可以使用任何工具进行手动合并。在那个git之后添加+ git commit来完成你的合并。您将从issue_b47获得单独的提交,因为它曾经是快进(这是正常的,因为它们在两次提交中都有不同的更改)