目录

关键提交记录

提交时的分支状态

为什么提交消失了?

找回提交的方法

步骤 1:切换到游离提交

步骤 2:创建新分支保存提交

步骤 3:合并到目标分支(可选)


一、当时的情景

在sourcetree上提交了修改但是没有推送,结果发现没有在最新的分支上,后面切到最新的分支提交但是未推送的记录找不到了!天塌了!

其实提交并没有真正“丢失”!这是 Git 分支机制的正常现象。

二、原因分析

  1. 提交绑定在分支上: 当做本地提交时,这个提交是附加在当前活动分支上的。

  2. 切换分支不会带走提交: 当你从分支 A (有未推送的提交) 切换到分支 B 时,你只是把工作目录切换到了分支 B 的状态。分支 A 上的那些提交仍然存在于你的本地仓库中,只是你现在在分支 B 上看不到它们了,因为它们属于另一个分支的历史。

  3. 未推送 = 只在本地: 因为你没有推送,这些提交只存在于你的本地仓库,远程仓库并不知道它们。所以当你在分支 B 上工作时,自然看不到分支 A 的提交。

三、如何找回提交

关键就是切换回你最初做提交的那个分支

  1. 在 SourceTree 中查看分支列表:

    • 打开你的仓库。

    • 查看左侧的 “分支” (Branches) 列表。

    • 仔细找找你最初做提交时所在的分支。它可能是一个功能分支 (如 feature/my-feature)、一个开发分支 (如 develop),或者你自定义的名字。

  2. 切换回原分支:

    • 在左侧分支列表中找到那个分支。

    • 双击它,或者右键选择 “检出” (Checkout)

    • 现在你的工作目录和 SourceTree 的提交历史视图就会显示那个分支的状态。

  3. 查看提交:

    • 切换回原分支后,你应该立即在 SourceTree 的主界面的提交历史图中看到你之前做的、但未推送的提交。它们通常位于分支的顶端,并用一个特殊的图标(可能与已推送的提交不同)或标签(如 (1 ahead))表示它们是本地未推送的提交。

但是我忘记了原分支名啊啊啊啊!!!!!!!!!!!!!!

四、如果忘记了原分支名怎么办

  1. 使用 git reflog (推荐): 这是找回“丢失”操作记录的最强大工具。

    • 在 SourceTree 中打开 “终端” (Terminal) 标签页 (通常在窗口底部)。

    • 输入命令:git reflog

    • 按回车。你会看到一个列表,记录了你最近在本地仓库的所有操作(检出、提交、合并、重置等),按时间倒序列出,每个操作都有一个简短的哈希值(如 HEAD@{0}HEAD@{1})和操作描述。

    • 仔细查看列表,找到描述为 commit: 后面跟着你提交信息的记录。注意看这条记录之前的一条记录,它很可能是 checkout: moving from 从哪个分支切换到了哪个分支。这个 from 后面的分支名很可能就是你要找的原分支!

    • 找到分支名后,回到 SourceTree 的图形界面,在分支列表中双击检出那个分支即可。

我当时使用git relog回的是这么一堆

$ git reflog
9edc4b18 (HEAD) HEAD@{0}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
dcbb6880 (origin/Step3-Fsoe, Step3-Fsoe) HEAD@{1}: checkout: moving from c6d19dfe5a0203b2664ec722634e9b373d6b7766 to Step3-Fsoe
c6d19dfe HEAD@{2}: checkout: moving from 9edc4b18f339eaa8443355a076137b98d5ffd76e to c6d19dfe5a0203b2664ec722634e9b373d6b7766
9edc4b18 (HEAD) HEAD@{3}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
dcbb6880 (origin/Step3-Fsoe, Step3-Fsoe) HEAD@{4}: checkout: moving from 9edc4b18f339eaa8443355a076137b98d5ffd76e to Step3-Fsoe
9edc4b18 (HEAD) HEAD@{5}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
dcbb6880 (origin/Step3-Fsoe, Step3-Fsoe) HEAD@{6}: checkout: moving from 9edc4b18f339eaa8443355a076137b98d5ffd76e to Step3-Fsoe
9edc4b18 (HEAD) HEAD@{7}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
dcbb6880 (origin/Step3-Fsoe, Step3-Fsoe) HEAD@{8}: checkout: moving from 4f754f2dd008e44e4c66e9450372ab53d2648f65 to Step3-Fsoe
4f754f2d HEAD@{9}: commit: EtherCAT一致性测试修改提交,目前还有一个waring
9edc4b18 (HEAD) HEAD@{10}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
dcbb6880 (origin/Step3-Fsoe, Step3-Fsoe) HEAD@{11}: commit: CZSC_CPU F425工程增
加兼容老硬件的3个ADDR和12v监控工程CZSC_CM_24IO4_3ADDR
:
9edc4b18 (HEAD) HEAD@{0}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
dcbb6880 (origin/Step3-Fsoe, Step3-Fsoe) HEAD@{1}: checkout: moving from c6d19dfe5a0203b2664ec722634e9b373d6b7766 to Step3-Fsoe
c6d19dfe HEAD@{2}: checkout: moving from 9edc4b18f339eaa8443355a076137b98d5ffd76e to c6d19dfe5a0203b2664ec722634e9b373d6b7766
9edc4b18 (HEAD) HEAD@{3}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
dcbb6880 (origin/Step3-Fsoe, Step3-Fsoe) HEAD@{4}: checkout: moving from 9edc4b18f339eaa8443355a076137b98d5ffd76e to Step3-Fsoe
9edc4b18 (HEAD) HEAD@{5}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
dcbb6880 (origin/Step3-Fsoe, Step3-Fsoe) HEAD@{6}: checkout: moving from 9edc4b18f339eaa8443355a076137b98d5ffd76e to Step3-Fsoe
9edc4b18 (HEAD) HEAD@{7}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
dcbb6880 (origin/Step3-Fsoe, Step3-Fsoe) HEAD@{8}: checkout: moving from 4f754f2dd008e44e4c66e9450372ab53d2648f65 to Step3-Fsoe
4f754f2d HEAD@{9}: commit: EtherCAT一致性测试修改提交,目前还有一个waring
9edc4b18 (HEAD) HEAD@{10}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
dcbb6880 (origin/Step3-Fsoe, Step3-Fsoe) HEAD@{11}: commit: CZSC_CPU F425工程增加兼容老硬件的3个ADDR和12v监控工程CZSC_CM_24IO4_3ADDR
76559869 HEAD@{12}: pull --no-commit origin Step3-Fsoe: Fast-forward
a4565da2 HEAD@{13}: checkout: moving from 9edc4b18f339eaa8443355a076137b98d5ffd76e to Step3-Fsoe
9edc4b18 (HEAD) HEAD@{14}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
a4565da2 HEAD@{15}: checkout: moving from 9edc4b18f339eaa8443355a076137b98d5ffd76e to Step3-Fsoe
9edc4b18 (HEAD) HEAD@{16}: checkout: moving from bcd95fe9c6f57d7c80db1f4a837f444b09b583e7 to 9edc4b18f339eaa8443355a076137b98d5ffd76e
bcd95fe9 HEAD@{17}: checkout: moving from 9edc4b18f339eaa8443355a076137b98d5ffd76e to bcd95fe9c6f57d7c80db1f4a837f444b09b583e7
9edc4b18 (HEAD) HEAD@{18}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
a4565da2 HEAD@{19}: reset: moving to HEAD
a4565da2 HEAD@{20}: checkout: moving from 50a6cbcbfc462215d456d6920fe5c7750784ca8e to Step3-Fsoe
50a6cbcb HEAD@{21}: checkout: moving from Step3-Fsoe to 50a6cbcbfc462215d456d6920fe5c7750784ca8e
a4565da2 HEAD@{22}: reset: moving to HEAD
:...skipping...
9edc4b18 (HEAD) HEAD@{0}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
dcbb6880 (origin/Step3-Fsoe, Step3-Fsoe) HEAD@{1}: checkout: moving from c6d19dfe5a0203b2664ec722634e9b373d6b7766 to Step3-Fsoe
c6d19dfe HEAD@{2}: checkout: moving from 9edc4b18f339eaa8443355a076137b98d5ffd76e to c6d19dfe5a0203b2664ec722634e9b373d6b7766
9edc4b18 (HEAD) HEAD@{3}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
dcbb6880 (origin/Step3-Fsoe, Step3-Fsoe) HEAD@{4}: checkout: moving from 9edc4b18f339eaa8443355a076137b98d5ffd76e to Step3-Fsoe
9edc4b18 (HEAD) HEAD@{5}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
dcbb6880 (origin/Step3-Fsoe, Step3-Fsoe) HEAD@{6}: checkout: moving from 9edc4b18f339eaa8443355a076137b98d5ffd76e to Step3-Fsoe
9edc4b18 (HEAD) HEAD@{7}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
dcbb6880 (origin/Step3-Fsoe, Step3-Fsoe) HEAD@{8}: checkout: moving from 4f754f2dd008e44e4c66e9450372ab53d2648f65 to Step3-Fsoe
4f754f2d HEAD@{9}: commit: EtherCAT一致性测试修改提交,目前还有一个waring
9edc4b18 (HEAD) HEAD@{10}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
dcbb6880 (origin/Step3-Fsoe, Step3-Fsoe) HEAD@{11}: commit: CZSC_CPU F425工程增加兼容老硬件的3个ADDR和12v监控工程CZSC_CM_24IO4_3ADDR
76559869 HEAD@{12}: pull --no-commit origin Step3-Fsoe: Fast-forward
a4565da2 HEAD@{13}: checkout: moving from 9edc4b18f339eaa8443355a076137b98d5ffd76e to Step3-Fsoe
9edc4b18 (HEAD) HEAD@{14}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
a4565da2 HEAD@{15}: checkout: moving from 9edc4b18f339eaa8443355a076137b98d5ffd76e to Step3-Fsoe
9edc4b18 (HEAD) HEAD@{16}: checkout: moving from bcd95fe9c6f57d7c80db1f4a837f444b09b583e7 to 9edc4b18f339eaa8443355a076137b98d5ffd76e
bcd95fe9 HEAD@{17}: checkout: moving from 9edc4b18f339eaa8443355a076137b98d5ffd76e to bcd95fe9c6f57d7c80db1f4a837f444b09b583e7
9edc4b18 (HEAD) HEAD@{18}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
a4565da2 HEAD@{19}: reset: moving to HEAD
a4565da2 HEAD@{20}: checkout: moving from 50a6cbcbfc462215d456d6920fe5c7750784ca8e to Step3-Fsoe
50a6cbcb HEAD@{21}: checkout: moving from Step3-Fsoe to 50a6cbcbfc462215d456d6920fe5c7750784ca8e
a4565da2 HEAD@{22}: reset: moving to HEAD
a4565da2 HEAD@{23}: commit: EtherCAT一致性测试修改提交
a1ba25d0 HEAD@{24}: pull --no-commit origin Step3-Fsoe: Fast-forward
2477c368 HEAD@{25}: commit: EtherCAT一致性测试修改提交
54692e4d HEAD@{26}: commit: EtherCAT一致性测试修改提交
404e8747 HEAD@{27}: checkout: moving from 50a6cbcbfc462215d456d6920fe5c7750784ca8e to Step3-Fsoe
50a6cbcb HEAD@{28}: checkout: moving from 24f3f025e2114112980ca53c7e0c83082d0e3377 to 50a6cbcbfc462215d456d6920fe5c7750784ca8e
24f3f025 (tag: CPU新硬件使用) HEAD@{29}: checkout: moving from Step3-Fsoe to CPU新硬件使用
404e8747 HEAD@{30}: reset: moving to HEAD

根据我的 git reflog 输出,来分析提交时的分支情况:

关键提交记录
4f754f2d HEAD@{9}: commit: EtherCAT一致性测试修改提交,目前还有一个waring
提交时的分支状态
  1. 提交操作发生在 HEAD@{9}

    • 提交哈希:4f754f2d

    • 提交信息:EtherCAT一致性测试修改提交,目前还有一个waring

  2. 提交前的操作(紧邻的上一条记录)

9edc4b18 (HEAD) HEAD@{10}: checkout: moving from Step3-Fsoe to 9edc4b18f339eaa8443355a076137b98d5ffd76e
  • 这表示我在提交前做了一次 分离头指针(detached HEAD) 操作:

    • 从分支 Step3-Fsoe 切换到了一个具体的提交 9edc4b18(而不是分支)

    • 此时已不在任何分支上(处于游离状态)

啊啊啊我处于游离状态所以根本找不到提交记录!!!!

提交后的操作

dcbb6880 (origin/Step3-Fsoe, Step3-Fsoe) HEAD@{8}: checkout: moving from 4f754f2dd0... to Step3-Fsoe
  • 我从提交 4f754f2d(你的提交)切换回了分支 Step3-Fsoe

为什么提交消失了?
  1. 提交不在分支上

    • 我在 分离头指针状态(游离状态)下提交了代码

    • Git 不会自动将游离状态的提交绑定到分支

  2. 切换分支时未保留提交

    • 提交后我直接切回了 Step3-Fsoe 分支

    • 该分支指向的是之前的提交 dcbb6880(不是我新提交的 4f754f2d

五、找回提交的方法

步骤 1:切换到游离提交
git checkout 4f754f2d   # 直接检出你的提交

现在你会处于 detached HEAD 状态,但你的代码文件会恢复。

步骤 2:创建新分支保存提交
git branch rescue-branch  # 创建新分支 rescue-branch 指向该提交
git checkout rescue-branch  # 切换到新分支

现在你的提交已安全保存在 rescue-branch 分支上。

步骤 3:合并到目标分支(可选)

如果你想将提交合并到 Step3-Fsoe

git checkout Step3-Fsoe     # 切回原分支
git merge rescue-branch     # 合并提交

最终总算是正常提交了

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐