1、跟踪新文件(暂存)
命令:git add 文件名
作用:跟踪一个新文件
再次运行 git status
命令,会看到 README 文件已被跟踪,并处于暂存 状态: Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: README
只要在 “Changes to be committed” 这行下面的,就说明是已暂存状态。 如果此时提交,那么该文件此时此刻的版本将被留存在历史记录中。在 git add
后面可以指明要跟踪的文件或目录路径。如果是目录的话,就说明要递归跟踪该目录下的所有文件。(译注:其实 git add 的潜台词就是把目标文件快照放入暂存区域,也就是 add file into staged area,同时未曾跟踪过的文件标记为已跟踪。)
2、暂存已修改文件
现在 README 文件都已暂存,下次提交时就会一并记录到仓库。假设此时, 你想要在 README 里再加条注释,重新编辑存盘后,准备好提交。不过且慢,再运行 git status 看看:
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
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
README 文件出现了两次!一次算已修改,一次算已暂存,这怎么可能呢?
实际上 Git 只不过暂存了你运行 git add
命令时的版本,如果现在提交,那么提交的是添加注释前的版本,而非当前工作目录中的版本。所以,运行了 git add
之后又作了修订的文件,需要重新运行 git add
把最新版本重新暂存起来:
$ git add README
$ git status
On branch master
Changes to be committed: (use “git reset HEAD …” to unstage) new file: README
3、查看已暂存和未暂存的更新
实际上 git status
的显示比较简单,仅仅是列出了修改过的文件,如果要查看具体修改了什么地方,可以用 git diff
命令.这个命令它已经能解决我们两个问题了:当前做的哪些更新还没有暂存?有哪些更新已经暂存起来准备好了下次提交?
- 当前做的哪些更新还没有暂存?
命令:git diff
(不加参数直接输入 git diff) - 有哪些更新已经暂存起来准备好了下次提交?
命令:git diff –cached
或者git diff –staged
(1.6.1 以上)
4、提交更新
当暂存区域已经准备妥当可以提交时,在此之前,请一定要确认还有什么修改 过的或新建的文件还没有 git add
过,否则提交的时候不会记录这些还没暂存起来的变化。所以,每次准备提交前,先用 git status
看下,是不是都已暂存起来了, 然后再运行提交命令 git commit
命令:git commit
注意:这种方式会启动文本编辑器以便输入本次提交的说明,默认的提交消息包含最后一次运行 git status
的输出,放在注释行里,另外开头还有一空行,供你输入提交说明。完全可以去掉这些注释行, 不过留着也没关系,多少能帮回想起这次更新的内容有哪些。
另外也可以用 -m 参数后跟提交说明的方式,在一行命令中提交更新:
命令:git commit –m “message xxx”
提交时记录的是放在暂存区域的快照,任何还未暂存的仍然保持已修改状态, 可以在下次提交时纳入版本管理。每一次运行提交操作,都是对你项目作一次快照, 以后可以回到这个状态,或者进行比较
5、跳过使用暂存区域
尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁 琐。Git 提供了一个跳过使用暂存区域的方式,只要在提交的时候,给 git commit
加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交, 从而跳过 git add 步骤
git commit -a
6、移除文件
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中注册删除(确切地说, 是在暂存区域注册删除),然后提交。可以用 git rm
命令完成此项工作,并连带 从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。
- 从工作目录中手工删除文件
git status
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: grit.gemspec
no changes added to commit (use "git add" and/or "git commit -a")
- 再运行
git rm
记录此次移除文件的操作
git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: grit.gemspec
- 最后提交的时候,该文件就不再纳入版本管理了
7、文件改名
git mv file.from file.to
git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.txt -> README
其实,运行 git mv
就相当于运行了下面三条命令:
$ mv README.txt README
$ git rm README.txt
$ git add README
8、查看历史记录
git log
在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。完成这个任务最简单而又有效的工具是git log
命令
默认不用任何参数的话,git log
会按提交时间列出所有的更新,最近的更新排在最上面。 正如你所看到的,这个命令会列出每个提交的 SHA-1 校验和、 作者的名字和电子邮件地址、提交时间以及提交说明。
git log 参数
git log --pretty=oneline
git log --oneline