一.只git commit 而没有 git push的撤销:
- 找到上次git commit的 id
git log
找到你想撤销到的commit_id - git reset --hard commit_id
完成撤销,同时将代码恢复到commit_id 对应的版本。 - git reset commit_id
完成Commit命令的撤销,但是不对代码修改进行撤销,可以直接通过git commit 重新提交对本地代码的修改。
二:撤销已经push到远程的commit:
情况1:
在使用git时,push到远端后发现commit了多余的文件,或者希望能够回退到以前的版本。先在本地回退到相应的版本:
git reset --hard <版本号>
// 注意使用 --hard 参数会抛弃当前工作区的修改
// 使用 --soft 参数的话会回退到之前的版本,但是保留当前工作区的修改,可以重新提交
如果此时使用命令:git push origin <分支名>,会提示本地的版本落后于远端的版本;
为了覆盖掉远端的版本信息,使远端的仓库也回退到相应的版本,需要加上参数--force
git push origin <分支名> --force
情况2:
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit
看似达到的效果是一样的,其实完全不同.
第一:
上面我们说的如果你已经push到线上代码库, reset 删除指定commit以后,你git push可能导致一大堆冲突.但是revert 并不会.
第二:
如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是revert 方向提交的commit 并不会出现在历史分支里.
第三:
reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的.
网友评论