Git版本回滚
在本地版本回滚
在使用git的时候,版本回滚一般使用在本地的git commit (把暂存区的东西提交到当前分支)后,就是在工作区提交到版本库上,简单理解就是在本地做的操作,此时没有git push所以不涉及到远程仓库问题。
工作区(learngit)

版本库
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

关系
第一步是用
git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用
git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。(此时工作的地方还是在本地操作)
可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

远程版本回滚
测试远程仓库回滚,首先要在本地git push 所有分支更新到远程仓库。做如下的测试:
- 添加两个文件:testBack.txt testHEAD ,一个测试在本地退回情况,就是上面的本地回滚。
- 先提交一个testBack.txt文件到远程仓库。
- 然后再回滚本地版本。
- 最后同步到远程仓库中。
得到如下结果:

在本地的版本已经退回。
那现在怎样退回远程仓库的版本呢??
如果我们直接是git push就会出现如下的错误:

这个问题其实就是,远程repository和我本地的repository冲突导致的,而我在创建版本库后,在github的版本库页面点击了创建README.md文件的按钮创建了说明文档,但是却没有pull到本地。这样就产生了版本冲突的问题。这个问题是比较简单也是比较严重的,网上一些教程直接教一些人使用$ git push -u origin master -f,这个是不可取的,而且十分紧要的事,用这个方法会把现在的本地的版本强制更新到远程仓库上,在多人开发环境中,不能和不建议使用。
解决办法如下:
- 使用强制push的方法:
1 | $ git push -u origin master -f |
说明:这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候。
- push前先将远程repository修改pull下来
1 | $ git pull origin master |
说明:先把远程的仓库下载回来备份
- 若不想merge远程和本地修改,可以先创建新的分支:
1 | $ git branch [name] |
然后push
1 | $ git push -u origin [name] |
说明:创建分支