我不小心在本地主分支上运行了gitmergesome_other_branch。我还没有将更改推送给origin master。如何撤消合并?
合并后,git状态显示:
# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.
我如何撤销所有这些提交?
我不小心在本地主分支上运行了gitmergesome_other_branch。我还没有将更改推送给origin master。如何撤消合并?
合并后,git状态显示:
# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.
我如何撤销所有这些提交?
当前回答
到了这个问题,我们也希望恢复到与原点匹配(即,在原点之前没有提交)。进一步研究发现,有一个重置命令正是针对这一点:
git重置--硬@{u}
注意:@{u}是origin/master的简写。(当然,您需要远程存储库才能实现这一点。)
其他回答
您可以使用git reset命令。
git reset-将当前HEAD重置为指定状态。git重置[--混合|--soft|--hard|--merge][-q][]git-reset[-q][][-]…git重置--补丁[] [--] […]
GIT重置
它可以通过多种方式实现。
1) 中止合并
如果您处于错误合并(错误地使用了错误的分支)之间,并且希望避免合并,以便最新返回分支,如下所示:
git merge --abort
2) 将HEAD重置为远程分支
如果您从远程开发分支工作,可以将HEAD重置为远程分支上的最后一次提交,如下所示:
git reset --hard origin/develop
3) 删除当前分支,然后再次从远程存储库签出
考虑到您正在本地repo中开发分支,该分支与远程/开发分支同步,您可以执行以下操作:
git checkout master
##to delete one branch, you need to be on another branch, otherwise you will fall with the branch :)
git branch -D develop
git checkout -b develop origin/develop
如果您注意到需要在合并后立即恢复,并且在合并尝试后还没有做任何其他操作,则只需发出以下命令:git reset--hard HEAD@{1}。
本质上,如果在合并之后没有提交任何其他内容,那么合并sha将指向HEAD@{0},因此HEAD@{1}将是合并之前的前一点。
如果没有冲突和合并完成,则:
git reset --hard HEAD~1
如果在执行合并时发生冲突,则中止将使您退出最近的合并更改:
git merge --abort
或者如果您想恢复到特定的提交id。
git reset --hard <commit-id>
我认为您可以执行gitrebase-I[hash][branch_name],其中[hash]是标识哈希值,表示您希望倒回的位置加上一个(或您希望返回的提交次数),然后在编辑器中删除您不再需要的提交行。保存文件。出口祈祷它应该重新缠绕。您可能需要进行一次git重置——很难,但此时应该很好。如果您不想将特定的提交保存在历史记录中,也可以使用此选项将其从堆栈中拉出,但这可能会使存储库处于您可能不希望的状态。