logo

记录一些“常用”的使用方式

.gitignore

有些时候,你必须把某些文件放到 git 工作目录中,但又不能提交它们,例如打包生成的 dist 文件。在 git 工作区的根目录下创建一个特殊的 .gitignore 文件,然后把要忽略的文件名填进去,git 就会自动忽略这些文件。

这里可以看一下 element 的 .gitignore

node_modules
.DS_Store
npm-debug.log
yarn-debug.log
yarn-error.log
lerna-debug.log
npm-debug.log.*
yarn-debug.log.*
yarn-error.log.*
lerna-debug.log.*
lib
.idea
.vscode
examples/element-ui
examples/pages/en-US
examples/pages/zh-CN
examples/pages/es
examples/pages/fr-FR
fe.element/element-ui
.npmrc
coverage
waiter.config.js
build/bin/algolia-key.js
.envrc

忽略原则

  • 忽略操作系统自动生成的文件;
  • 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库;
  • 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

文件提交不了

如果配置了 .gitignore 之后,发现有某个文件添加不进去,原因是被忽略了。例如你现在要添加 node_modules,那么就会提示已经被忽略,当然可以通过加上 -f 来强制添加。

$ git add node_modules
The following paths are ignored by one of your .gitignore files:
node_modules
Use -f if you really want to add them.

另外还可以通过 git check-ignore 检查被哪条定义的规则忽略了:

$ git check-ignore -v node_modules
.gitignore:2:node_modules/      node_modules

已经提交过的如何忽略

之前在提交代码时,.gitignore 没有填写完整,例如导致 npm run build 生成的 dist 文件被提交了。然后每次重新打包项目,dist 都会更新,将 dist 填写到.gitignore 规则中,但是运行 git status 的时候,依然能看到这些文件。

这时因为 .gitignore 文件只能作用于 Untracked Files,也就是那些从来没有被 git 记录过的文件(自添加以后,从未 addcommit 过的文件)。而 dist 已经被我们提交过来,git 已经追踪。这时候再修改 .gitignore 是无效的。

解决方法是:

git rm -r --cached dist

然后更新 .gitignore 忽略掉目标文件,最后再提交即可。

查看 commit 中修改的文件

  • git log --name-status:每次修改的文件列表、状态(新增编辑等)

image

  • git log --name-only:每次修改的文件列表

image

  • git log --stat:每次修改的文件列表和文件修改的统计

image

  • git show:最近的一次修改的文件具体内容

image

  • git show -x: 查看最近几次修改的文件具体内容,例如查看最近两次修改内容 git show -2

image

  • git show commitid:查看某个 commit id 对应修改的文件具体内容,例如 git show 4f5e3f4

image

  • git whatchanged:每次修改的文件列表

image

  • git whatchanged --stat:每次修改的文件列表和文件修改的统计

image

参考