当我刚开始学 git 的时候,我一直都不明白为什么要有 git add 这个命令,感觉 git 提交好麻烦
我需要
git add xxx.md
git commit -m "add xxx"
git push origin master
才能把一个文件提交到远端, 我怀念起了我之前一直用的 svn ,想想一个 svn commit就都搞定了,git 为什么这么麻烦?
用的多用的久了,我才发现了 git 的好处,说为什么 git 比 svn 好用,我的理解大概因为 git 把修改, 提交,协作,合并,都解耦到了一个个过程中,使得发生错误的情况很少,项目版本的可维护性很高。
当然,很多地方我还理解的不是很深,我现在只说下为什么要有 git add 这个命令。
git add 的本质是维护你下一次要提交的文件清单。
举个例子:
比如你在开发一个功能,文件已经改了好多了,但是都没有提交,也没有git add,这时候老板让你紧急添加一个功能,为了实现这个功能, 你修改个了a,b,c三个文件,你可以把这三个文件 git add 进来,这样这三个文件就进了下次要提交的文件清单,等快要提交的时候,你发现有个c文件是不需要修改的,你可以 git reset c, 将 c 从清单从去掉,这时候 git commit 就会只提交 a,b 文件,你也不会担心提交了那些以前修改过的文件。
git add 关键是将修改添加到清单,而不是文件添加到清单
举个例子:
假如一个已经在版本控制下的文件 a.txt,内容是
Hello world
然后你又添加了一行
Hello world
Hello china
你可以然后执行 git add a.txt , 那么下一次 git commit这个改变就会被提交, 但是假如还没来得及 git commit,你又添加了一行
Hello world
Hello china
Hello beijing
如果你没有再次 git add a.txt, 这次修改是不会被提交的
git add 操作实验
$ cd manual56/
--查看git当前版本库的状态
$ git status
# On branch master
nothing to commit (working directory clean)
--进入我要修改的章节目录
$ cd docs/Chapter_17/
$ vim 17.5.0.0.0.md --新建一个md文件,里面简单写“only a test”字符串,wq保存退出编辑状态。
-- 查看状态
$ git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# 17.5.0.0.0.md --看到有红颜色的一个新的文件还没有提交上去,这一行的文件名显示为红色。
nothing added to commit but untracked files present (use "git add" to track)添加文件add
git add 17.5.0.0.0.md添加单个文件,多个文件可以用空格来隔开,比如(git add 17.5.0.0.0.md 17.5.0.0.1.md 17.5.0.0.2.md),也可以使用git add -A添加所有的文件。
--执行添加命令
$ git add 17.5.0.0.0.md
--查看单个文件版本状态
$ git status 17.5.0.0.0.md
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: 17.5.0.0.0.md
#
--查看整个库版本状态
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: 17.5.0.0.0.md
#
手动用MarkdownPad打开C:\Documents and Settings\skyman\manual56\docs\Chapter_17\17.5.0.0.0.md,在里面输入中文字符串,保存退出。然后查看版本库状态,显示绿颜色的表示已经缓存起来了,显示红颜色的是修改过的但是没有缓存起来的。