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 条评论

登录 后参与评论

还没有评论,来抢沙发~