操作步骤:
- 查看提交记录: 首先,使用
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 这次提交,而保留后面的 def456 和 abc123。
- 开始交互式 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'
- 编辑提交操作: 在编辑器中,将
pick改为drop来删除最早的提交(ghi789):
drop ghi789 Initial commit of the project
pick def456 Fix login form bug
pick abc123 Merge branch 'feature-x'
- 完成 rebase: Git 会自动执行 rebase 操作,并且会将最早的那次提交删除,同时保留后面的两次提交。如果没有冲突,Git 会提示操作成功。
按下 Esc 键,确保你处于命令模式。
输入 :wq(w 表示写入,q 表示退出)。
然后按 Enter 键,保存并退出。
如果你不想保存并退出:
按下 Esc 键,确保你处于命令模式。
输入 :q!,然后按 Enter 键
- 推送更改到远程: 因为你修改了历史提交(删除了一个提交),你需要强制推送(force push)这些更改到远程仓库:
git push origin <branchName> --force //branchName需替换成对应的分支名称
注意:强制推送会覆盖远程仓库的提交历史,因此在团队协作时,使用 git push --force 时要非常小心,确保不会破坏其他人的工作。