Git版本回退和撤销修改
版本回退:
在实际⼯作中,我们会不断对⽂件进⾏修改,然后不断提交修改到版本库⾥,⼀旦你把⽂件改乱了,或者误删了⽂件,还可以从最近的⼀个commit恢复,然后继续⼯作,⽽不是把⼏个⽉的⼯作成果全部丢失。
在Git中,我们⽤git log命令查看修改记录:
git log命令显⽰从最近到最远的提交⽇志
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:
需要友情提⽰的是,你看到的⼀⼤串类似的是commit id(版本号),和SVN不⼀样,Git的commit id不是1,2,3……递增的数字,⽽是⼀个SHA1计算出来的⼀个⾮常⼤的数字,⽤⼗六进制表⽰,⽽且你看到的commit id和我的肯定不⼀样,以你⾃⼰的为准。为什么commit id需要⽤这么⼀⼤串数字表⽰呢?因为Git是分布式的版本控制系统,后⾯我们还要研究多⼈在同⼀个版本库⾥⼯作,如果⼤家都⽤1,2,3……作为版本号,那肯定就冲突了。
每提交⼀个新版本,实际上Git就会把它们⾃动串成⼀条时间线。如果使⽤可视化⼯具查看Git历史,就可以更清楚地看到提交历史的时间线。
现在我准备把回退到上⼀个版本
⾸先,Git必须知道当前版本是哪个版本,在Git中,⽤HEAD表⽰当前版本,也就是最新的提交,上⼀个版本就是HEAD^,上上⼀个版本就是HEAD^^,当然往上100个版本写100个^⽐较容易数不过来,所以写成HEAD~100。
然后使⽤git reset命令:
果然被还原了,这时我们⽤git log再看看现在版本库的状态:
最新的那个版本已经看不到了!想再回去已经回不去了,肿么办?
只要上⾯的命令⾏窗⼝还没有被关掉,你就可以顺着往上到上⾯最新的commit id是,于是就可以指定回到未来的某个版本:
提交的东西不能更改版本号没必要写全,前⼏位就可以了,Git会⾃动去。当然也不能只写前⼀两位,因为Git可能会到多个版本号,就⽆法确定是哪⼀个了。
Git的版本回退速度⾮常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD指向变了,然后顺便把⼯作区的⽂件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪。
现在,你回退到了某个版本,关掉了电脑,第⼆天早上就后悔了,想恢复到新版本怎么办?不到新版本的commit id怎么办?
Git提供了⼀个命令git reflog⽤来记录你的每⼀次命令,然后你可以根据对应的commit id回到你想要的版本:
撤销修改:
如果你在本地改了⼀个⽂件但是还没有add到暂存区,现在你想撤销,这时你可以⽤ git checkout -- file 命令丢弃⼯作区的修改,让这个⽂件回到最近⼀次git commit或git add时的状态。
但是如果你的修改已经git add到暂存区了,庆幸的是,在commit之前,你发现了这个问题。⽤git status查看⼀下,修改只是添加到了暂存区,还没有提交,这时⽤命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回⼯作区,然后再⽤git checkout -- file 丢弃⼯作区的修改:
现在,假设你不但改错了东西,还从暂存区提交到了版本库,怎么办呢?可以使⽤版本回退到上⼀个
版本。不过,这是有条件的,就是你还没有把⾃⼰的本地版本库推送到远程。⼀旦你把错误代码提交推送到远程版本库,记录就⽆法擦除了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论