Git撤回操作全场景指南:未推送与已推送,保留和不保留修改的差异处理
一、未推送到远程仓库的提交(仅当地存在)特点:可直接修改当地提交汗青,不会影响他人
1. 保留修改重新提交
git reset --soft HEAD~1
# 操作效果:
# - 撤销最后一次提交
# - 保留工作区所有修改
# - 暂存区内容保持不变
适用场景:
[*]必要修改提交信息
[*]增补遗漏的文件
[*]拆分归并提交
后续操作示例:
# 修改提交信息
git commit --amend -m "新提交信息"
# 或重新组织文件
git add new_file.txt
git commit -m "补充新文件"
2. 彻底抛弃修改
git reset --hard HEAD~1
# 操作效果:
# - 撤销最后一次提交
# - 清除工作区所有修改
# - 回退到上一次提交状态
适用场景:
[*]完全放弃当前开辟内容
[*]错误修改无法规复
[*]必要快速回滚到稳定版本
二、已推送到远程仓库的提交(影响公共汗青)
特点:需审慎操作,避免粉碎协作流程
1. 安全撤回(保举)
git revert HEAD
git push origin main
# 操作效果:
# - 生成新提交撤销错误操作
# - 保留完整提交历史
# - 不会影响其他开发者工作
适用场景:
[*]团队协作环境
[*]公共分支维护
[*]必要保留操作记载
典范案例:
# 撤回指定提交(非最新提交)
git revert <commit-hash>
2. 强制撤回(危险操作)
利用 git reset --soft <正确提交哈希>
git reset --soft <正确提交哈希>
git push -f origin main
操作结果:
[*]撤销错误提交:将当地分支的提交汗青回退到指定的正确提交哈希处,撤销后续的错误提交。
[*]保留当地修改:工作区的文件修改内容会被保留,且之前提交的修改内容会回到暂存区,你可以重新构造提交。
[*]覆盖远程汗青:通过强制推送 -f 选项,将修改后的当地提交汗青覆盖到远程仓库,直接删除远程的错误提交记载。
适用场景:
[*]你意识到提交有误,但希望保留当地已做的修改,后续重新整理提交。
[*]错误提交尚未被其他团队成员拉取并基于其进行开辟。
利用 git reset --hard <正确提交哈希>
git reset --hard <正确提交哈希>
git push -f origin main
操作结果:
[*]撤销错误提交:同样将当地分支的提交汗青回退到指定的正确提交哈希处,撤销后续的错误提交。
[*]清除当地修改:与 --soft 不同的是,--hard 会清除工作区和暂存区的全部修改,使其回到指定提交时的状态。
[*]覆盖远程汗青:通过强制推送 -f 选项,将修改后的当地提交汗青覆盖到远程仓库,直接删除远程的错误提交记载。
适用场景:
[*]你确定不必要保留当前工作区和暂存区的修改,希望完全回退到之前的某个正确状态。
[*]错误提交包罗敏感信息或严重错误,必须彻底删除。
注意事项:
无论是利用 --soft 还是 --hard 进行强制撤回,这两种强制推送操作都有较高风险,由于它们会直接覆盖远程仓库的提交汗青。如果团队中的其他成员已经基于远程仓库上包罗错误提交的版本进行了开辟,那么他们在拉取代码时大概会遇到辩说。因此,在实行强制推送之前,肯定要和团队成员沟通协调,确保各人都知晓并做好相应的准备。同时,发起在操作前备份重要数据,以防不测环境发生。
三、操作结果对比表
场景保留修改汗青记载风险等级保举指数未推送撤回(soft)✔️可修改低★★★★★未推送撤回(hard)❌可修改中★★☆☆☆已推送撤回(revert)✔️新增提交低★★★★☆已推送撤回(强制 - soft)✔️覆盖汗青高★★☆☆☆已推送撤回(强制 - hard)❌覆盖汗青高★☆☆☆☆ 四、关键命令流程图
提交错误 → 检查是否推送 →
├─ 未推送 → git reset --soft(保留修改)/ git reset --hard(丢弃修改)
└─ 已推送 → git revert(安全)/ git reset --soft(保留修改强制)/ git reset --hard(丢弃修改强制)
五、最佳实践发起
[*]优先利用git revert:# 撤回多个提交
git revert <start-commit>..<end-commit>
[*]强制推送前验证:# 查看远程分支状态
git remote show origin
[*]提交前查抄:# 使用暂存区分块提交
git add -p
六、常见问题解决方案
Q1:利用git revert后如何删除多余提交?
# 通过变基清理提交历史
git rebase -i HEAD~3
Q2:误操作git reset --hard后如何规复?
# 查找最近提交哈希
git reflog
git checkout <commit-hash>
Q3:强制推送后他人无法拉取?
# 建议他人执行
git fetch --all
git reset --hard origin/main
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]