一 .管理修改

首先, 我们需要知道: Git跟踪并管理的是修改,而非文件。这也是 Git 比其他版本控制系统设计得优秀的地方 !

我们可以这样验证:

1.对readme.txt做一个修改,比如增加两行内容:

Git is a distributed version control system.
Git is free software.
Git has a mutable index called stage.
Git tracks changes.

然后,添加:

$ git add readme.txt

我们再看下状态

$ git status

会看到:

位于分支 master
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

    修改:         readme.txt

接着我们再对readme.txt 做一下修改, 修改后内容如下:

Git is a distributed version control system.
Git is free software.
Git has a mutable index called stage.
Git tracks changes of files.

提交:

$ git commit -m "git tracks changes"

会看到:

[master 4f432db] git tracks changes
 1 file changed, 2 insertions(+)

紧接着我们再看一下状态:

$ git status

会出现这样的提示 :

位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

    修改:         readme.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

我们可以使用 $ git diff HEAD -- readme.txt 命令可以查看工作区和版本库里面最新版本的区别

diff --git a/readme.txt b/readme.txt
index 3804fcd..dee2170 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
 Git is a distributed version control system.
 Git is free software.
 Git has a mutable index called stage.
-Git tracks changes.
+Git tracks changes of files.

可见,第二次修改确实没有被提交。

我们整个操作的流程是这样的 :

第一次修改 -> git add -> 第二次修改 -> git commit

当我们用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。

所以我们的操作流程应该是这样的 :

第一次修改 -> git add -> 第二次修改 -> git add -> git commit

二.撤销修改

通过上面的讲述, 我们已经知道怎么去提交修改了. 那么又出现了一个新的问题 : 如何撤销修改呢?

现在假设我的 readme.txt 文件中出现了一个错误的修改 :

Git is a distributed version control system.
Git is free software.
Git has a mutable index called stage.
Git tracks changes of files.
I am a girl !

( 我怎么可能是个girl? )

所以, 我在提交之前需要撤销修改 .( 当然, 我可以找到这个文件并手动删除最后一行,把文件恢复到上一个版本的状态 , 但是这样好像不是很方便 )

我们使用命令 $ git status 查看下状态 :

位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

    修改:         readme.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

Git 告诉我, 我可以使用 $ git checkout -- file可以丢弃工作区的改动

$ git checkout -- readme.txt

现在,看看readme.txt的文件内容:

$ cat readme.txt

会发现, I am a girl ! 这句话已经没有了 !

Git is a distributed version control system.
Git is free software.
Git has a mutable index called stage.
Git tracks changes of files.

三.删除文件

我们在readme.txt 所在文件夹中新建一个 test.txt文件, 并使用 git addgit commit 命令提交

一般情况下,我们通常直接在文件管理器中把没用的文件删了,或者用rm命令进行删除:

$ rm <fileName>

这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉我们哪些文件被删除了:

位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add/rm <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

    删除:         test.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

现在我们有两个选择 :

1.确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit

$ git rm test.txt
rm 'test.txt'

$  git commit -m "remove test.txt"
[master 0c79b43] remove test.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 test.txt

2.删错了, 但是版本库里还有, 我们执行

$ git checkout -- test.txt

test.txt 就又回来了 !

results matching ""

    No results matching ""