我不小心在本地主分支上运行了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 checkout -f
它将撤消合并(以及您所做的一切)。
其他回答
我认为您可以执行gitrebase-I[hash][branch_name],其中[hash]是标识哈希值,表示您希望倒回的位置加上一个(或您希望返回的提交次数),然后在编辑器中删除您不再需要的提交行。保存文件。出口祈祷它应该重新缠绕。您可能需要进行一次git重置——很难,但此时应该很好。如果您不想将特定的提交保存在历史记录中,也可以使用此选项将其从堆栈中拉出,但这可能会使存储库处于您可能不希望的状态。
只需创建新的分支,然后cherry pick所需的提交。
它的保护程序和更简单的重置在上面的许多答案中都有描述
如果您注意到需要在合并后立即恢复,并且在合并尝试后还没有做任何其他操作,则只需发出以下命令:git reset--hard HEAD@{1}。
本质上,如果在合并之后没有提交任何其他内容,那么合并sha将指向HEAD@{0},因此HEAD@{1}将是合并之前的前一点。
作为一个额外的选项,我主要遵循这里描述的分支模型:http://nvie.com/posts/a-successful-git-branching-model/因此,通常都会与--no ff(无快进)合并。
我刚刚阅读了这个页面,因为我无意中将一个测试分支而不是我的发布分支与用于部署的master(网站,master是实时的)合并。测试分支有另外两个分支合并到它,总共有大约六个提交。
所以为了恢复整个提交,我只需要一个git重置--hardHEAD^,它就恢复了整个合并。由于合并没有快速进行,所以合并是一个块,后退一步就是“分支未合并”。
回答问题“撤销尚未推送的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