Git恢复之前版本的两种⽅法ret、revert(图⽂详解)
⼀、问题描述
在利⽤github实现多⼈合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样⼦,本⽂总结了两种解决⽅法:回退(ret)、反做(revert)。⼆、背景知识
git的版本管理,及HEAD的理解
使⽤git的每次提交,Git都会⾃动把它们串成⼀条时间线,这条时间线就是⼀个分⽀。如果没有新建分⽀,那么只有⼀条时间线,即只有⼀个分⽀,在Git⾥,这个分⽀叫主分⽀,即master分⽀。有⼀个HEAD指针指向当前分⽀(只有⼀个分⽀的情况下会指向master,⽽master是指向最新提交)。每个版本都会有⾃⼰的版本信息,如特有的版本号、版本名等。如下图,假设只有⼀个分⽀:
三、解决⽅法
twilfit
⽅法⼀:git ret
bi是什么原理: git ret的作⽤是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本,如下图所⽰,假设我们要回退到版本⼀:始祖家族第一季
适⽤场景:如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以⽤这种⽅法。
具体操作:
1. 查看版本号:
可以使⽤命令“git log”查看:
4 6级
也可以在github⽹站上查看:shoot是什么意思
morphine
2. 使⽤“git ret --hard ⽬标版本号”命令将版本回退:
再⽤“git log”查看版本信息,此时本地的HEAD已经指向之前的版本:
英汉词典下载3. 使⽤“git push -f”提交更改:
此时如果⽤“git push”会报错,因为我们本地库HEAD指向的版本⽐远程库的要旧:
所以我们要⽤“git push -f”强制推上去,就可以了:
在github图形化界⾯上看,远程库的HEAD也已经指向⽬标版本:
valves
回退成功!
⽅法⼆:git revert
原理: git revert是⽤于“反做”某⼀个版本,以达到撤销该版本的修改的⽬的。⽐如,我们commit了三个版本(版本⼀、版本⼆、版本三),突然发现版本⼆不⾏(如:有bug),想要撤销版本⼆,但⼜不想影响撤销版本三的提交,就可以⽤ git revert 命令来反做版本⼆,⽣成新的版本四,这个版本四⾥会保留版本三的东西,但撤销了版本⼆的东西。如下图所⽰:
适⽤场景:如果我们想撤销之前的某⼀版本,但是⼜想保留该⽬标版本后⾯的版本,记录下这整个版本变动流程,就可以⽤这种⽅法。
蔬菜歌
具体操作:
举个例⼦,现在库⾥⾯有三个⽂件:READ.md、、。
1. 查看版本号:
可以通过命令⾏查看(输⼊git log):
如图,最近的两个版本分别叫:“”(即新增了⽂件)、“”(新增了⽂件)。这个时候我们不需要这个⽂件了,那就是说不想要“”那个版本的操作,那可以通过反做“”这个版本来实现。
也可以通过github⽹站图形化界⾯查看版本号:
2.使⽤“git revert -n 版本号”反做,并使⽤“git commit -m 版本名”提交:
(1)反做,使⽤“git revert -n 版本号”命令。如下命令,我们反做版本号为8b89621的版本:
git revert -n 8b89621019c9adc6fc4d242cd41daeb13aeb9861
注意:这⾥可能会出现冲突,那么需要⼿动修改冲突的⽂件。⽽且要git add ⽂件名。
(2)提交,使⽤“git commit -m 版本名”,如:
git commit -m "revert "
此时可以⽤“git log”查看本地的版本信息,可见多⽣成了⼀个新的版本,该版本反做了“”版本,但是保留了“”版本:
3.使⽤“git push”推上远程库:
git push
查看github上显⽰的远程库版本信息:
gossip girl第四季
此时查看仓库的⽂件,剩下两个:READ.md、