news 2026/6/9 8:35:33

一套完整、可复现、一步步“打脸直觉”的git示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一套完整、可复现、一步步“打脸直觉”的git示例

一套完整、可复现、一步步“打脸直觉”的示例。


一、目标:你将亲眼看到这件“反直觉”的事

两个分支:

commit 几乎一模一样

中间一个分支多了一个 commit

后面的 commit 又完全一样(SHA 都一样)

并且你会彻底理解为什么这是合理的。


二、示例一:最小可复现 Git 历史(强烈建议你本地试)

1️⃣ 初始化仓库

mkdir git-branch-mindfuck
cd git-branch-mindfuck
git init


2️⃣ 创建初始提交

echo “A” > file.txt
git add .
git commit -m “A”


3️⃣ 再来两个提交(公共历史)

echo “B” >> file.txt
git commit -am “B”

echo “C” >> file.txt
git commit -am “C”

现在历史是:

A ── B ── C


4️⃣ 在 C 这里分叉一个分支

git branch feature

此时:

main, feature

A ── B ── C


5️⃣ feature 分支多走一步(关键)

git checkout feature
echo “X” >> file.txt
git commit -am “X (only in feature)”

历史变成:

main: A ── B ── C
feature: A ── B ── C ── X


6️⃣ 回到 main,继续提交(你直觉会崩的地方)

git checkout main
echo “D” >> file.txt
git commit -am “D”

echo “E” >> file.txt
git commit -am “E”

现在:

main: A ── B ── C ── D ── E
feature: A ── B ── C ── X


7️⃣ 把 main 合并到 feature

git checkout feature
git merge main

没有冲突,秒合并。


8️⃣ 看图(关键时刻)

git log --oneline --graph --decorate --all

你会看到类似:

  • ffffff (feature) Merge branch ‘main’
    |
    | * eeeeeee E
    | * ddddddd D
  • | xxxxxxx X
    |/
  • ccccccc C
  • bbbbbbb B
  • aaaaaaa A

三、现在回答你原来的问题

是不是同一个分支?

❌ 不是

为什么后面的 commit 完全一样?

✅ 因为:

D 和 E

父 commit 一样

内容一样

提交顺序一样

👉 所以 SHA 一样


四、核心原理(这是你真正要吃透的)

1️⃣ Git 分支是什么?

分支 ≠ 一条线

分支 = 一个指向 commit 的指针

main → E
feature → Merge Commit


2️⃣ Commit 的本质是什么?

一个 commit 的 SHA 由这几样东西决定:

父 commit 的 SHA(极其重要)

文件快照(内容)

提交信息

author / committer(时间不同通常就不同)

👉 只要父链相同,后面就能“完全一样”


3️⃣ “多一个 commit”不会污染后续历史

你脑子里想的是:

多一个 commit = 分支已经“脏了”

但 Git 的真实世界是:

历史是 DAG(有向无环图),不是一维时间线

X
/
C ── D ── E

X 只是一个旁枝,不影响主干继续前进。


五、判断“是不是同一个分支”的唯一正确方式

记住这个命令:

git show-branch --sha1-name main feature

或者更狠一点:

git merge-base main feature

👉 merge-base 是“最近共同祖先”

只要你看到:

共同祖先一样

但 HEAD 不一样

那就是两个不同分支


六、你现在已经跨过了哪道坎?

你刚刚理解的是:

“Git 不是按时间思考的,而是按指针 + 父子关系”

这是:

rebase 能用对 / 用错的分水岭

看 Git 图不再迷路的分水岭

技术负责人 vs 普通使用者的分水岭


下一步(如果你愿意)

我可以继续带你玩一个更狠的:

🔥 rebase 之后:

commit 内容一样

message 一样

顺序一样

但 SHA 全变了

然后教你肉眼一眼分辨“被 rebase 过的历史”。

你要不要继续?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/31 0:54:41

YOLOE训练成本低3倍?数据告诉你真相

YOLOE训练成本低3倍?数据告诉你真相 在AI模型日益庞大的今天,一个新词正在悄然改变目标检测领域的游戏规则:开放词汇表检测(Open-Vocabulary Detection)。它意味着模型不再局限于训练时见过的类别,而是能像…

作者头像 李华
网站建设 2026/6/6 17:55:29

输入照片有讲究,这样拍转换效果最好

输入照片有讲究,这样拍转换效果最好 1. 引言:为什么输入照片质量决定卡通化成败? 你有没有遇到过这种情况:兴冲冲地把自己的照片上传到人像卡通化工具,结果生成的卡通形象要么五官错乱,要么表情僵硬&…

作者头像 李华
网站建设 2026/6/8 16:51:07

UniHacker终极指南:5分钟免费解锁Unity全功能完整教程

UniHacker终极指南:5分钟免费解锁Unity全功能完整教程 【免费下载链接】UniHacker 为Windows、MacOS、Linux和Docker修补所有版本的Unity3D和UnityHub 项目地址: https://gitcode.com/GitHub_Trending/un/UniHacker UniHacker是一款革命性的开源Unity破解工具…

作者头像 李华
网站建设 2026/6/5 5:01:05

FastAPI脚手架架构设计与企业级工程实践

FastAPI脚手架架构设计与企业级工程实践 【免费下载链接】fastapi-scaf This is a fastapi scaf. (fastapi脚手架,一键生成项目或api,让开发变得更简单) 项目地址: https://gitcode.com/gh_mirrors/fa/fastapi-scaf 在当今快速迭代的软件开发环境…

作者头像 李华
网站建设 2026/5/3 9:16:26

Yuzu模拟器性能调优实战技巧:告别卡顿闪退的完整解决方案

Yuzu模拟器性能调优实战技巧:告别卡顿闪退的完整解决方案 【免费下载链接】yuzu-downloads 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu-downloads 你是否在运行Yuzu模拟器时遭遇过令人沮丧的卡顿、闪退或画面异常问题?这些问题不仅…

作者头像 李华
网站建设 2026/6/7 12:51:58

技术突破:webMAN MOD如何解锁PS3隐藏潜能与功能全解析

技术突破:webMAN MOD如何解锁PS3隐藏潜能与功能全解析 【免费下载链接】webMAN-MOD Extended services for PS3 console (web server, ftp server, netiso, ntfs, ps3mapi, etc.) 项目地址: https://gitcode.com/gh_mirrors/we/webMAN-MOD 还在为PS3游戏加载…

作者头像 李华