1.Git文件操作
1.1 文件4种状态
- Untracked :未跟踪,位加入到库中,可通过
git add
命令将状态转换为Staged
状态 - Unmodified:已入库,未修改,若用
git edit
命令转换为modified
状态,也可用git rm
命令转换为untracked
状态。 - Modified:仅仅只是修改过,未进行其它操作。可用
git add
转换为Staged
状态,也可用git checkout
退回到unmodified
状态,此时修改部分作废。 - Staged:已暂存,可用
git commit
同步更新到库中,此时变为unmodified
状态,也可通过git reset HEAD filename
退回到modified
状态。
状态转换图
1.2 查看文件状态
1.2.1 查看所有文件状态
输入git status
,若在克隆完文件后执行此命令,可看到如图
说明所有已跟踪文件在上次提交后都未被更改过,而且当前目录下没有出现任何处于未跟踪状态的新文件,当前分支为默认分支“Master"
1.2.2 查看某个文件状态
输入git status filename
即可,如图
1.3 文件操作
1.3.1 跟踪文件
输入git add 文件名
即可,在查看状态即可发现hello.txt文件已被跟踪,处于暂存状态,如图
1.3.2 未跟踪文件
输入git restore --staged filename
即可,此时再查看文件可发现有个未跟踪文件,如图
1.3.3 修改已暂存的文件
修改已跟踪的文件内容后,查看此文件状态可发现此文件已被修改,处于modified
状态,如图
1.3.4 提交文件
输入git commit -m 'filename'
即可,此时可发现提交成功,库中信息已改变,如图
每一次运行提交操作,都是对你项目作一次快照,以后可以回到这个状态,或者进行比较。
1.3.5 忽略文件
一般对某些无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表的文件进行操作,如日志文件等没必要提交的文件。此时创建一个名为 .gitignore
的文件,列出要忽略的文件的模式。如
cat .gitignore #忽略所有以 `.o` 或 `.a` 结尾的文件
*.[oa]
gitignore文件命名格式:
- 所有空行或者以
#
开头的行都会被 Git 忽略。 - 可以使用标准的 ==glob 模式(Linux通配符)==匹配,它会递归地应用在整个工作区中。
- 匹配模式可以以(
/
)开头防止递归。 - 匹配模式可以以(
/
)结尾指定目录。 - 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(
!
)取反。
例如
# 忽略所有的 .a 文件
*.a
# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a
# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO
# 忽略任何目录下名为 build 的文件夹
build/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf
1.3.6 移除文件
从已跟踪文件清单中移除(是从暂存区域移除),然后提交,可用 git rm
命令完成
1.3.7 重命名文件
git mv file_from file_to
其实是执行了3种代码,即mv
命令,git rm
,git add
。上述命令可等价为
mv file_from file_to
git rm file_from
git add file_to
如图,重命名dark1图片文件为dark。