git版本回退

  • 1. git中工作区,缓存区,本地库,远程库的简要区别
  • 2. git撤消、放弃本地的修改,本地库版本回退
    • 2.1 未使用 git add 缓存代码时,即代码还在本地
    • 2.2 已经使用了  git add 缓存了代码,代码到了缓存区
    • 2.3已经用 git commit  提交了代码,代码到了本地库
  • 3.远程仓库的版本回退
    • 3.1如果提交了一个错误的版本到远程分支,怎么回退远程分支版本?
    • 3.2如果提交了一个错误的版本到公共远程分支,又该怎么回退版本?
  • 4. git 对比两个分支的差异

1. git中工作区,缓存区,本地库,远程库的简要区别

工作区,缓存区,本地库对应到实体,都是你从远程仓库克隆下来的那个项目目录!

工作区:你实际看到的目录和目录里的内容,当你修改/添加/删除了从远程仓库clone下来的目录中的文件后,工作区就变了
缓存区:使用git add . 操作可以将工作区的修改保存到缓冲区中
本地库:使用git commit -m "版本名" 可以将缓冲区中的更改保存到本地库中

远程库:即远程服务器上的那个项目目录,使用git push origin 分支名 操作可以将本地库的修改保存到远程库中

2. git撤消、放弃本地的修改,本地库版本回退

2.1 未使用 git add 缓存代码时,即代码还在本地

可以使用 git checkout -- filepathname (注意不要忘记中间的 “--” ,不写就成了切换分支了)。放弃所有的文件修改可以使用 git checkout .  命令。

此命令用来放弃所有还没有加入到缓存区的修改,包括内容修改与整个文件删除。但是此命令不会删除掉刚新建的文件。因为刚新建的文件还没已有加入到 git 的管理系统中。所以对于git是未知的。自己手动删除就好了。

2.2 已经使用了  git add 缓存了代码,代码到了缓存区

可以使用  git reset HEAD filepathname (比如: git reset HEAD readme.md)来放弃指定文件的缓存,放弃所以的缓存可以使用 git reset HEAD . 命令。

此命令用来清除 git  对于文件修改的缓存,相当于撤销 git add 命令所在的工作。在使用本命令后,本地的修改并不会消失,而是回到了如(1)所示的状态。继续用(1)中的操作,就可以放弃本地的修改。

2.3已经用 git commit  提交了代码,代码到了本地库

可以使用git reset --hard 将本地库中的代码回退到指定的状态,有两种实现方式:

git reset --hard HEAD^,其中HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

git reset --hard  commitid 回退到到具体的commitid,commitid可以通过 git log/git reflog命令来查看

以上的版本回退只是本地的,不会影响git库中的内容

举栗:

使用 git reset --hard HEAD可以查看当前在哪个commitid上

使用git reset --hard HEAD^可以将本地代码回退到上个版本,也可以使用~计数,使用命令git reset --hard HEAD~1,回退后通过git status可以看到提示

Your branch is behind 'origin/RDB-42388-test-algorithm-4.0' by 1 commit

3.远程仓库的版本回退

3.1如果提交了一个错误的版本到远程分支,怎么回退远程分支版本?

首先要回退本地分支:

git reflog

git reset --hard Obfafd

紧接着强制推送到远程分支:

git push -f

注意:本地分支回滚后,版本将落后远程分支,必须使用强制推送覆盖远程分支,否则无法推送到远程分支

3.2如果提交了一个错误的版本到公共远程分支,又该怎么回退版本?

回滚公共远程分支和回滚自己的远程分支的区别:公共远程分支中含有别人的提交,回退公共远程分支可能会将别人的提交给冲掉。

具体操作可参考:https://www.cnblogs.com/qlqwjy/p/8179684.html

一些相关的知识点:

git checkout -b tony_backup //拉个分支tony_backup,可以用来保存当前代码

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

git revert HEAD  //撤销最近一次的提交

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

git revert 0ffaacc //撤销0ffaacc这次提交

要注意以下几点:

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

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

原文地址:https://www.cnblogs.com/mianbaoshu/p/11796657.html