我不小心在本地主分支上运行了gitmergesome_other_branch。我还没有将更改推送给origin master。如何撤消合并?


合并后,git状态显示:

# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.

我如何撤销所有这些提交?


当前回答

我认为您可以执行gitrebase-I[hash][branch_name],其中[hash]是标识哈希值,表示您希望倒回的位置加上一个(或您希望返回的提交次数),然后在编辑器中删除您不再需要的提交行。保存文件。出口祈祷它应该重新缠绕。您可能需要进行一次git重置——很难,但此时应该很好。如果您不想将特定的提交保存在历史记录中,也可以使用此选项将其从堆栈中拉出,但这可能会使存储库处于您可能不希望的状态。

其他回答

您可以使用git reset命令。

git reset-将当前HEAD重置为指定状态。git重置[--混合|--soft|--hard|--merge][-q][]git-reset[-q][][-]…git重置--补丁[] [--] […]

GIT重置

回答问题“撤销尚未推送的Git合并”

您可以使用git reset-hard HEAD~1

考虑以下情况,其中有2个分支主功能1:


$ git log --graph --oneline --all

执行Git合并

$ git merge feature-1

$ git log --graph --oneline --all

撤消Git合并

$ git reset --hard HEAD~1

$ git log --graph --oneline --all

假设您的本地主机不领先于源/主机,您应该能够

git reset --hard origin/<branch-name>

因此,假设您在master上执行了此操作,那么您的本地master分支看起来应该与origin/master相同。

如果分支被合并而未被推送,则下面给出的git reset命令将用于撤消合并:

git reset --merge ORIG_HEAD

例子:

git reset --merge origin/master

使用现代Git,您可以:

git merge --abort

旧语法:

git reset --merge

旧学校:

git reset --hard

但实际上,值得注意的是,如果存在merge_HEAD,gitmerge--abort仅等同于git-reset--merge。这可以在Git帮助的merge命令中阅读。

git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present.

在失败的合并之后,如果没有merge_HEAD,则可以使用git-reset-mmerge来撤销失败的合并,但不一定使用gitmerge-art来撤销,因此它们不仅是同一事物的新旧语法。

我个人认为git reset-merge在日常工作中更加强大和有用,所以这是我一直使用的方法。