撤回仓库的提交

结论先行

  • 未推送提交 :可以使用 git reset --soft HEAD~1 或 git reset --hard HEAD~1 来撤回提交,选择保留或丢弃修改。
  • 已推送提交 :可以使用 git reset --soft HEAD~1 后,通过 git push --force 强制覆盖远程的提交记录。

问题描述

我把一个代码修改提交到了 本地的test分支上,但是我现在想撤回,不想提交了,要怎么办

解决

如果你已经将代码提交到本地的 test 分支上,但现在想撤回提交,有以下几种方式可以选择,具体取决于你是否已经推送了提交到远程仓库。

1. 撤回未推送的提交

如果你提交了代码但还没有推送到远程仓库,想要撤回,可以使用以下方法:

使用 git reset 撤回提交

git reset 可以撤回最近的提交并保留修改在工作区中。

bash 复制代码
git reset --soft HEAD~1
  • --soft:撤销提交,但保留代码变更在暂存区(相当于你还没有 git add 的状态)。
  • HEAD~1:表示回退到当前提交的前一个提交。

结果:

你的提交记录会被撤销,但代码依然存在,可以继续修改或选择不提交。

使用 git reset --hard 完全撤销

如果你不仅想撤回提交,还想丢弃代码修改,可以使用 --hard:

bash 复制代码
git reset --hard HEAD~1
  • --hard:不仅撤销提交,还会清除工作区的所有修改。

注意:

使用 --hard 会丢失未保存的修改,所以要谨慎使用。

2. 撤回已经推送到远程的提交

如果你已经将提交推送到远程仓库,还可以撤回提交,但需要使用 git push --force。

使用 git reset 回退并强制推送

首先,使用 git reset 撤销本地提交:

bash 复制代码
git reset --soft HEAD~1

然后,强制推送到远程仓库,覆盖已经推送的提交:

bash 复制代码
git push --force

注意:

强制推送会覆盖远程仓库的历史记录,其他开发者如果基于这些提交做了修改,可能会造成问题,所以在多人协作时需要小心使用。


总结:

  • 未推送提交 :可以使用 git reset --soft HEAD~1 或 git reset --hard HEAD~1 来撤回提交,选择保留或丢弃修改。
  • 已推送提交 :可以使用 git reset --soft HEAD~1 后,通过 git push --force 强制覆盖远程的提交记录。
相关推荐
import_random6 小时前
[git]只有git,没有github, 如何工作
git·github
import_random6 小时前
[git]先创建远程仓库or先创建本地项目
git·github
Linux实战笔记8 小时前
rebase 变基引发提交哈希重写与指针机制分析
git·rebase·提交哈希·分支模型·代码合并
小稀土1239 小时前
私有化研发协同系统并行期:旧 Jira 与新 Git 并存 6 条数据规则
git
Madison-No710 小时前
Git版本控制工具(二)
git
Brookty13 小时前
Git 与 GitHub|第一阶段:仓库、版本历史与 Git 对象模型(上篇)
git·github
Kimnol1 天前
我的第一次 Git 贡献:从 fork 到合并 PR #3130
git
鬼手点金1 天前
消息的四种角色
java·前端·人工智能·git·深度学习
齐 飞2 天前
idea中git误操作撤回git reset --hard ‘HEAD@{1}‘
java·git·intellij-idea
长成一棵参天树2 天前
React15 vs React16 核心区别
git·vscode