首先,要学会使用git status
查看Git仓库的状态。
我们先更改Readme.txt文件为
Git is a distributed version control system.
Git is free software.
接下来运行git status
$git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)
修改: Readme.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
Git 会告诉我们现在仓库的状态,以及我们应该怎么做。
已经知道Readme.txt文件发生了改变,我们也要知道如何查看文件更改的部分,这就要用到git diff
,顾名思义就是要查看不同。
$git diff Readme.txt
diff --git a/Readme.txt b/Readme.txt
index f7249b8..d225882 100644
--- a/Readme.txt
+++ b/Readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system
+Git is a destributed version control system
Git is free software
我们同样还是先修改Readme.txt文件
Git is a distributed version control system.
Git is free software distributed under the GPL.
然后使用我们之前说过的git add
和git commit -m ' '
方法进行提交。
现在,回顾一下我们提交过的Readme.txt文件:
版本1:wrote a readme file
Git is a version control system.
Git is free software.
版本2:add distributed
Git is a distributed version control system.
Git is free software.
版本3:append GPL
Git is a distributed version control system.
Git is free software distributed under the GPL.
在Git中,我们可以使用git log
命令显示从最近到最远的提交日志
$git log
commit 27aac89313fd6ce2bb0910290c77bb6269037dd6
Author: K****a .com>
Date: Thu Feb 9 07:15:13 2017 -0500
append GPL
commit 3304e0b2ad9c9341659f6d61085fdcefebffe693
Author: K****a .com>
Date: Thu Feb 9 07:14:22 2017 -0500
add distributed
commit fb57c123ecf755a68c35e1bee187304b5dcb4676
Author: K****a .com>
Date: Thu Feb 9 07:13:22 2017 -0500
wrote a readme file
上面的信息中以commit打头的那行就是那个版本的版本号(commit id),它是一串SHA1的数值,是我们版本切换需要使用的东西,但不需要完全记下了,只需要开头的几个字符,Git就会自己去匹配了。接下来的信息就是作者和时间了,最后是我们在提交版本时写的注释信息。
那该如何运用以上信息进行版本切换呢?
Git提供了git reset
命令,在Git中用HEAD代表当前版本,HEAD^就代表上个版本,HEAD^^就是上上个版本,如果想表达上50个版本可以使用HEAD~50来表示。
$git reset --hard HEAD^
HEAD 现在位于 3304e0b add distributed
我们发现版本移动到了3304e0b,不过再查看一些git log
发现只剩下两个版本了。如果你之前的窗口没有关,那就可以使用以下这种方式返回:
$git reset --hard 27aac
HEAD 现在位于 27aac89 append GPL
这样我们就找回了之前的版本,但是如果窗口关了,那也有办法!
使用git reflog
可以查看每次进行版本更新的命令,包含SHA1的一部分,足够我们进行版本恢复了!
Ⅰ.git checkout -- file
可以丢弃工作区的修改
Ⅱ.如果已经add
到了暂存区:用命令git reset HEAD file
可以把暂存区的修改撤销掉(unstage),重新放回工作区
Ⅲ.删除文件,用命令git rm file
删掉,并且git commit
提交版本。要是错误删除可以使用git checkout -- file
恢复。
注:git checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。