git 撤消上次提交/合并

k3bvogb1  于 2023-08-01  发布在  Git
关注(0)|答案(5)|浏览(125)

我的git repo有点混乱。我在另一个分支做过一个专题。完成工作后,我切换到master并将其合并到,但我的合作伙伴推了几个文件,这些文件与我的文件发生冲突。合并后,冲突和推动新的变化,我看到我也犯了我的合作伙伴的旧的变化。
现在我想重做这个提交/合并。我尝试了git reset --soft HEAD^,但当我想推时,我得到了这个错误消息Merge the remote changes before pushing again
有人能帮帮我吗?

uurity8g

uurity8g1#

你的特性分支仍然会指向你的工作。您不会丢失这些更改。
就像plaes说的,你可以用

git reset --hard HEAD^

字符串
如果你想从你的分支中抓取一些特定的文件而不合并,你可以 checkout 它们:

git checkout yourbranch -- file1 file2 etc


如果你想从合并前的master中获取一些文件,你也可以 checkout 这些文件:

git checkout master^ -- file3 file4 etc


这并不理想,但有时候是需要的。merge /may/意味着您拒绝合并中任何一方的某些更改。实现正确合并的最佳方法是:

git merge --no-commit yourbranch


然后运行上面的git checkout命令,最后提交:

git add . -A
git commit


现在推送此分支时,需要添加force选项

git push --force


或者是

git push -f


希望这对你有帮助。

b09cbbtk

b09cbbtk2#

呵呵,你差点就想明白了:

git reset --hard HEAD^

字符串

vktxenjb

vktxenjb3#

这里的问题是,您希望撤消已经推送到中央存储库的更改。如果你一开始就没有推送它们,一个git reset --hard/--soft/--mixed HEAD^就可以完成这个任务。
所以当你重置了你的HEAD后,当你试图推送到源并更新不是你的HEAD祖先的远程引用时,git会抱怨。Use --force:

git push --force origin master

字符串

332nm8kg

332nm8kg4#

使用git reset --hard origin/master代替,这将执行硬重置以及删除合并。来自链接Undo a Git merge that hasn't been pushed yet

b5lpy0ml

b5lpy0ml5#

让我为那些不太了解git的用户简化一下,比如我:D
如果你想取消合并提交并将其从远程git中删除。关注:

git reset --hard HEAD^

字符串
或者是

git reset --merge hash-of-commit-before-merge i.e. c4ab5de


现在您已经成功地在本地重置,是时候在远程更新/同步了

git push --force // this will remove the merge or afterwards commits

相关问题