git版本回退
参考
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000
mark下来,以后方便查找。
git 的版本回退操作步骤
git log 查看提交记录
git log
从提交记录里面可看到提交的版本号,git和SVN的版本号不一样,git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示.
黄色的字体跟在commit后面的就是提交的版本号。$ git reset –hard HEAD^
git reset --hard HEAD^
表示回退到上一个版本。继续使用这条指令可以还可以继续回退到上一个版本,但是步骤有点麻烦。git reset –hard 24f3f02cce00c646bd76b0283ff355fd28bc7dca
可以从log里面的版本号直接回退到该版本号,版本号不用写全,写前面几位数也可以,git会自动去找,例如:
git reset --hard 24f3f
这样既可回到该版版号。git reflog
现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?在tit中,总是有后悔药可以吃的。git提供了一个命令
git reflog
用来记录你的每一次命令。看到这些记录的指令,你就可以使用git reset --hard
回到某个版本了。
git撤销修改
没有修改过的时候
当你没有做过修改的时候使用
git status
查看状态时会出现如下:$ git status On branch master nothing to commit, working tree clean
场景1:修改并未add
当你修改了本地的README.md,并未add和commit提交的时候,使用
git status
,出现如下提示:
这时候你直接改本地文件或者,使用git checkout --<file>...
可以放弃工作区的修改。例如:git checkout -- README.md
意思就是,把README.md文件在工作区的修改全部撤销。你打开README.md查看就发现修改的呗撤销了。场景2:已经add到缓存区了但未commit
假如你已经将修改多的文件add到了缓存区,想回退清空缓存区的时候。
git会友好的提示你
change to be commited
也可以回退使用git reset HEAD <file>...
可以把暂存区的修改撤销掉(unstage),重新放回工作区。
git reset
命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。再用git status
查看一下,现在暂存区是干净的,工作区有修改。可以使用放弃工作空间的修改git checkout -- README.md
意思就是,把README.md文件在工作区的修改全部撤销
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考上面的git版本回退,不过前提是没有推送到远程库。
git查看工作区和版本库里面最新版本的区别
用
git diff
命令可以查看工作区和版本库里面最新版本的区别,也可以用git diff HEAD <file>
指定某个文件和最新本版本库里面的区别,例如指定README.md文件:git diff HEAD README.md
git rm删除文件
在git 指令中可以用
git rm <file>
进行删除文件。例如我要删除已经提交的一个文件test.txt。直接使用git rm test.txt
就可以把该文件删除了。查看删除的状态如图:
![]()
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit。另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:$ git checkout -- test.txt
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。