我想修改在我们的持续集成服务器上未通过单元测试的合并提交,但我不想留下未通过历史测试的提交。
由于此提交仅由 CI 服务器使用(并且不会被其他任何人拉下),我想修复合并,然后--force
将其推送以替换现有的失败合并提交。
我的问题是,我无法弄清楚如何轻松地回到原始提交之前的状态,以便我可以修复失败的测试,重新提交合并,然后强制推动该更改。
我真的不想重做整个合并,因为有相当多的文件必须解决冲突,除了一个以外的所有文件都已成功解决。
到目前为止我尝试过的
尝试1:git reset
我的第一次尝试是在合并提交之前对提交进行混合重置,修复合并引入的错误,然后重新提交。
git reset HEAD^
# Fix the failing test
git commit
不幸的是,这导致了一个非合并提交,它默默地合并了所有的分支更改——这并不是我真正想要的。*8')
尝试 2: reset
, stash
, merge
&apply
然后我尝试使用 stash 来保存我在第一次尝试合并时所做的更改:
git reset HEAD^
git add . # Since there were untracked files
git stash
git merge branch
git stash apply # Fails
git add .
git stash apply # Merged but with conflicts
不幸的是,当git stash apply
尝试将我的隐藏更改与现有的冲突合并文件合并时,它失败并出现错误
无法应用于脏工作树,请暂存您的更改
如果我尽职尽责地使用git add .
thengit stash apply
运行使我的工作目录干净,但现在我不仅有冲突,我还与它们中的冲突发生冲突,并且任何应该删除的文件都已重新添加。
尝试 3:amend
和/或rebase
.
我尝试了qqx的简单建议来解决问题和原始提交,但实际上没有回到中间合并状态,您将无法访问合并工具。git commit --amend
一旦我提交,我就失去了运行的能力,git mergetool {file}
因为它只是返回错误:
{file}:文件不需要合并
在尝试修复合并冲突时,我真的很喜欢能够使用kdiff3
.
usingrebase
遇到同样的问题。
任何可以让我达到我想要的结果的工作流程提示将不胜感激。