Git 撤销与恢复提示词(reset、revert、restore、reflog:按场景给出安全的命令)
Git 操作出了岔子(提交错了、提交到错的分支、reset 后代码不见了、误删分支、已经推送的提交想撤回)时用:描述你做了什么、想达到什么状态,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 留一个书签。
同款作品
用这条提示词做出来的作品;原作者会因此获得积分
还没有同款,来做第一个。


0 条评论
还没有评论,来抢沙发~