写在开头
笔者在面试中遇到了很多次关于Git的提问,遂阅读《精通Git(第2版)》,此系列为读书笔记,对书中关键点进行总结,要求读者有对Git的基本认识和探索兴趣。
忽略文件
很多时候,我们不希望某一类文件被Git自动添加或跟踪,可以创建.gitignore文件,并在文件中列出待匹配文件的模式,可以写入.gitignore文件的匹配模式规则如下:
- 空行或者以#开始的行会被忽略(注释)
- 支持标准的glob格式
- 以(/)开头的禁止递归匹配
- 以(/)结尾表示目录
- 以(!)开始表示取反
.gitignore文件的例子如下:
*.a # 忽略.a类型的文件 !lib.a # 跟踪lib.a文件,尽管上一行忽略所有.a文件 /TODO # 只忽略当前目录的TODO文件,而不忽略递归目录下的TODO build/ # 忽略build目录下的所有文件 doc/*.txt # 忽略doc目录下的所有.txt文件,但不递归 doc/**/*.pdf # 递归地忽略doc目录下的所有.pdf文件
跳过暂存区
如果项目不大,三人以下协作开发或确保修改(jiaban)时无人冲突,暂存区就显得过于繁琐,这时只用如下命令,就不需要先add添加再提交了。
git commit -a -m "initial commit"
撤销操作
合并提交
笔者在工作中针对一个问题的修复常常涉及多个文件,经常出现漏提交某个文件导致git记录提交两次且提交信息重复很难看,解决这种问题方法如下:
git commit -m "initial commit" git add forgotten_file git commit --amend
最终提交文件包括以上两个,提交信息和记录为一个
撤销暂存
有可能只上线测试修复的一个问题,却把所有修复文件都add到暂存,可以通过如下命令将文件移除暂存区:
git reset HEAD read.md # 只移除read.md文件 git reset HEAD -- path/. # 移除目录下所有文件
撤销修改
因为业务频繁变更,可能刚修好的问题,又不需要改了或者有了新的方向,在未提交的状态下,通过如下命令放弃对文件的更改:
git checkout -- read.md
任何未提交的变更一旦丢失,很可能再也找不回来了。