修改reademe.txt文件
Git is a new version control system.
Git is free software.
运行git status
XIA@XIA-PC MINGW64 /g/git (master)
$ git status
On branch master
Changes not staged for commit:
(use "git add
(use "git checkout --
modified: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
从上面的命令可得知,readme.txt被修改过,但还没有准备提交。
如果想知道具体修改了什么可以使用git diff
$ git diff
diff --git a/readme.txt b/readme.txt
index d8036c1..47a6343 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a new version control system.
Git is free software.
\ No newline at end of file
可以得知我们在第一行修改了内容
后面提交修改的文件:
git add readme.txt
git commit -m “add new”
首先再次修改文件readme.txt为
Git is a new version control system.
Git is free software under the GPL.
再次提交修改
git add readme.txt
git commit -m “append GPL”
readme.txt 从创建到现在为止已经有三个版本了,如何查看历史记录用这个命令:
git log
$ git log
commit ed5f4bdf7cc68771cac92d3718fd936b803cce8e (HEAD -> master)
Author: wh_xiasm <[email protected]>
Date: Thu Aug 16 09:47:30 2018 +0800
append GPL
commit 52d72d3797bbd21a87bd47244e1db80ebd7d61de
Author: wh_xiasm <[email protected]>
Date: Thu Aug 16 09:27:39 2018 +0800
add new
commit cf4de490a748777e653c76d06e1612671276a5d3
Author: wh_xiasm <[email protected]>
Date: Thu Aug 16 09:19:04 2018 +0800
wrote a readme file
通过控制台命令显示可以知道readme.txt的版本提交记录
另外一种查看简要信息的日志:
git log --pretty=oneline
$ git log --pretty=oneline
ed5f4bdf7cc68771cac92d3718fd936b803cce8e (HEAD -> master) append GPL
52d72d3797bbd21a87bd47244e1db80ebd7d61de add new
cf4de490a748777e653c76d06e1612671276a5d3 wrote a readme file
以上的一大串字符是版本号(commit id)
如果需要回退版本,用head表示当前版本,head^表示上一个版本,head^^表示上上个版本,head~100往上的第100个版本,
回退到上一个版本的命令符:
git reset --hard HEAD^
$ git reset --hard HEAD^
HEAD is now at 52d72d3 add new
当我们回到上一个版本,当前的最新版本就找不到了,如果这时需要再回到这个版本也是可以的,但是需要知道它的版本号.
如何知道它的版本号呢?我们可以通过git reflog 命令
$ git reflog
52d72d3 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
ed5f4bd HEAD@{1}: commit: append GPL
52d72d3 (HEAD -> master) HEAD@{2}: commit: add new
cf4de49 HEAD@{3}: commit (initial): wrote a readme file
这样我们从控制台的输出命令可以得知我们要找的编号为ed5f
再输入回退版本的命令:
git reset --hard ed5f
再次查看文件回退到了当前版本:
cat readme.txt
Git is a new version control system.
Git is free software under the GPL.
工作区(之前创建的git目录就是工作区)中有一个隐藏目录.git。是git的版本库。
Git的版本库里存了暂存区(stage),还有自动创建的第一个分支master。以及指向master的指针HEAD。如图
当我把文件添加到git版本库时
$ git status
On branch master
nothing to commit, working tree clean
一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的
每次修改,如果不用git add到暂存区,那就不会加入到commit中。
例如对readme.txt文件第一次修改,使用git add readme.txt 添加再 git commit -m ”XX”
第二次修改readme.txt,直接使用git commit -m “XX”。(则不会提交)
Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交
场景1:
直接丢弃工作区的修改,vi readme.txt后没有使用git add readme.txt
用命令:git checkout -- readme.txt
场景2:
改动了工作区文件的内容,而且添加到了暂存区(vi readme.txt 后使用了git add readme.txt)
首先git reset HEAD readme.txt 然后使用git checkout -- readme.txt
场景3:已经提交了修改(前提是未提交到远程资源库)
使用git reset --hard HEAD^
rm test.txt
git rm test.txt
git commit -m “delete”
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。