首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >撤消尚未推送的Git合并

撤消尚未推送的Git合并
EN

Stack Overflow用户
提问于 2010-03-06 03:24:45
回答 33查看 2.7M关注 0票数 4.4K

在我的master分支中,我在本地执行了git merge some-other-branch,但从未将更改推送到原始master。我不是故意要合并的,所以我想撤销它。在合并后执行git status时,我收到以下消息:

代码语言:javascript
运行
复制
# On branch master
# Your branch is ahead of 'origin/master' by 4 commits.

基于一些instructions I found,我尝试运行

代码语言:javascript
运行
复制
git revert HEAD -m 1

但是现在我在git status上收到了这个消息

代码语言:javascript
运行
复制
# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.

我不希望我的分支领先任何提交次数。我该如何回到这一点呢?

EN

回答 33

Stack Overflow用户

回答已采纳

发布于 2010-03-06 03:34:01

使用git reflog检查哪个提交在合并之前(git reflog将比git log更好)。然后,您可以使用以下命令重置它:

代码语言:javascript
运行
复制
git reset --hard commit_sha

还有另一种方法:

代码语言:javascript
运行
复制
git reset --hard HEAD~1

它将使您返回1次提交。

请注意,任何已修改和未提交/未存储的文件都将重置为其未修改状态的。保留它们,或者隐藏更改,或者查看下面的--merge选项。

正如@Velmont在他的回答中所建议的,在这种直接的情况下,使用:

代码语言:javascript
运行
复制
git reset --hard ORIG_HEAD

可能会产生更好的结果,因为它应该保留您的更改。在合并发生之前,ORIG_HEAD将直接指向提交,因此您不必自己寻找它。

另一个技巧是使用--merge开关而不是--hard开关,因为它不会不必要地重置文件:

代码语言:javascript
运行
复制
git reset --merge ORIG_HEAD

--合并

重置索引并更新工作树中与HEAD不同的文件,但保留索引和工作树之间不同的文件(即具有未添加更改的文件)。

票数 5.1K
EN

Stack Overflow用户

发布于 2011-03-18 02:06:07

假设您的本地主机不在原始主机/主机之前,您应该能够做到

代码语言:javascript
运行
复制
git reset --hard origin/master

然后,您的本地master分支看起来应该与origin/master相同。

票数 1.6K
EN

Stack Overflow用户

发布于 2011-06-03 00:31:44

参见chapter 4 in the Git bookthe original post by Linus Torvalds

撤消已推送的合并

代码语言:javascript
运行
复制
git revert -m 1 commit_hash

如果要再次提交分支,请务必恢复恢复,就像Linus所说的那样。

票数 1.2K
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2389361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档