Git下的版本修改
Git下的版本修改非常的简单,我们首先只需要对Git所管理的文件夹下的文件本身进行修改。修改后先add到本地的库,然后提交即可。具体的流程贴在下面:
vim readme.txt
#修改文件中的内容
git add readme.txt
git commit -m "append GPL"
这样就修改成功了
Git下的版本日志
查阅代码和输出如下:
ycwang@Y700:~/learngit$ git log
commit 5d9ff40785e085c8a6b956f000bbb5ce59b8af05 (HEAD -> master)
Author: Your Name <you@example.com>
Date: Tue May 14 19:38:23 2019 +0800
append GPL
commit 4c93eefd480eaa4106022aeee66e12c54e884e46
Author: Your Name <you@example.com>
Date: Sat May 11 21:14:15 2019 +0800
wrote a readme file
输出的内容为提交的版本号(commit id),就是第一行那个5d9ff40785e085c8a6b956f000bbb5ce59b8af05
。之后是谁提交的,这个版本就我修改,所以自然是我的名字,突然发现昨天的那个命令原来要自己给名字啊。。。。再之后是具体的提交时间。最后是当时commit时给的注释。我们除去第一个贴子外就修改了一次,所以就两条记录。
此外,还可以减少输出内容
git log --pretty=oneline
5d9ff40785e085c8a6b956f000bbb5ce59b8af05 (HEAD -> master) append GPL
4c93eefd480eaa4106022aeee66e12c54e884e46 wrote a readme file
只给出了版本号和提交时的注释,另外(HEAD->master)
代表当前所在的版本。
Git下的版本回退
首先我们已经知道(HEAD->master)
对应的是当前的版本,而HEAD^
对应的是当前版本的前一个版本,HEAD^^
为前两个版本,以此类推。如果需要回退的版本比较多,可以使用HEAD~100
表示往回回退100个版本。
使用如下命令回退:
ycwang@Y700:~/learngit$ git reset --hard HEAD^
HEAD 现在位于 4c93eef wrote a readme file
此时我们再次查阅版本记录
ycwang@Y700:~/learngit$ git log
commit 4c93eefd480eaa4106022aeee66e12c54e884e46 (HEAD -> master)
Author: Your Name <you@example.com>
Date: Sat May 11 21:14:15 2019 +0800
wrote a readme file
只剩下了一个版本,退回旧版本后,这个版本之前的新版本全部不输出了。那么,如果我们又想回到已经撤销的最新的版本呢?需要使用到前面类似乱码一样的版本号,代码如下:
ycwang@Y700:~/learngit$ git reset --hard 5d9ff40
HEAD 现在位于 5d9ff40 append GPL
使用的同样是reset命令,但是不使用HEAD^
而是直接使用版本号,注意本来的版本号非常长,而我们只需要使用其中的前几位。此时我们再查一下版本,
ycwang@Y700:~/learngit$ git log
commit 5d9ff40785e085c8a6b956f000bbb5ce59b8af05 (HEAD -> master)
Author: Your Name <you@example.com>
Date: Tue May 14 19:38:23 2019 +0800
append GPL
commit 4c93eefd480eaa4106022aeee66e12c54e884e46
Author: Your Name <you@example.com>
Date: Sat May 11 21:14:15 2019 +0800
wrote a readme file
很好确实已经恢复了。注意,我们在退回版本时,并不是真的删除了新的版本的文件,只是将HEAD的指针指向了旧版的文件。
回想一下刚才的操作过程,我们在恢复已经删除的版本之前,需要知道已经删除的版本的版本id。但是如果我们已经把这个终端关掉了,那个版本id无从得知怎么办?实际上可以用命令git reflog
查阅,如下:
ycwang@Y700:~/learngit$ git reflog
5d9ff40 (HEAD -> master) HEAD@{0}: reset: moving to 5d9ff40
4c93eef HEAD@{1}: reset: moving to HEAD^
5d9ff40 (HEAD -> master) HEAD@{2}: commit: append GPL
4c93eef HEAD@{3}: commit (initial): wrote a readme file
他记录了我们历史上对版本所有的修改记录,初始化,第一次更新,然后回退,再回到最新的版本,而且每行最前面给出了版本id的前几个编码。这样我们就可以通过这个编码回到我们想要回到的版本啦~~