跟廖雪峰学习git(2.0)

git status

可以让我们时刻掌握仓库当前的状态


git diff

是查看difference,显示的格式正是Unix通用的diff格式


On branch master 在分支主机上
Changes to be committed: 要提交的更改


提交修改和提交新文件是一样的两步,第一步是:git add

git add readme.txt

下一步,就可以放心地提交了:

$ git commit -m "add distributed"

输出如下:

[master b55662a] add distributed
 1 file changed, 4 insertions(+), 2 deletions(-)

添加文件r.txt

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

首次提交

git add r.txt
git commit -m "wrote a readme file"

第一次修改

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

第二次提交:

git add r.txt
git commit -m "add distributed"

第二次修改

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

第三次提交

git add r.txt
git commit -m "append GPL"

当觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。


git log

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


如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

git log --pretty=oneline

看到的一大串类似1094adb...的是commit id(版本号)

Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示


现在我们启动时光穿梭机,准备把readme.txt回退到上一个版本

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

现在要把当前版本append GPL回退到上一个版本add distributed,就可以使用git reset命令:

输入:

git reset --hard HEAD^

输出如下:

HEAD is now at c7cda95 add distributed

看看readme.txt的内容是不是版本add distributed

输入如下:

cat readme.txt

输出如下:

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

根据上述结果可知,确实还原了

但是此时注意,回退到上一版本以后,上一版本成为了当前版本,也就是最新版本,之前的版本信息就会丢失,要想找回,只能是在未关闭窗口的情况下去一条命令一条命令地去看,能不能找到看你自己。

如果找到了那个append GPLcommit id1094adb...,于是就可以指定回到未来的某个版本:

$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL

版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL

┌────┐
│HEAD│
└────┘
   │
   └──> ○ append GPL
        │
        ○ add distributed
        │
        ○ wrote a readme file

改为指向add distributed

┌────┐
│HEAD│
└────┘
   │
   │    ○ append GPL
   │    │
   └──> ○ add distributed
        │
        ○ wrote a readme file

然后顺便把工作区的文件更新了。所以想让HEAD指向哪个版本号,就把当前版本定位在哪


当用$ git reset --hard HEAD^回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPL的commit id。Git提供了一个命令git reflog用来记录你的每一次命令

git reflog

小结

现在总结一下:

  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id

  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

猜你喜欢

转载自blog.csdn.net/qq_40061206/article/details/94591052
今日推荐