Git 撤銷與恢復提示詞(reset、revert、restore、reflog:按場景給出安全的命令)

Git 操作出了岔子(提交錯了、提交到錯的分支、reset 後代碼不見了、誤刪分支、已經推送的提交想撤回)時用:描述你做了什麼、想達到什麼狀態,AI 先判斷能否恢復,再給出最安全的命令和執行前的備份步驟。

NNathaniel bigo··原創首發·AI 輔助撰寫
通用大模型 對話模型通用
我在 Git 上操作出了問題,請幫我恢復。你是一名非常謹慎的 Git 專家:先確認情況,優先選擇不會丟失數據的做法,任何會改寫歷史或丟棄改動的命令都要先說明後果。

情況:
- 我做了什麼(盡量按順序寫出執行過的命令):[執行過的命令]
- 現在的狀態:[現在的狀態](例:git status 和 git log 的輸出)
- 我想達到的狀態:[期望的結果]
- 相關提交是否已經推送到遠程:[是/否/不確定]
- 這個分支是否有其他人在用:[是/否]

請按順序回答:
1. 判斷:我遇到的是哪種情況,能否恢復,依據是什麼。
2. 先做備份:給出在動手之前保護現場的命令(例如在當前位置新建一個備份分支),說明為什麼。
3. 恢復步驟:逐條給出命令,每條說明作用和執行後應該看到什麼。根據情況選擇:
   - 只想撤銷工作區或暫存區的改動:restore;
   - 本地提交還沒推送:reset(說明 soft、mixed、hard 的區別,能用 soft 或 mixed 就不用 hard);
   - 已經推送且有其他人在用的分支:用 revert 生成反向提交,不改寫歷史;
   - 「找不回來了」的提交:用 reflog 找到之前的位置;
   - 提交到了錯誤的分支:把提交移到正確分支,再從錯誤分支移除。
4. 如果確實需要強制推送,說明影響、通知其他人的方式,並使用更安全的強制推送選項(遠程分支在此期間有他人更新時會拒絕覆蓋)。
5. 最後給出驗證命令,確認恢復成功。
6. 一句話說明以後怎麼避免。

資訊不足以判斷時,告訴我先執行哪條只讀命令(如 git status、git log --oneline -n 20、git reflog -n 20)並把輸出貼給你。

高亮處換成你自己的內容:[執行過的命令]、[現在的狀態]、[期望的結果]、[是/否/不確定]、[是/否]

ChatGPT Plus 充值

已被複製 0 次

使用說明

怎麼填變量:[執行過的命令] 盡量準確,可以用終端的歷史記錄查。[相關提交是否已經推送到遠程] 和 [這個分支是否有其他人在用] 決定了能不能改寫歷史,是最關鍵的兩個資訊。

常見坑:

  • 遇事先 reset --hard,結果把還沒提交的改動也丟了。工作區裏從未提交過的改動,Git 是無法幫你找回的。
  • 已經推送到公共分支的提交,用 reset 加強制推送撤銷,會打亂其他人的本地倉庫。公共分支用 revert。
  • 以為提交「消失」了就是沒了。只要提交過,本地的 reflog 通常會保留一段時間(具體期限由配置決定),可以找回。

追問技巧:不確定當前狀態時,先把 git status、git log --oneline --graph -n 20、git reflog -n 20 三條命令的輸出都貼給 AI,它能更準確地判斷。

示例輸出

示例,僅供參考(情況:執行了 git reset --hard HEAD~2,丟了兩個本地提交,未推送)

判斷:可以恢復。被 reset 掉的兩個提交仍在 reflog 中。

bash
git branch backup-before-rescue          # 1. 先備份當前位置
git reflog -n 10                          # 2. 找到 reset 之前的記錄
# 輸出類似:
# a1b2c3d HEAD@{0}: reset: moving to HEAD~2
# 9f8e7d6 HEAD@{1}: commit: 完成優惠券校驗
git reset --hard 9f8e7d6                  # 3. 回到 reset 之前的提交
git log --oneline -n 5                    # 4. 確認兩個提交已回來

注意第 3 步的 --hard 會丟棄當前工作區未提交的改動,執行前先用 git status 確認工作區是乾淨的。

以後怎麼避免:執行 reset 之前先 git branch backup 留一個書籤。

同款作品

用這條提示詞做出來的作品;原作者會因此獲得積分

做同款

還沒有同款,來做第一個。

Nathaniel 的更多內容

同主題

同模型

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~