记录每次更新到仓库
工作目录下面的所有文件都不外乎这两种状态:已跟踪或未跟踪。已跟踪的文件是指本来就被纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新,已修改或者已放入暂存区。而所有其他文件都属于未跟踪文件。它们既没有上次更新时的快照,也不在当前的暂存区域。初次克隆某个仓库时,工作目录中的所有文件都属于已跟踪文件,且状态为未修改。
在编辑过某些文件之后,Git 将这些文件标为已修改。我们逐步把这些修改过的文件放到暂存区域,直到最后一次性提交所有这些暂存起来的文件,如此重复。所以使用 Git 时的文件状态变化周期如图 2-1 所示。
检查文件状态:git status
跟踪新文件 暂存已修改文件 提交更新 :git add <filename>
忽略某些文件:可创建一个名为.gitignore的文件,然后列出要忽略的文件模式。如:
*.[oa]
此时忽略以.o 或者 .a结尾的文件.
文件 .gitignore
的格式规范如下:
- 所有空行或者以注释符号
#
开头的行都会被 Git 忽略。 - 可以使用标准的 glob 模式匹配。
- 匹配模式最后跟反斜杠(
/
)说明要忽略的是目录。 - 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(
!
)取反。
# 此为注释 – 将被 Git 忽略 # 忽略所有 .a 结尾的文件 *.a # 但 lib.a 除外 !lib.a # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO /TODO # 忽略 build/ 目录下的所有文件 build/ # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt doc/*.txt # ignore all .txt files in the doc/ directory doc/**/*.txt
查看以修改文件内容
git status会列出文件的状态。
查看文件具体修改了一些什么内容用:git diff(显示还没暂存起来的改动)
看已经暂存起来的文件和上次提交时的快照之间的差异:git di ff --cached
改动后提交更新也用:首先用git status 查看各个文件的状态,在用git add 将改动后或者没有暂存的文件暂存 再使用git commit提交.
git commit 会启动文本编辑器(刚开始配置git时,
git config --global core.editor emacs
所指定的软件,一般是vim 或者emacs)以便输入本次提交说明,注意:提交说明是必须的。
跳过使用暂存区域:git commit -a Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add
步骤
移除文件
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。可以用 git rm
命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。注意如果只是简单的从工作目录中删除文件,git status 会显示
“Changes not staged for commit” 部分(也就是未暂存清单)。
想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。换句话说,仅是从跟踪清单中删除。比如一些大型日志文件或者一堆 .a
编译文件,不小心纳入仓库后,要移除跟踪但不删除文件,以便稍后在 .gitignore
文件中补上,用 --cached
选项即可:
$ git rm --cached readme.txt
$ git rm log/\*.log==>删除所有 log/
目录下扩展名为 .log
的文件
$ git rm \*~==>会递归删除当前目录及其子目录中所有 ~
结尾的文件
移动文件
git mv <filename> <filepath>