Skip to content

Git 回退与远端同步使用文档

概述

本文档介绍如何使用 Git 进行代码回退操作,以及如何将回退后的状态同步到远端仓库。通过实际案例演示完整的操作流程。

场景说明

在开发过程中,有时需要回退到某个特定的提交版本,并删除之后的提交历史。这种操作通常用于:

  • 撤销错误的提交
  • 回到稳定版本
  • 重新开始某个功能的开发

实操案例

当前提交历史

使用 git log --oneline -10 查看当前提交历史:

bash
c4f27e11 (HEAD -> feat/components, origin/feat/components) fix: 增加车牌键盘演示的中英文翻译映射
5d62c598 perf(wd-keyboard): 优化车牌键盘语言切换逻辑和ts类型控制
a63d0eba feat(键盘页面): 添加受控和非受控的车牌键盘和演示示例
7852e4e4 feat(wd-keyboard): 增加车牌键盘语言切换功能,支持受控和非受控模式
3ef9008d (origin/master, origin/HEAD, master) Merge branch 'release'
d7272eba docs: ✏️  添加博客链接地址
a9056551 feat: Curtain 组件添加 show-menu-by-longpress close-on-click 属性
98d1de87 refactor: ♻️  演示 demo 显示效果优化
397c8833 docs:  修复黑暗模式下demo页面样式异常
43e4f2bd ci: 👷 优化万维广告的体验

操作步骤

1. 硬回退到指定提交

假设我们要回退到提交 c4f27e11,使用以下命令:

bash
git reset --hard c4f27e11

命令说明:

  • git reset --hard:硬回退,会删除工作区和暂存区的所有更改
  • c4f27e11:目标提交的哈希值

执行结果:

bash
HEAD is now at c4f27e11 fix: 增加车牌键盘演示的中英文翻译映射

2. 验证回退结果

使用 git log --oneline -5 验证回退是否成功:

bash
c4f27e11 (HEAD -> feat/components) fix: 增加车牌键盘演示的中英文翻译映射
5d62c598 perf(wd-keyboard): 优化车牌键盘语言切换逻辑和ts类型控制
a63d0eba feat(键盘页面): 添加受控和非受控的车牌键盘和演示示例
7852e4e4 feat(wd-keyboard): 增加车牌键盘语言切换功能,支持受控和非受控模式
3ef9008d (origin/master, origin/HEAD, master) Merge branch 'release'

可以看到 HEAD 已经指向 c4f27e11,之后的提交历史已被删除。

3. 强制推送到远端

由于本地历史已经改变,需要强制推送到远端:

bash
git push --force-with-lease origin HEAD

命令说明:

  • --force-with-lease:安全的强制推送,会检查远端是否有其他人的提交
  • origin:远端仓库名称
  • HEAD:当前分支的最新提交

执行结果:

bash
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To https://github.com/TAYUN/wot-design-uni.git
 + 058e3f9b...c4f27e11 HEAD -> feat/components (forced update)

命令详解

git reset 的三种模式

  1. --soft:只移动 HEAD 指针,保留暂存区和工作区的更改
  2. --mixed(默认):移动 HEAD 指针,重置暂存区,保留工作区的更改
  3. --hard:移动 HEAD 指针,重置暂存区和工作区,完全删除更改

强制推送的安全选项

  1. --force:强制推送,可能覆盖其他人的提交
  2. --force-with-lease:安全的强制推送,会检查远端状态
  3. --force-if-includes:更安全的选项,检查本地引用

注意事项

⚠️ 风险提醒

  1. 不可逆操作git reset --hard 会永久删除提交历史
  2. 团队协作:强制推送会影响其他开发者,需要提前沟通
  3. 备份建议:重要操作前建议创建备份分支

🔒 安全实践

  1. 使用 --force-with-lease:避免意外覆盖他人提交
  2. 小范围操作:尽量在个人分支或功能分支上进行
  3. 及时通知:团队成员需要重新同步代码

恢复方案

如果需要恢复被删除的提交,可以使用:

bash
# 查看所有操作历史
git reflog

# 恢复到指定操作
git reset --hard HEAD@{n}

总结

Git 回退和远端同步是强大但危险的操作,需要谨慎使用。通过本文档的实操案例,可以安全地完成代码回退和远端同步。记住始终使用 --force-with-lease 进行安全的强制推送,并在重要操作前做好备份。


最后更新时间:2024年 适用版本:Git 2.x+ 操作环境:Windows PowerShell / Linux Terminal / macOS Terminal

Released under the MIT License.