git操作之撤回指定某次已经提交到远程的内容,并不更改其他提交

101 阅读2分钟

操作步骤:

  1. 查看提交记录: 首先,使用 git log 查看最近的提交记录,确认你要撤销的是哪一条提交。假设你的提交记录如下:
commit abc123 (HEAD -> master) 
Author: Your Name <your.email@example.com>
Date:   Thu Nov 14 10:00:00 2024 +0800
Merge branch 'feature-x'

commit def456 
Author: Your Name <your.email@example.com>
Date:   Thu Nov 13 15:00:00 2024 +0800
Fix login form bug

commit ghi789 
Author: Your Name <your.email@example.com>
Date:   Thu Nov 12 14:00:00 2024 +0800
Initial commit of the project

假设你想撤回的是 ghi789 这次提交,而保留后面的 def456abc123

  1. 开始交互式 rebase: 使用 git rebase -i 命令开始交互式 rebase,告诉 Git 你希望从 ghi789 之前的提交开始编辑。在上面的例子中,ghi789 是最早的提交,你可以指定从 def456 开始 rebase。假设你想撤销最早的提交,应该指定其上面一个提交的哈希值。
git rebase -i HEAD~3

这会打开编辑器,显示最近三次提交

pick ghi789 Initial commit of the project
pick def456 Fix login form bug
pick abc123 Merge branch 'feature-x'
  1. 编辑提交操作: 在编辑器中,将 pick 改为 drop 来删除最早的提交(ghi789):
drop ghi789 Initial commit of the project
pick def456 Fix login form bug
pick abc123 Merge branch 'feature-x'
  1. 完成 rebase: Git 会自动执行 rebase 操作,并且会将最早的那次提交删除,同时保留后面的两次提交。如果没有冲突,Git 会提示操作成功。
按下 Esc 键,确保你处于命令模式。
输入 :wq(w 表示写入,q 表示退出)。 
然后按 Enter 键,保存并退出。 
如果你不想保存并退出:
按下 Esc 键,确保你处于命令模式。 
输入 :q!,然后按 Enter
  1. 推送更改到远程: 因为你修改了历史提交(删除了一个提交),你需要强制推送(force push)这些更改到远程仓库:
git push origin <branchName> --force  //branchName需替换成对应的分支名称

注意:强制推送会覆盖远程仓库的提交历史,因此在团队协作时,使用 git push --force 时要非常小心,确保不会破坏其他人的工作。