Git版本回退

1.git diff XXX

  • 当我们使用git status查看工作区做了什么修改时,可以使用git diff XXX对修改过的文件XXX查看差异

2.git reset --hard HEAD^

版本库回退

  • 首先HEAD是指向当前版本的指针,我们提交的所有操作都建立在这个指针上。
  • HEAD是可以移动的,这条命令就是移动HEAD指针在历史版本中移动,HEAD^表示上一版本,HEAD^^和HEAD~2表示上两个版本,以此类推。
  • 由于有--hard这个参数,版本库相当于不知道有未来版本了,使用git log也没法查找到未来版本的commit-id。然后使用以下命令:

    1
    2
    3
    //用git reflog来找回之前commit的commit-id
    git reflog
    git reset --hard commit_id

即可找回原来的版本。

3.git revert HEAD

回退到上一版本的另一种方法,注意参数HEAD,是回退到上一版本。

  • git reset是不会产生新的提交记录,反而有可能抹去提交记录,当我们要推送到远程仓库时,显然没有提交记录怎么推送呢?所以git reset适合操作本地仓库,不需要分享给远程仓库的。
  • git revert是会在HEAD节点基础上生成一个提交节点的,也就是新的提交,所以可以推送到远程仓库,别人也能查看到远程记录。

4.git branch -f master HEAD^

在git branch命令后加上参数-f和分支名master以及节点名HEAD^,这样就把master分支强制指向了HEAD的上一版本。即使当前HEAD不在master分支上,使用这个命令也能强制移动master分支的最新提交节点。

5.清空提交记录(慎重)

有时候不小心把敏感信息上传到远程仓库怎么办?别怕按照以下步骤来,代价是以前的提交历史都没了。

  • 将敏感信息删除并生成一个commit。
  • 创建并切换到临时无提交分支temp:git checkout –orphan temp
  • 添加所有文件:git add -A
  • 提交更改:git commit -am “init”
  • 删除master分支:git branch -D master
  • 将temp分支重命名为master:git branch -m master
  • 强制推送到远程仓库:git push -f origin master