文章目录
- 一、三种 git 指针
- 1.本地分支指针
- 2.HEAD 指针
- 3.远端追踪指针(origin/xxx)
- 二、git diff
- 1.git diff HEAD
- 2.git diff HEAD~
- 3.git diff HEAD origin/xxx\_dev
- 三、两种使用场景
- 场景 1:普通开源 Git 仓库(无 Gerrit 评审)
- 场景 2: Gerrit 工作流
一、三种 git 指针
1.本地分支指针
每个本地分支名就是一个指针,存放对应 commit 的哈希,永久存在,手动切换/创建。
如:xxx_dev、xxx_release
2.HEAD 指针
HEAD:当前工作指针,标记本地仓库的最新commitHEAD~:本地上一笔commitHEAD~2:倒数第二个commit
3.远端追踪指针(origin/xxx)
origin/xxx_dev:
远端仓库 enrigin_dev 分支在本地的镜像指针,记录上次拉取时远端最新提交
执行git fetch / pull后自动更新,本地缓存远端分支状态,不是远程实时指针。
二、git diff
1.git diff HEAD
对比「所有本地修改(不管 add 没 add)」和本地最新提交 HEAD
适合一次性查看全部未提交代码
2.git diff HEAD~
等价git diff HEAD~ HEAD
查看上一次提交 和 当前 HEAD的差异,也就是你本次 commit 改了什么
3.git diff HEAD origin/xxx_dev
看当前本地提交与远端差距
三、两种使用场景
场景 1:普通开源 Git 仓库(无 Gerrit 评审)
1.手动改文件 →工作区
2.git add .→ 改动拷贝到暂存区
3.git commit→ 暂存打包成提交,存入本地仓库,HEAD 前移
4.git push→ 把本地新提交同步到远程对应分支
此时远程分支立刻更新,代码直接生效,不需要 merge。
只有多人分支并行开发时,拉代码出现分叉,才需要 merge/rebase 整合提交历史。
场景 2: Gerrit 工作流
1.改代码 → 工作区
2.git add → 暂存区
3.git commit /git commit --amend → 存入本地仓库(HEAD 更新)
4.git push origin HEAD:refs/for/enrigin_dev
提交送到 Gerrit 评审服务器,进入待审核列表;
远端正式分支 origin/enrigin_dev 不会变,别人拉代码看不到你的改动。
5.评审通过、管理员点 Submit(合并)
Gerrit 才会把这条提交合并到正式远程enrigin_dev分支;
6.其他人执行git pull --rebase,拉取这条已合入远端的代码到本地。