Git基础小记——基础&&分支
Chapter 2 基础&&分支
2.1 记录更新到仓库
(1). 生命周期图 lifecycle
下图的文件生命周期图可以清晰的看出文件在Git中的状态。工作目录下的每一个文件都不外乎两种状态:已跟踪或未跟踪。已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后, 它们的状态可能是未修改,已修改或已暂存。已跟踪的文件就是 Git 已经知道的文件。编辑过某些文件之后,由于自上次提交后你对它们做了修改,Git 将它们标记为已修改文件。 在工作时,你可以选择性地将这些修改过的文件放入暂存区(也就是git add
),然后提交所有已暂存的修改(也就是git commit
),如此反复。
(2). 文件状态
用 git status
命令查看哪些文件处于什么状态。
Status | Description |
---|---|
Untracked files | 未跟踪的文件,Git 不会自动将其纳入跟踪范围 |
Changes to be committed | 已暂存状态,此时提交,该文件在你运行 git add 时的版本将被留存 |
Changes not staged for commit | 已跟踪文件的内容发生了变化,但还没有放到暂存区 |
git status
命令的输出十分详细。status -s
缩短状态命令的输出,这样可以以简洁的方式查看更改。
Symbol | Description |
---|---|
?? | 新添加的未跟踪文件前面有 ?? 标记 |
A | Add****新添加到暂存区中的文件前面有 A 标记 |
M | Modified已修改但尚未暂存有 M 标记 |
MM | 文件已修改,暂存后又作了修改,因此该文件的修改中既有已暂存的部分,又有未暂存的部分 |
(3). 忽略文件
有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,可以创建一个名为 .gitignore
的文件,列出要忽略的文件的模式。.gitignore
例子:
cat .gitignore
*.[oa] # 告诉 Git 忽略所有以 .o 或 .a 结尾的文件
*~ # 告诉 Git 忽略所有以波浪符结尾的文件,许多文本编辑软件都用这样的文件名保存副本
GitHub有一个十分详细的针对数十种项目及语言的 .gitignore
文件列表, 你可以在这里找到它😮。
(4). 查看已暂存和未暂存的修改
git diff
命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存(not add)起来的变化内容,简单来说就是暂存(git add
)前后。
git diff --staged
命令查看已暂存的将要添加到下次提交里的内容,这条命令将比对已暂存文件(added)与最后一次提交的文件(committed)差异。
虽然但是,这些在IDE里很直观,何苦折磨自己呢。🙄🙄
(5).提交更新
现在的暂存区已经准备就绪,可以提交了。 在此之前,请务必确认还有什么已修改或新建的文件还没有 git add
过, 否则提交的时候不会记录这些尚未暂存的变化。每次准备提交前,先用 git status
看下,你所需要的文件是不是都已暂存起来了。
(6).移除文件
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 用 git rm
命令完成此项工作。如果要删除之前修改过或已经放到暂存区的文件,则必须使用强制删除选项 -f
。这是一种安全特性,用于防止误删尚未添加到快照的数据,这样的数据不能被 Git 恢复。
git rm 1.txt
git rm -r src # 删除文件夹
git rm -rf src # 强制(force)删除文件夹
(7). 移动文件
Git 的 git mv
命令实现移动。要在 Git 中对文件改名,可以这么做:
git mv file_from file_to
运行 git mv
就相当于运行了下面三条命令:
mv file_from file_to
git rm file_from
git add file_to