git 工作流程及常用命令
git 的核心区域
git 核心有 4 个区域需要了解,从本地到远程依次经过工作区、暂存区、本地仓库和远程仓库,其中的文件状态也会跟随着改变。
从本地到远程这个方向来看:
- 工作区:其中的内容和普通的文件没有区别,不经过 git 的任何管理,其中的文件状态为 unstracked 或者 unstaged。
- 暂存区:工作区的文件通过 add 添加到暂存区,此时文件状态转变为 staged,被 git 管理。
- 本地仓库:暂存区的文件通过 commit 添加到本地仓库,本地仓库即可完成相关文件的所有 git 对应的管理操作(此时远程仓库非必需)。
- 远程仓库:多人开发时经常使用远程仓库来管理协作开发。本地仓库的内容通过 push 可以同步到远程仓库。
从远程到本地来看:
- pull 可以将远程仓库的内容更新到本地,但是需要注意的是,pull 会将远程的内容直接更新到工作区,操作比较危险,需要谨慎操作。
- fetch 和 diff:更安全的方法是 fetch 到本地仓库,然后 diff 比对之后再更新到本地。
git 的部分常用命令
- 配置用户名和邮箱
# 配置用户名和邮箱
git config --global user.name ""
git config --global user.email ""
# 初始化
git init
# 查看 git 状态以及文件状态,Untracked files 下是工作区(一般是红色),Changes to be committed 下是暂存区(一般是绿色),见下图
git status
# 工作区 ➡️ 暂存区
git add
# 工作区 ⬅️ 暂存区
git restore <file>
# 暂存区 ➡️ 本地仓库
git commit -m "message"
# 暂存区 ⬅️ 本地仓库
git restore --staged <file>
git restore 的两种用法
查到很多资料或说法称 git restore 只关注暂存区,但是看了一些英文介绍以及实操之后,不是非常认同,总结如下:
-
git restore 和 git restore --staged 都要跟后面具体的 file。
-
git restore:可以把暂存区更新到工作区,当工作区进行一些修改之后又打算弃用,那么就可以通过这种方式把之前放到暂存区的内容拿回来,也就是工作区会有变化。
-
git restore --staged:网络上多数说,这里是把暂存区的内容放回到工作区,但是也可以理解为是要让暂存区向 HEAD 对齐,也就是暂存区会发生变动,而工作区内容本身不会变化。
画了一个图来做些解释:
下图中从左到右 3 列,整体主要描述工作区、暂存区和本地仓库之间的 git restore 关联,图片主体中每个灰色块的上下位置代表了操作的先后顺序。
-
浅紫色部分即 git restore --staged,这部分没具体画连线,操作之后,暂存区向 HEAD 的 v1 看齐(v2 就不存在了),这个过程中,暂存区发生了变化,而工作区内容不变。
-
红色部分即 git restore,操作之后,工作区向暂存区 v1 看齐,所以工作区的修改会被丢弃,发生变动。
-
而蓝色部分 git rm --cached 会删掉暂存区的内容,同时工作区和暂存区的追踪连接就不见了(也就没办法 git restore 了)。
参考: