你这个描述非常关键,而且我可以明确告诉你一句话:

你之前的 Git 使用流程在“逻辑上是错误的”,但 Git 又“纵容”了你,所以才会出现现在这种看似诡异、其实完全可解释的结果。

我按 发生了什么 → 为什么会这样 → 正确理解 → 如何补救 给你一次讲透。


一、先给你一句“定性结论”(非常重要)

Git 从来不会“推送未提交的代码”。
你之前那些“只 push 不 commit 的分支”,实际上远程什么都没保存。


二、我们把你之前的真实流程“还原一遍”(这是关键)

你说你的流程是:

  1. master 新建分支 A
  2. 在分支 A 写代码
  3. 只 push,没有 commit
  4. 再从 master 新建分支 B
  5. 发现 B 里居然有刚刚写的代码
  6. 重复这个流程很多次
  7. 最后一次:在某个分支 commit + push
  8. 再从 master 新建分支,发现之前写的内容全没了

👉 这一切,其实完全符合 Git 的工作原理


三、关键真相 1:你之前写的代码,从来没进过 Git 历史

Git 的铁律(请牢牢记住)

1
❗ 没有 commit = Git 当作这段代码从未存在

你之前做的其实是:

  • 写了代码(工作区)
  • 切分支(工作区代码会被“原封不动”带走)
  • push(但 push 只会推 commit)
  • 所以:远程仓库是空的 / 旧的

👉 你以为“推送成功”,但实际上什么都没保存


四、那为什么“新分支里还有刚写的代码”?(这是最迷惑人的点)

这是 Git 最容易骗新手的地方。

发生了什么?

你所有“没提交的代码”,一直都在同一个工作区里。

当你执行:

1
git checkout -b new-branch

Git 的行为是:

  • ❌ 不清空工作区
  • ❌ 不丢弃未提交修改
  • ✅ 原封不动地把这些修改带到新分支

所以你看到的是:

“我从 master 新建分支,怎么代码还在?”

其实真相是:

代码不是从 master 来的,而是从你的工作区带过去的


五、关键真相 2:直到你“最后一次 commit”,Git 才真正记住了代码

你说:

最后一次我在分支写完后,推送并提交了

这一步发生了质变

1
2
3
git add .
git commit -m "xxx"
git push

👉 这是你人生中第一次真正把代码写进 Git 历史


六、那为什么这之后,从 master 再建分支就“什么都没了”?

因为:

此时 Git 的状态是:

  • master:还是最早那个老版本(从未合并过你的分支)
  • 你 commit 的代码:只存在于那个分支
  • 工作区:已经干净了(commit 了)

当你再做:

1
2
git checkout master
git checkout -b new-branch

Git 的行为是:

“OK,从 master 的最后一个 commit 开一个新分支”

👉 而 master 根本没你之前写的代码

所以你看到的是:

“之前写的好多内容都没了”

不是没了,而是:从来没在 master 里存在过。


七、用一句“人话类比”帮你彻底记住

你之前一直在 Word 里写文档但从不点保存
切文件夹时看起来内容还在
直到你最后点了一次“保存”
再打开旧文件夹,发现什么都没有

——因为你之前从来没保存过


八、你现在最关心的两个问题,我直接替你回答

❓ 问题 1:我之前那些分支 push 出去的东西还有吗?

结论:没有。

  • 没 commit
  • push 只是空推
  • 远程仓库里什么都没有

❓ 问题 2:已经 commit 的那一次代码能救吗?

能,而且这是你现在唯一“真实存在”的版本。

1
2
git branch
git log --oneline --all

你会看到:

  • 那个 commit 只在某个分支上
  • master 还停在老地方

九、你现在“正确的补救方式”(一步不多)

1️⃣ 找到那个真正 commit 过的分支

1
git log --oneline --all --decorate

记住那个 commit hash。


2️⃣ 把它合并回 master(或你真正的主分支)

1
2
git checkout master
git merge 那个分支名

或(更安全):

1
2
git checkout -b master-fixed
git merge 那个分支名

3️⃣ 以后严格遵守这一条铁律

写完一段“有意义的代码”
👉 必须 commit
👉 push 只是备份,不是保存


十、给你一条你以后绝对不会再翻车的 Git 心法

Git 只记得 commit,不记得你“写过”。
工作区的一切,都是幻觉。


如果你愿意,下一步我可以帮你做三件事之一(都很值):

  1. 帮你 现场复盘你的 Git 历史,找还能救的 commit
  2. 给你一套 “个人开发者 0 翻车 Git 流程”
  3. 教你 IDEA 里如何避免这种误操作(可视化防呆)

你这次踩的坑,很大,但也非常典型
跨过去,你的 Git 水平会直接上一个台阶。