我不小心提交到了错误的分支。如何删除这个提交?
删除最近的提交,同时保留你所完成的工作:
git reset --soft HEAD~1
删除最近的提交,摧毁你所做的工作:
git reset --hard HEAD~1
我不明白为什么我找到的最佳答案只在评论中!(由Daenyth得到86个赞)
git reset --hard origin
这个命令将会同步本地仓库和远程仓库,清除你在本地所做的任何更改。 你也可以按照Cleary在评论中建议的方式执行以下操作以获取与原始分支完全相同的分支。
git reset --hard origin/<branch>
git reset --hard origin/<branch>
。 - clearygit reset --soft origin/<branch>
命令。 - riverhorsefatal: ambiguous argument 'origin': unknown revision or path not in the working tree.
的错误提示,你需要指定分支,例如:git reset --hard origin/feature/my-cool-stuff
。 - Kip如果只有一个提交,不要删除它,使用git cherry-pick
就足够了。
但是如果你在错误的分支上有多个提交,那么git rebase --onto
就很有用:
假设你有这个:
x--x--x--x <-- master
\
-y--y--m--m <- y branch, with commits which should have been on master
如果您愿意,可以标记master
并将其移动到您想要的位置:
git checkout master
git branch tmp
git checkout y
git branch -f master
x--x--x--x <-- tmp
\
-y--y--m--m <- y branch, master branch
重置你的分支到正确的位置:
git checkout y
git reset --hard HEAD~2 # ~1 in your case,
# or ~n, n = number of commits to cancel
x--x--x--x <-- tmp
\
-y--y--m--m <- master branch
^
|
-- y branch
最后,将您的提交移动(重新应用它们,创建全新的提交)
git rebase --onto tmp y master
git branch -D tmp
x--x--x--x--m'--m' <-- master
\
-y--y <- y branch
执行git rebase -i FAR_ENOUGH_BACK
命令,并删除你不想要的提交行。
git rev-parse HEAD
然后切换当前分支。
git checkout other-branch
并将提交内容 cherry-pick
到 other-branch
git cherry-pick <sha-of-the-commit>
git reset --hard HEAD~1
命令。我认为使用 reset --soft
然后切换分支并再次提交会节省额外的工作。不过我大多数情况下都是使用SourceTree完成基本操作,只有在出现错误后才通过命令行进行操作。 - jusopi以下命令可以帮助我,它会放弃所有本地提交的更改,并将本地重置为与远程origin/master分支相同的状态。
git reset --hard origin
git checkout -B <branch-name> <SHA>
实际上,如果你不关心检出,你可以使用以下命令将分支设置为任何你想要的:
git branch -f <branch-name> <SHA>
git branch topic_duplicate topic
git rebase --onto dump master topic_duplicate
git branch -f dump topic_duplicate
git branch -D topic_duplicate
或使用
git branch -M topic_duplicate dump
或者只需丢弃垃圾信息
git branch -D dump
git cherry-pick master..topic
git reset --hard <latest-commit-to-keep>
git cherry-pick master..topic
git reset --hard origin
。 - Daenythgit remote
命令列出了 origin,但是运行git reset --hard origin
命令时却显示fatal: ambiguous argument 'origin': unknown revision or path not in the working tree.
的错误信息? - trssgit reset HEAD~1
也会保留您所有的更改,但是会让您留下一个空的索引而不是保留所有内容(就像--soft
选项一样)。 - Holloway