写在开头

笔者在面试中遇到了很多次关于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     

任何未提交的变更一旦丢失,很可能再也找不回来了。