现在,让我们在项目下创建一个新的 README 文件。 如果之前并不存在这个文件,使用 git status 命令,你将看到一个新的未跟踪文件 README :
$ echo 'My Project' > README
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
README
nothing added to commit but untracked files present (use "git add" to track)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
只要在 Changes to be committed 这行下面的,就说明是已暂存状态。 如果此时提交,那么该文件此时此刻的版本将被留存在历史记录中。
暂存已修改文件
现在我们来修改一个已被跟踪的文件。 如果你修改了一个名为 README 的已被跟踪的文件,运行 git status 命令,文件 README 出现在 Changes not staged for commit 这行下面,说明已跟踪文件的内容发生了变化,但还没有放到暂存区。
检查当前文件状态
git status
:查看文件状态git status <fileName>
:查看某个文件状态,例如:git status CONTRIBUTING.md
如果在克隆仓库
git clone
后立即cd
到此仓库下使用git status
命令,会看到类似这样的输出:这说明你现在的工作目录相当干净。换句话说,所有已跟踪文件在上次提交后都未被更改过。 此外,上面的信息还表明,当前目录下没有出现任何处于未跟踪状态的新文件,否则 Git 会在这里列出来。
现在,让我们在项目下创建一个新的 README 文件。 如果之前并不存在这个文件,使用
git status
命令,你将看到一个新的未跟踪文件 README :注:
$ echo 'My Project' > README
新建 README 文件并输入内容为 My Project 。在状态报告中可以看到新建的 README 文件出现在 Untracked files 下面。 未跟踪的文件意味着 Git 在之前的快照(提交)中没有这些文件;Git 不会自动将之纳入跟踪范围,除非你明明白白地告诉它“我需要跟踪
git add
该文件”, 这样的处理让你不必担心将生成的二进制文件或其它不想被跟踪的文件包含进来。跟踪新文件
使用命令
git add
开始跟踪一个文件。将这个命令理解为“添加内容到下一次提交中”而不是“将一个文件添加到项目中”要更加合适。
git add
是一个多功能命令:git add README
跟踪 README 文件后,再运行git status
命令,会看到 README 文件已被跟踪,并处于暂存状态:只要在
Changes to be committed
这行下面的,就说明是已暂存状态。 如果此时提交,那么该文件此时此刻的版本将被留存在历史记录中。暂存已修改文件
现在我们来修改一个已被跟踪的文件。 如果你修改了一个名为 README 的已被跟踪的文件,运行
git status
命令,文件 README 出现在 Changes not staged for commit 这行下面,说明已跟踪文件的内容发生了变化,但还没有放到暂存区。要暂存这次更新(修改),需要运行
git add
命令。注意:运行了
git add
(跟踪文件)之后又作了修订的文件,需要重新运行git add
把最新版本重新暂存起来。查看已暂存和未暂存的修改
如果
git status
命令的输出对于你来说过于模糊,你想知道具体修改了什么地方,可以用git diff
命令。git diff
命令比较的是工作目录中当前文件和暂存区域快照之间的差异, 也就是修改之后还没有暂存起来的变化内容。示例:Mac 环境下,查看 WangyiCrawler 文件中未暂存的修改:
注:
git diff
命令本身只显示在工作目录中,尚未暂存的改动,而不是自上次提交以来所做的所有改动。 所以有时候你一下子暂存了所有更新过的文件后,运行git diff
后却什么也没有,就是这个原因。git diff --cached
命令git diff --staged
,效果是相同的,但更好记些附: Git Diff 的插件版本 我们使用
git diff
来分析文件差异。 但是,如果你喜欢通过图形化的方式或其它格式输出方式的话,可以使用git difftool
命令来用 Araxis ,emerge 或 vimdiff 等软件输出 diff 分析结果。 使用git difftool --tool-help
命令来看你的系统支持哪些 Git Diff 插件。忽略文件
示例:
Mac 环境下还需要忽略 .DS_Store 属性文件:
注:GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表:https://github.com/github/gitignore
提交更新
git commit
提交时记录的是放在暂存区域的快照,即将暂存区的文件提交到本地 Git 仓库。git commit
这种方式会启动文本编辑器以便输入本次提交的说明。git commit
命令后添加-m
选项,将提交信息与命令放在后面,示例:git commit -m ‘first commit’
参考下篇:远程仓库的使用(以 GitHub 为例)https://github.com/FatliTalk/blog/issues/65
取消提交
跳过使用暂存区域直接提交
Git 提供了一个跳过使用暂存区域的方式,只要在提交的时候,给
git commit
加上-a
选项, Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add
暂存文件的步骤。移除文件
rm 文件名
:在 Git 文件中,只是删除了本地文件(即只是删除了工作目录中的文件),文件依然存在于 Git 的暂存区域git rm 文件名
:删除了本地文件(即删除了工作目录中的文件),并且从已跟踪文件清单中移除(即从暂存区域移除)git rm -f 文件名
:如果删除之前,文件被修改过并且已经放到暂存区域的话,则必须要用强制删除选项-f
(译注:即 force 的首字母)。 这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据不能被 Git 恢复git rm —cached 文件名
:只是从已跟踪文件清单中移除(即从暂存区域移除),文件依然存在本地于(即工作目录中)批量删除示例
git rm log/\*.log
:删除log/
目录下扩展名为.log
的所有文件git rm \*~
:删除以~
结尾的所有文件实例:
rm -rf demo
(r
用于删除文件夹,加f
不会收到确认提示)/Users/fatli/Documents/GitHub/fatli git:(gh-pages) $ git rm -rf .
移动文件(重命名)
在 Git 中对文件改名:
git mv file_from file_to
示例:
其实,运行
git mv
就相当于运行了下面三条命令: