Git入门(二) 工作区状态、版本回退、Git的缓存区和工作区、Git操作文件

掌握工作区状态

修改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 <file>..." to update what will be committed)

  (use "git checkout -- <file>..." to discard changes in working directory)

 

        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 <489572105@qq.com>

Date:   Thu Aug 16 09:47:30 2018 +0800

 

    append GPL

 

commit 52d72d3797bbd21a87bd47244e1db80ebd7d61de

Author: wh_xiasm <489572105@qq.com>

Date:   Thu Aug 16 09:27:39 2018 +0800

 

    add new

 

commit cf4de490a748777e653c76d06e1612671276a5d3

Author: wh_xiasm <489572105@qq.com>

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版本库时

  1. 用git add 把文件添加进去,实际上是把文件修改添加到暂存区
  2. 用git commit 提交更改,实际上就是把暂存区所有内容提交到当前分支

 

$ 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其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页