工作目录下面的所有文件都不外乎这两种状态:已跟踪或未跟踪。已跟踪的文件是指本来就被纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新,已修改或者已放入暂存区。而所有其他文件都属于未跟踪文件。它们既没有上次更新时的快照,也不在当前的暂存区域。初次克隆某个仓库时,工作目录中的所有文件都属于已跟踪文件,且状态为未修改。
1、版本信息
git --version
2、获取帮助命令
git help <verb>
git <verb> --help
man git-<verb>
3、查看当前文件状态
git status
有三种情况
1、未跟踪文件
Untracked files
2、跟踪文件和暂存状态
Changes to be committed
3、跟踪文件和未暂存状态
Changes not staged for commit
4、添加到暂存区
git add 文件名
git add
命令(这是个多功能命令,根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等)
5、将新文件添加到跟踪区
git add 文件名
6、将不需要跟踪的文件添加到(.gitignore)
vim .gitignore
文件 .gitignore
的格式规范如下:
- 所有空行或者以注释符号
#
开头的行都会被 Git 忽略。 - 可以使用标准的 glob 模式匹配。
- 匹配模式最后跟反斜杠(
/
)说明要忽略的是目录。 - 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(
!
)取反。
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号(*
)匹配零个或多个任意字符;[abc]
匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?
)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9]
表示匹配所有 0 到 9 的数字)。
我们再看一个 .gitignore
文件的例子:
# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为 txt 的文件
doc/**/*.txt
**\
通配符从 Git 版本 1.8.2 以上已经可以使用。
当前做的哪些更新还没有暂存?有哪些更新已经暂存起来准备好了下次提交? git diff
会使用文件补丁的格式显示具体添加和删除的行。
7、查看尚未暂存的文件更新了哪些部分
git diff
此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。
8、若要看已经暂存起来的文件和上次提交时的快照之间的差异
git diff --cached
9、提交更新
git commit
这种方式会启动文本编辑器以便输入本次提交的说明。(默认会启用 shell 的环境变量 $EDITOR
所指定的软件,一般都是 vim 或 emacs。当然也可以按照第一章介绍的方式,使用 git config --global core.editor
命令设定你喜欢的编辑软件。)
10、另外也可以用 -m 参数后跟提交说明的方式,在一行命令中提交更新
git commit -m "更新说明"
11、跳过使用暂存区域的方式,直接提交修改
git commit
-a
12、从 Git 中移除某个文件
如果只是简单地从工作目录中手工删除文件,运行 git status
时就会在 “Changes not staged for commit” 部分(也就是未暂存清单)看到
rm 文件名
git rm 这个文件名
13、想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中
git rm --cached 文件名
14、移动文件(改名)
git mv file_from file_to
运行 git mv
就相当于运行了下面三条命令:
$ mv README.txt README
$ git rm README.txt
$ git add README
15、初始化新仓库
git init
初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。
16、将文件添加到版本控制
git add