Git使用——“时光穿越”

Git使用——文件修改与状态查看一文中介绍了修改文件的方法。

目录

一.再次修改文件

二.Git时光机


一.再次修改文件

再次修改readme.txt文件,然后提交

# 修改文件内容如下

Git is free.
Git is a distributed version control system.
Git is free software distributed under the GPL.

# 提交文件

$ git add readme.txt
$ git commit -m "append GPL"

# 提交结果

[master 2ee22b0] append GPL
 1 file changed, 2 insertions(+), 1 deletion(-)

不断对文件进行修改,然后不断提交到版本库里。每commit一次就会有一份存档,如果你不小心删除或改动了文件中的重要内容,你可以选择从最近一个存档恢复。

人的精力是有限的,不可能把每次修改的内容都记住,而在Git中使用命令可以帮助我们查询历史记录。

# 显示从最近到最远的提交日志

$ git log

# 结果


Author: username <email>
Date:   time

    append GPL

commit 36a95ace80a876fdfbd8c1e6690561ec4605a6d3
Author: username <email>
Date:   time

    add distributed

commit e3c89a6b8f3aca4597ce0acfafeb6c12bc9b016a
Author: username <email>
Date:   time

    first readme
# 精简输出

$ git log --pretty=oneline

# 结果

2ee22b00578fae391bdd0860dbfadbcbdd529be8 (HEAD -> master) append GPL
36a95ace80a876fdfbd8c1e6690561ec4605a6d3 add distributed
e3c89a6b8f3aca4597ce0acfafeb6c12bc9b016a first readme

# 结果分析

结果中一长串字符是commit id(版本号),是一个SHA1计算出来的一个非常大的数字,用十六进制表示。
为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,为了避免多人在同一个版本库里工作产生的冲突。

每提交一个新版本,Git就会把它们自动串成一条时间线。如果使用可视化工具查看Git历史,就可以更清楚地看到提交历史的时间线

二.Git时光机

现在想把文件回退到add distributed版本,应该如何操作?

首先明确当前是哪个版本,在Git中用HEAD表示当前版本,上一个版本就是HEAD^,上上个版本就是HEAD^^。如果版本太多怎么办?比如回退到前50个版本应该写成HEAD~50。

# 将当前版本append GPL回退到add distributed版本

$ git reset --hard HEAD^

# 结果

HEAD is now at 36a95ac add distributed

查看readme.txt

# 查看readme.txt文件内容

$ cat readme.txt

# readme.txt文件内容

Git is free.
Git is a distributed version control system.

这时再次查看版本库状态

# 查看日志

$ git log

# 结果

Author: username <email>
Date:   time

    add distributed

commit e3c89a6b8f3aca4597ce0acfafeb6c12bc9b016a
Author: username <email>
Date:   time

    first readme

append GPL版本已经不见了。有办法恢复吗?只要知道commit id就可以!

# 版本恢复
# 版本号没必要写全,前几位即可。Git会自动寻找。也不能只写前一两位,Git可能会找到多个版本号,无法确定是哪一个。

$ git reset --hard 2ee2

# 恢复结果

HEAD is now at 2ee22b0 append GPL

# 再次查看文件内容

$ cat readme.txt

# 文件内容

Git is free.
Git is a distributed version control system.
Git is free software distributed under the GPL.

Git回退版本速度很快,原理是其内部有个指向HEAD的指针。当进行版本回退时,Git仅仅把指向HEAD从指向append GPL改为指向add distributed,然后更新工作区的文件。

现在假设这样一个场景:你完成了工作并关闭了电脑。但是第二天你又想恢复到最新的版本,你已经忘记了commit id,现在怎么办?

Git考虑到了这种情况

# 查看命令历史

$ git reflog

# 结果

2ee22b0 (HEAD -> master) HEAD@{0}: reset: moving to 2ee2
36a95ac HEAD@{1}: reset: moving to HEAD^
2ee22b0 (HEAD -> master) HEAD@{2}: commit: append GPL
36a95ac HEAD@{3}: commit: add distributed
e3c89a6 HEAD@{4}: commit (initial): first readme

好了,现在你知道了版本号,问题被完美解决了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值