git 撤销 commit

是这样,本地文件和远程仓库发生冲突了,关键我还提交了,然后经历一系列复杂的操作之后,整个变得很乱。于是我想把本地文件回滚到远程仓库的某一版本,然后重新修改提交推送,于是我还原了文件,关键是提交却没有变,如果这时候推送,将会把还原之前的提交给推送了,怎么把提交的全部清除?

图片描述

(图片来自阮老师的博客,(传送门)[http://www.ruanyifeng.com/blo...])

也就是Remote 和 workspace 都已经同步了,而 repository那里还存着上次的 '提交' (commit),如果这时候推送,将会把上次的 '提交' (commit) 给推送出去,这样同步就白搭了。怎么把那些 '提交' 清空呢?

阅读 4.7k
3 个回答

本地通过 git reset 清空 commit,然后 git push --force,强制覆盖掉远程的

或者 本地执行那个commit的反响操作,叫 git revert {commit},然后push

新手上路,请多包涵

问题描述的不是很明确啊,如果想从远程仓库的某个版本重新开发的话,重新clone一个最简单了,但是这样之前的修改都没有了。

不知道理解对了你的问题没= =

假设,现在你的情况是有五个 commit,其中 D 和 E 是你自己加上去,但又不想要的 commit:
A - B - C - D - E

现在你要变成这样:
A - B - C

对么?

如果是,那就:

git reset --hard C
git push -f yourRemote yourBranch

直接 git reset 不行,因为 reset 的默认是 git reset --mixed


楼上说的 git revert,虽然执行 git revert C 之后,代码和上面的一样,但你的历史记录会变成

A - B - C - D - E - E'。其中 E' 包含回滚 D 和 E 的代码改动

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进