我创建了一个分支来解决问题。在这个分支中,我放了很多调试行来识别问题并修复了它。所以我有:
* (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做到这一点?
答案 0 :(得分:1)
听起来你想要改变分支上的提交。有很多方法可以做到这一点。这里有几个常见的:
修复内容(删除调试内容),然后在分支上git add -A; git commit --amend
,然后正常合并。
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获得单独的提交,因为它曾经是快进(这是正常的,因为它们在两次提交中都有不同的更改)