高级篇–第四关
本文最后更新于47 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

1. 初始状态分析

  • 当前分支local 分支(local* 表示当前所在分支),main 指向 c1pushed 指向 c2local 指向 c3
  • 提交历史c0 → c1 分叉为 pushedc2)和 localc3)。
  • 目标结构:
    • 需撤销 c3local 分支的提交)或 c2pushed 分支的提交);
    • 最终保留 c0 → c1 → c2'c2'c2 的调整版),local 合并到 mainpushed 指向 c2'

2. 核心概念:撤销变更的两种方式

  • git reset:直接 “回退” 分支指针,丢弃提交(危险,会丢失历史,适合本地未推送的提交)。
    • 语法:git reset <提交哈希>(默认 --mixed,移动指针 + 保留工作区修改);git reset --hard <提交哈希>(强制回退,丢弃修改)。
  • git revert:创建新提交 “抵消” 旧提交的修改(安全,保留历史,适合已推送的提交)。
    • 语法:git revert <提交哈希>(生成新提交,反转旧提交的修改)。

3. 通关步骤(分阶段执行)

阶段 1:撤销 local 分支的 c3 提交(用 git reset

当前 local 分支指向 c3,目标需移除 c3,可通过 git reset 回退到 c1local 的父提交)。

执行命令:

bash

 git reset c1
  • 作用:
    • local 分支指针从 c3 强制回退到 c1
    • 工作区和暂存区的修改被丢弃(--hard 模式),local* 指向 c1

阶段 2:调整 pushed 分支(用 git revertreset

目标中 pushed 需指向 c2'(调整后的 c2),假设 c2 是已推送的提交,用 git revert 更安全:

  1. 切换到 pushed 分支:bash git checkout pushed
    • 作用:HEAD 依附到 pushed 分支(指向 c2)。
  2. 执行 git revert c2:bash git revert c2
    • 作用:生成新提交 c2',反转 c2 的修改,pushed 分支指向 c2'(结构:c0 → c1 → c2 → c2')。

4. 关键知识点延伸

  • reset vs revert 选择:
    • 本地未推送的提交:用 git reset 快速回退(如 local 分支的 c3,未推送到远程)。
    • 已推送的提交:用 git revert 生成新提交抵消(如 pushed 分支的 c2,已推送到远程,避免队友冲突)。
  • 实际场景:
    • 开发中误提交本地代码:git reset --hard HEAD^ 回退。
    • 线上环境发现 bug 提交:git revert <提交哈希> 安全修复。

简单说,这关的核心是 “根据提交是否推送,选择 resetrevert 撤销变更”,掌握 Git 中安全撤销历史的两种策略,避免代码丢失或协作冲突 。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇