我遇到了一个问题,我正在尝试使用git revert创建一个新的提交,它基本上会在主分支中重复几个旧的提交。我一直坚持这个问题很长一段时间我每次尝试运行git revert <sha>
我首先得到这个错误:
error: Your local changes would be overwritten by revert.
hint: Commit your changes or stash them to proceed.
fatal: revert failed`
我尝试添加,提交和推送,然后重试但是我得到了同样的错误,它一直让我一遍又一遍地合并相同的冲突。我试过git stash,但仍然没有运气。
git stash
Saved working directory and index state WIP on (no branch): <branch>
git revert <sha>
error: could not revert <sha>
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'`
此时,我只想在我想要的提交中克隆存储库作为当前并将其添加为头部。我试图保留我的提交历史,否则我会使用git checkout。
任何建议都会非常感激!
答案 0 :(得分:1)
类似于@phd所说的,你有两个不同的错误。第一个是有意义的,因为你有未提交的更改。第二个对你的意图没有意义,因为你处于合并冲突的中间,而不是在一个分支上。不确定你是否仍然处于这种情况,但我会跑git merge --abort
然后git stash
然后git revert <sha>
你应该是金色的。
答案 1 :(得分:1)
由于您在master
中声明了提交的重复,我假设您正在处理不同的分支,并且您的历史记录如下所示:
A-B-C-D master
\E-ζ-F* dev
其中ζ
几乎是C
的重复,F*
是一些后续提交加上一个脏工作树。既然你提到“它让我一遍又一遍地合并相同的冲突”,你可能会尝试将master
合并到dev
,这可能会因ζ
和{{1}而导致冲突不是实际的重复 - 也许一些评论增加了冲突等。
所以我最好的猜测是你真的喜欢像
这样的东西C
即。将A-B-C-D master
\ ↓
E--D'-F'* dev (or maybe E--F--D'*)
合并到master
,而没有几乎重复的提交dev
。
你已经ζ
摆脱了肮脏的状态。如果您是迄今为止唯一撤销分支的用户,则可以考虑通过git stash
重写历史记录,只需从历史记录中清除git rebase -i E
,即可获得临时分支ζ
。然后E-F
再次获取git merge master
和可选E-F-D'
来交换git rebase -i E
和F
。最后,D'
取回您的工作树,希望没有任何合并冲突。
如果您无法选择重写历史记录,则可以在修复合并冲突后git stash pop
直接获取git merge master
。无需还原更改,但让合并评论包含有关此内容的信息,并可能将E-ζ-F-D'
添加到git note
。