Git|02 Git的工作流程

一、Git 的“两区两库”

git的四个工作区.png

二、工作流

(一)工作区 --> 暂存区

1
2
3
git add .  # 暂存所有文件
# 或
git add <指定文件>
  • 可以设置忽略名单,防止某些文件被上传(跟踪),如日志文件、带隐私账号密码的测试文档、node_modules等,在项目根路径下创建 .gitignore 文件,里面填写不跟踪的文件。
  • 1ec32a26-5672-4b59-8f5b-769601d393b0.png

Tip

对于已经跟踪并被推送的文件,后续再添加进 .gitignore 是没用滴,后续的改动一样能被推到远端。.gitignore 只对未加入暂存区(即 git add 操作)的文件起作用,对于被跟踪的文件,需要执行:

  • git rm --cached <文件名> 取消跟踪
  • git commit -m “stop tracking xxx_file” 并提交

远端发现即使将 file01.txt 加入 .gitignore ,依然会跟踪 file01
3f023011-5a6d-414e-a059-1731ba88cbb6.png
9fcdb8bb-eea8-4773-86ad-03ebcac39f19.png

停止跟踪,file01.txt 消失
61400a55-7915-4012-8784-fe39dcaed4dd.png
34f75b54-8dee-4949-8f86-1808bb26231f.png


(二)暂存区 --> 本地仓库

1
git commit -m "<提交信息>"  # -m(message,信息)
  • vscode 图形化提交操作,框中填写提交语,并 Ctrl + Enter
    a33efd5e-b995-4f23-b633-b2527039203a.png

  • 等价命令:

1
2
git add .
git commit -m "add file03"
  • 形成一次快照,在 git 历史中留下痕迹,git 树的提交信息与 git log 一一对应,并且本地比远程领先 3 个提交
    aec8e671-f2ca-469b-be0a-7a0987845ae1.png

(三)本地仓库 --> 远程仓库

  1. 链接远程仓库
1
2
3
git remote add <远端名称> <仓库路径>
# 远端名称:默认是 origin
# 仓库路径:从远端获取的 URL

如:git remote add origin git@gitee.com:hzhkdh/glut-schedule-wx.git

  1. 查看远程仓库
1
2
3
4
5
git remote
# 或
git remote -v
# 或
git branch -vv
  1. 推送远程仓库
1
2
3
git push --set-upstream <远端名称> <本地分支名>:<远端分支名>
# 或简写
git push -u <远端名称> <本地分支名>:<远端分支名>
  • 如果远程分支名和本地分支名都形同(比如都是 main),则可以只写本地分支名
    • 如:git push -u origin main
    • -u 是让本地与远端建立链接关系
  • 建立链接后,后续推送就可以直接用 git push 命令

(四)远程仓库 --> 本地仓库

  1. 下载别人仓库到本地,克隆(clone)
1
git clone <ssh 或 https URL>
  1. 抓取(fetch)

从远端抓取变化到本地,不进行合并操作

1
git fetch
  1. 拉取(pull)
1
git pull

从远端抓取变化到本地,会进行合并(merge)操作,git pull ≈ git fetch + git merge


(五)本地仓库 --> 暂存区

1
git reset --hard <commit_ID>
  • 会同时修改三个地方:工作区、暂存区、当前分支指针
    • 把当前分支直接移动到 指定commit_ID 这个提交,并且让暂存区、工作区都恢复成这个提交的状态
  • 此时本地指针(HEAD)指向次新的提交,远端在最新的提交,本地落后远端 1 个提交
  • 并把工作区恢复到 HEDA 所指向的快照,最新提交的 file03.txt 消失。
    20260913-1718-33.7427222.gif
    57d57a37-c64d-4ec7-a59c-566544b676f3.png

(六)暂存区 --> 工作区

1
2
3
git restore --staged .  # 撤销所有暂存,保留工作区修改
# 或
git restore . # 暂存区里所有的内容去恢复工作区(覆盖)。