git 版本回退

1、本地仓库分支版本回退
第一步、用下面命令找到要回退的版本的 commit id:

git reflog 或 git log --oneline

注:git reflog 查看命令历史 git log --oneline 查看历史版本简洁信息
git 版本回退_第1张图片
第二步、回退版本:

git reset --hard 2e6ab1d

2、远程仓库分支版本回退的方法
第一步、首先要回退本地分支:

git reflog
git reset --hard 2e6ab1d

第二步、强制推送到远程分支:

git push -f

注:本地分支回滚后,版本将落后远程分支,必须使用强制推送覆盖远程分支,否则无法推送到远程分支。
3、公共远程分支版本回退的方法(一)
git 版本回退_第2张图片
A、B分别代表两个员工,A1、A2、B1代表各自的提交记录。所有人的本地分支都已经更新到最新版本,和远程分支一致。
此时,假设A员工发现 A2 这次提交有错误,你用 reset 回滚远程分支 master 到 A1。此时,最理想状态是B员工拉代码 git pull,B员工的 master 分支也自动回滚了。但是现实并不是这样,B员工会看到下面的提示:

$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)
nothing to commit, working directory clean

也就是说,B员工的分支并没有主动回退,而是比远程分支超前了两次提交,因为远程分支回退了。
此时B员工需要作如下操作:

git checkout b_branch           // 先回到自己的分支  
git reflog                      // 接着看看当前的 commit id,例如:d517b5d   
git reset --hard B1             // 回到被覆盖的那次提交 B1
git checkout -b b_backup        // 拉个分支,用于保存之前因为回退版本被覆盖掉的提交B1
git checkout b_branch           // 拉完分支,迅速回到自己分支
git reset --hard d517b5d        // 马上回到自己分支的最前端

B1那次提交找回来了,这时 b_backup 分支最新的一次提交就是B1,然后将本地 master 分支和远程 master 分支保持一致:

git reset --hard origin/master

这是B员工本地 maser 分支的代码是 A1。然后B员工再次合并那个被丢掉的B1提交:

git checkout master             // 切换到 master
git merge tony_backup           // 再合并一次带有B1的分支到 master

这个时候B员工的 master 分支的代码是 A1-B1。终于把丢掉的B1给找回来了,接着B员工执行 push 操作,A员工拉取也能同步代码。
如果C员工没有提交代码,那么他拉完代码 git pull 之后,只需要强制用远程 master 覆盖掉本地 master 即可。

git reset --hard origin/master

4、公共远程分支版本回退的方法(二)

git revert HEAD                     // 撤销最近一次提交
git revert HEAD~1                   // 撤销上上次的提交,注意:数字从0开始
git revert d517b5d                  // 撤销 d517b5d 这次提交

注:git revert 撤销某次提交。它会产生一个新的提交,虽然代码回退了,但是版本依然是向前的,所以,当你用revert回退之后,所有人pull之后,他们的代码也自动的回退了。
注意以下几点:

  1. 使用 revert 是撤销一次提交,所以后面的 commit id 是你需要回滚到的版本的前一次提交。
  2. 使用 revert HEAD 是撤销最近的一次提交,如果你最近一次提交是用revert命令产生的,那么你再执行一次,就相当于撤销了上次的撤销操作,换句话说,你连续执行两次revert HEAD命令,就跟没执行是一样的。
  3. 使用 revert HEAD~1 是撤销最近 2 次提交,这个数字是从 0 开始的,如果你之前撤销过产生了 commit id,那么也会计算在内的。
  4. 如果使用 revert 撤销的不是最近一次提交,那么一定会有代码冲突,需要你合并代码,合并代码只需要把当前的代码全部去掉,保留之前版本的代码就可以了。

git revert 命令的好处就是不会丢掉别人的提交,即使你撤销后覆盖了别人的提交,他更新代码后,可以在本地用 reset 向前回滚,找到自己的代码,然后拉一下分支,再回来合并上去就可以找回被你覆盖的提交了。

git reflog 查看命令历史
git log 查看提交历史
git log --oneline 查看历史版本简洁信息
git 回滚上一次拉取之前的版本
git reset --hard FETCH_HEAD
git 回退到上一个版本
git reset --hard HEAD^
git reset --head [局部索引值]
注: 一个 ^ 表示后退一步 , n个表示后退 n 步
git reset --hard HEAD~n
注 : 表示后退n步

你可能感兴趣的:(git)