记录一些“常用”的使用方式
.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 记录过的文件(自添加以后,从未 add
及 commit
过的文件)。而 dist
已经被我们提交过来,git 已经追踪。这时候再修改 .gitignore
是无效的。
解决方法是:
git rm -r --cached dist
然后更新 .gitignore
忽略掉目标文件,最后再提交即可。
查看 commit 中修改的文件
git log --name-status
:每次修改的文件列表、状态(新增编辑等)
git log --name-only
:每次修改的文件列表
git log --stat
:每次修改的文件列表和文件修改的统计
git show
:最近的一次修改的文件具体内容
git show -x
: 查看最近几次修改的文件具体内容,例如查看最近两次修改内容git show -2
git show commitid
:查看某个 commit id 对应修改的文件具体内容,例如git show 4f5e3f4
git whatchanged
:每次修改的文件列表
git whatchanged --stat
:每次修改的文件列表和文件修改的统计