Git 最强入门到精通:工作区、暂存区、本地仓库、tracking、origin/dev 全面讲透(图解版)

目录

摘要

1. Git 核心

2. Git 三大空间:工作区 / 暂存区 / 本地仓库

1)工作区(工作目录)

2)暂存区(Stage)

3)本地仓库(Local Repo)

3. Git 三大分支类型

4. origin 是什么

5. dev vs origin/dev:看懂映射关系

6. commit 与 push 的本质区别

1)commit:本地行为

2)push:远程行为

7. VSCode GitLens 图为何显示本地 commit

8. 从远程仓库克隆开始:本地与远程同步机制

9. 本地创建分支与远程毫无关系

10. tracking(上游)分支是什么?为什么重要?

10.1 什么是 tracking(上游)分支

10.2 上游分支的用途(非常重要)

1)git pull 拉取的就是上游分支

2)git push 推送的也是上游分支

10.3 如何建立 tracking 关系

方法 1:第一次推送时使用 -u(最常见)

方法 2:从远程分支 checkout(自动建立)

10.4 关键点

1)推送到“上游分支” ≠ 推到主分支 dev

2)push 永远不会跨分支

10.5 如何让代码“进入主分支 dev”

方法 1(推荐):远程 Merge Request(最专业的流程)

(1)在本地 feature/xxx 上开发:

(2)在 Gitee上发MR:

(3)代码审核通过后,在 Gitee 的 Web 页面上点击 “Merge”:

(4)本地执行:

方法 2:本地 merge 再 push

(1)步骤1:

(2)步骤2:

(3)步骤3:

方法 3:rebase(整理)+ merge(发布)

11. 常规开发流程(实际公司开发)

① 拉取最新 dev

② 新建功能分支

③ 本地 commit

④ 推送(第一次需 -u)

⑤ 远程 Merge Request

12. 本地与远程分支示意图

13. Git 常用命令总结(含 VSCode 操作)

14. 总结


摘要:
本篇文章将彻底讲清楚 Git 中最容易混淆的概念:本地分支、本地提交、远程分支 origin/dev、上游分支 tracking、push 与 commit 的区别、VSCode Git 图为什么能看到本地 commit、别人为什么看不到、你在本地创建的分支为什么不会影响公司代码。
阅读完本篇,你对 Git 分支体系将不再困惑。



1. Git 核心

Git 的本质作用只有一句话:

多人协作时,让每个人都有自己的副本,同时保持最终一致性。

因此 Git 必须解决:

  • 每个人本地的代码(局部)

  • 公司服务器上的代码(远程)

  • 本地如何同步远程(push/pull)

  • 多人修改同一份代码时如何合并

想要真正灵活使用 Git,必须从 本地 vs 远程 这个关系开始理解。


2. Git 三大空间:工作区 / 暂存区 / 本地仓库

1)工作区(工作目录)

你正在写的文件。

2)暂存区(Stage)

准备提交的内容。

3)本地仓库(Local Repo)

你电脑本地的 commit 历史(别人看不到)。

git push 推送后才进入远程仓库


3. Git 三大分支类型

Git 中实际存在三种分支:

类型示例位置
本地分支dev、feature/xxx你电脑里
远程分支origin/dev、origin/master公司服务器(GitLab/Gitee)
tracking(上游)分支dev → origin/devlocal→remote 的关联

4. origin 是什么

许多人会误解:

“origin 是主分支吗?”
“origin/dev 是主仓库吗?”

NO。

origin = 远程仓库的名字

你可以改名:

origin → company, remote, upstream

只不过大家习惯用 origin。

origin 后面的才是分支名:

origin/dev
origin/master
origin/feature/xxx

5. dev vs origin/dev:看懂映射关系

这两个不是同一个分支!

devorigin/dev
你电脑的本地分支公司服务器上的 dev 分支
自己可随意 commit公司统一的版本
不 push 别人看不到push 后别人才能看到

例子:

本地 dev:

A - B - C(你新 commit)

远程 origin/dev:

A - B

别人看到的是:

A - B

因为 C 没 push。


6. commit 与 push 的本质区别

1)commit:本地行为

更新你电脑里的 Git 历史,别人永远看不到。

2)push:远程行为

将你的 commit 同步到公司 origin,别人才能看到。

commit ≠ push
commit ≠ 提交给公司
commit = 写在自己电脑里


7. VSCode GitLens 图为何显示本地 commit

GitLens 展示的是:

  • 你的本地 commit

  • 你的本地缓存的 origin/dev

  • 你本地检出的其它远程镜像

因此 GitLens 不是团队历史,而是:

你电脑能看到的所有历史

别人电脑不一定和你一样


8. 从远程仓库克隆开始:本地与远程同步机制

克隆:

git clone https://xxx

Git 会为你创建:

  • 本地 dev

  • 本地 origin/dev(远程镜像)

  • tracking 关系(自动建立)

之后 pull:

git pull

会基于 tracking 做同步。


9. 本地创建分支与远程毫无关系

你本地新建:

git checkout -b mytest

这是一个 纯本地分支(git checkout)

  • 远程没有 origin/mytest

  • 别人看不到

  • GitLab/Gitee 不会显示

只有你 push 才会存在:(存在本地与远程的链接)

git push -u origin mytest

10. tracking(上游)分支是什么?为什么重要?

tracking 分支是 Git 中非常关键的概念,它决定你:

  • 默认 git pull 从哪里拉?

  • 默认 git push 推到哪里?

  • Git status “与上游分支一致 / 落后 / 超前” 的对比对象

  • 本地分支与远程分支的映射关系


10.1 什么是 tracking(上游)分支

tracking 分支 = 本地分支与某个远程分支的 配对关系

例如你查看状态看到:

您的分支与上游分支 'origin/feature/xxx' 一致

说明:

  • 本地 feature/xxx

  • 默认对应远程 origin/feature/xxx

  • 它们的提交历史完全相同

tracking 仅仅是一种“默认目标设置”,它不意味着你的代码会合并到 dev,也不会跨分支传播


10.2 上游分支的用途(非常重要)

1)git pull 拉取的就是上游分支

例如你在本地 feature/xxx:

git pull

实际上等价于:

git pull origin feature/xxx

不会去拉 origin/dev,也不会拉 origin/master,更不会自动合并到主分支 dev


2)git push 推送的也是上游分支

在本地 feature/lb 时执行:

git push

等价于:

git push origin feature/xxx

也就是说:

push 永远只会推送本地分支对应的远程同名分支(上游分支)
而不是推到主分支 dev。


10.3 如何建立 tracking 关系

方法 1:第一次推送时使用 -u(最常见)

git push -u origin feature/xxx

会自动设置 tracking:

本地 feature/xxx ↔ origin/feature/xxx

方法 2:从远程分支 checkout(自动建立)

git fetch
git checkout feature/lb   # 若远程存在 origin/feature/lb

Git 自动建立 tracking。


10.4 关键点

1)推送到“上游分支” ≠ 推到主分支 dev

“git push 推送到上游分支,并没有推到公司的主分支 origin/dev

例如:

  • 当前本地分支:feature/xxx

  • 上游分支:origin/feature/xxx

执行:

git push

推送到的是:

origin/feature/xxx

不是:

origin/dev 、origin/master

也不会自动合并任何分支。

2)push 永远不会跨分支

push 只做一件事:

把本地分支的内容同步到它自己的 remote tracking branch。


10.5 如何让代码“进入主分支 dev”

push 并不会让代码进入 dev
合并(merge)才能进入 dev。

你有 3 种标准方式:


方法 1(推荐):远程 Merge Request(最专业的流程)

(1)在本地 feature/xxx 上开发:
git checkout feature/xxx
# 写代码
git add .
git commit -m "xxx"
git push -u origin feature/xxx
(2)在 Gitee上发MR:
  • 源分支:origin/feature/xxx

  • 目标分支:origin/dev

(3)代码审核通过后,在 Gitee 的 Web 页面上点击 “Merge”:

远程服务器上执行:

origin/dev ← origin/feature/xxx
(4)本地执行:
git checkout dev
git pull    # 同步远程已经合并好的 origin/dev

这种方式的特点是:必须经过代码评审 / 合并权限控制,适合团队协作,有审计记录。


方法 2:本地 merge 再 push

流程:

(1)步骤1:

还是先在 feature/xxx 上本地开发并 commit(注意:commit 还是必须的):

git checkout feature/xxx
# 写代码
git add .
git commit -m "xxx"
#(可选)git push origin feature/xxx

这里你可以选择 push 也可以不 push,
不 push 的话,origin/feature/xxx 根本不存在也没关系。

(2)步骤2:

然后切回 dev,在本地完成合并:

git checkout dev
git pull                    # 确保本地 dev 是最新的
git merge feature/xxx        # 把本地 feature/xxx 合入 dev
(3)步骤3:

合并没问题后,直接推 dev 到远程:

git checkout dev
git pull                    # 确保本地 dev 是最新的
git merge feature/xxx        # 把本地 feature/xxx 合入 dev

这种方式的特点:

  • 确实可以完全绕过 Gitee 上的 MR 审核

  • 但是需要有 origin/dev 的推送权限,就能直接把改动推到主分支

  • 对小团队 / 个人项目很方便,但大团队一般会禁止直接 push dev/main


方法 3:rebase(整理)+ merge(发布)

适用于一人开发的 feature 分支。


11. 常规开发流程(实际公司开发)

① 拉取最新 dev

git checkout dev
git pull

② 新建功能分支

git checkout -b feature/xxx

③ 本地 commit

git add .
git commit -m "xxx"

④ 推送(第一次需 -u)

git push -u origin feature/xxx

⑤ 远程 Merge Request

合并到 origin/dev。


12. 本地与远程分支示意图

                   【远程仓库:origin】
                  ┌─────────────────────┐
                  │  origin/dev         │
                  │  origin/master      │
                  │  origin/feature/xxx  │
                  └─────────────────────┘
                           ▲
                           │ push/pull
                           ▼
                ┌────────────────────────┐
                │      本地仓库(你)      │
                │                        │
                │  dev                   │
                │  master                │
                │  feature/xxx            │
                │  study/test (仅本地)   │
                └────────────────────────┘

13. Git 常用命令总结(含 VSCode 操作)

操作命令行VSCode 操作范围
初始化本地仓库git init源代码管理 → 初始化本地
克隆仓库git clone URLClone Repository本地 ← 远程
添加暂存git add .+ 暂存更改本地
提交git commit -m✔ 提交本地
推送git push同步更改本地 → 远程
拉取git pull同步更改远程 → 本地
新建分支git checkout -b xxx底部状态栏 → 创建本地
推送新分支git push -u origin xxx同步更改本地 → 远程
查看日志git log / GitLensGit Graph本地
回退git reset —hardGitHistory本地
删除远程分支git push origin --delete xxxGit Graph远程

14. 总结

  1. 本地分支 dev ≠ origin/dev

  2. origin 是远程仓库名,不是分支

  3. 本地 commit 不会影响公司

  4. push 才会把代码同步到公司

  5. commit = 个人记录;push = 团队记录

  6. 不 push 别人永远看不到你的 commit

  7. 上游分支决定 pull/push 默认目标

  8. 本地创建分支不会自动影响远程

  9. VSCode GitLens 显示你“本地看到的历史”

  10. 正常流程是:本地开发 → commit → push → MR → merge

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值