Git reset

Code and life

Download .zip Download .tar.gz

Git reset

撤回 commit

当commit之后还没有push

git reset --mixed <commit_id>
  • --soft 保留源码,只回退到commit信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.
  • --mixed 会保留源码,只是将git commit和index 信息回退到了某个版本.
  • --hard 源码也会回退到某个版本,commit和index 都会回退到某个版本.(注意,这种方式是改变本地代码仓库源码)

撤回 reset

当需要撤回reset的时候,reflog 就是用来解决这个问题的.

$ git reflog
5e972cff (HEAD -> hotfix) HEAD@{0}: reset: moving to 5e972cff
041c2e33 (origin/INT) HEAD@{1}: reset: moving to 041c2e330a0c9cf563330261b769871baf87abb3
041c2e33 (origin/INT) HEAD@{2}: reset: moving to 041c2e330a0c9cf563330261b769871baf87abb3
5e972cff (HEAD -> hotfix) HEAD@{3}: commit: 1.53/hotfix 4/MB-14629
756bdf90 (origin/hotfix) HEAD@{4}: commit: 1.53/hotfix 4/MB-14629

回到最后一次提交的位置

git reset 5e972cff

覆盖分支

例如:dev覆盖master分支

git checkout master
git reset --hard dev
git push origin master --force