GIT远程仓库回退方法

来源:互联网 发布:linux下启动mysql 编辑:程序博客网 时间:2024/05/15 04:37

GIT远程仓库回退方法


1 问题素描

如果提交注释错误如何回退
如果提交了一个错误的版本到了本地仓库如何回退
如果提交了一个错误的版本到了远程公共仓库如何回退

2 提交注释错误如何回退

如果只是注释提交错误怎么办,在这个情况可以使用

git reset --soft aabb

只回退commit信息,但是这个方法容易误操作,因此可以使用如下方法只重新提交注释

git commit --amend

3 提交错误版本到本地仓库如何回退

首先查看提交记录,找到要回退版本的commit id

git log或git reflog

找到上一次的提交记录id aabb,使用–hard 将源码、index files、commits全部回退到上一个版本,或者使用HEAD^来表示上一次提交。
这里aabb 就表示你上一次的提交id

git reset --hard aabb或者git reset --hard HEAD^

4 提交错误版本到远程公共仓库如何回退

假设远程版本库dev分支的提交顺序是

B1
A2
A1

其中A1/A2是A程序员的提交,B1是B程序员的提交,其他人的本地分支也已经同步到最新状态。这时候A程序员发现A2的提交有错误需要回退到A1版本,那么A使用reset命令回滚到A1版本然后同步远程仓库到A1,理想状态下其他人一拉远程仓库就ok了,但是实际上由于其他人的本地仓库比远程仓库领先两个版本,所以他是不能回退的,你看到的是如下提示。

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

那么这时候该怎么办?这时候需要A在协作群里大喊一声我的版本回退到A1了,A2以后的版本就要重新提交了!然而某个不靠谱队友看到本地仓库领先远程仓库2个版本,想当然的直接push推送,那么你的远程仓库dev分支又变回了

B1
A2
A1

于是A程序员做的工作就白费了,然后一群人一头雾水的发现A2版本又又又出来了。
那么正确的做法是怎么样的呢?B队友的正确做法是硬回滚到B1提交的位置,然后拉取临时分支,这时候这个临时分支就不会包含A2提交的内容,然后将本地分支切到A1的位置,然后在这个点重新合并临时分支的内容。
A程序员回滚操作

git reset --hard A1  //本地回退到A1版本git push -f origin dev //强制推送到远程仓库的 dev分支

远程仓库版本变成如下

A1

B程序员拉取临时分支回退并合并临时分支操作

git checkout dev      //切回工作分支git reflog            //查看B1版本idgit reset --hard B1   //回滚到B1版本git checkout -b devb1 //拉取分支git log               //检查临时分支提交日志git checkout dev      //切回工作分支git reset --hard A1   //回滚到A1版本git reset --hard origin/dev //回滚到远程dev分支头并保持一致,这时候已经完全回滚到A1版本了git merge devb1             //合并临时分支版本git push origin dev         //推送到远程仓库dev分支

远程仓库分支提交变成如下情况

B1A1

同理,如果所有人都被覆盖了代码的情况下都需要如上操作。

5 特别注意

在这里你是不是觉得已经掌握远程回滚的方法?但是实际上回滚还是需要条件的,那就是所有人提交的时候是需要保留分支信息的,如果没有分支信息每个人就回滚不到上一个“自己”的版本,我们有个开发组由于组长的个人爱好把分支树清理的特别干净,直到有一天有位仁兄错误提交代码了,回滚远程仓库以后没有通知其他人…………

6 不按正常套路的出牌方法

如果错误提交以后经过好多次新提交才发现,而且组员对回滚操作不熟悉的话,另外如果全体成员他们每个人都有备份都觉得直接回滚比较快的情况下简单粗暴的方法是可以重新建立一个新仓库,然后把正确的代码重新拷贝到新目录以后将代码提交到新仓库就可以,有问题直接修改少量代码就可以了。