Git 05 文件操作
文件的四种状态
版本控制就是对文件的版本控制。要对文件进行修改、提交等操作,首先要知道文件当前在什么状态。不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。
Git 管理的文件有 4 种状态:
Untracked:未跟踪
此文件没有加入到 Git 库,不参与版本控制。通过 git add
变为 Staged(已缓存) 状态。
Unmodify:未修改
文件加入了 Git 库,未修改。版本库中的文件快照内容与文件夹中完全一致。
这种类型的文件有两种去处:
- 如果它被修改,而变为 Modified(已修改)。
- 如果使用
git rm --cached
移出版本库,则变为 Untracked(未跟踪) 状态。
Modified:已修改
仅仅是修改,并没有进行其他的操作。
这个文件也有两个去处:
- 通过
git add
可进入 **Staged(已缓存) **状态。 - 使用
git checkout HEAD
放弃修改,返回到 Unmodify(未修改) 状态。
git checkout HEAD
是从库中取出文件,覆盖当前修改。
Staged:已缓存
执行 git commit
将修改同步到库中。
这时库中的文件和本地文件又变为一致,文件为 Unmodify(未修改) 状态。
执行 git reset HEAD 文件名
取消暂存,文件为 Modified(已修改) 状态。
查看文件状态
查看指定文件状态
git status 文件名
查看所有文件状态
git status
忽略文件
有时候我们不想把某些文件纳入版本控制中,比如数据库文件、临时文件、设计文件等。
在主目录下建立 .gitignore 文件,此文件有如下规则
- 忽略文件中的空行或以 # 开始的行代表注释行,将会被忽略。
- 可以使用 Linux 通配符。例如:***** 代表任意多个字符,? 代表一个字符,[ ] 代表可选字符范围,{ } 代表可选的字符串。
- 如果名称的最前面有一个 !,表示例外规则,将不被忽略。
- 如果名称的最前面是一个 /,表示要忽略的文件在此目录下,而子目录中的文件不忽略。
- 如果名称的最后面是一个 /,表示要忽略的是此目录下的所有文件。
*.txt # 忽略所有 .txt 结尾的文件,这样的话上传就不会被选中。
!lib.txt # lib.txt 除外
/temp # 仅忽略项目根目录下的 temp 文件,不包括其它 temp 目录。
build/ # 忽略 build/ 目录下的所有文件。
doc/*.txt # 忽略 doc/notes.txt 但不包括 doc/server/arch.txt。
参考
https://www.bilibili.com/video/BV1FE411P7B3?spm_id_from=333.999.0.0
版本
2.35.1.2
天河有尽身作涯,星海无边前是岸。