Git 恢复多个合并并提交到特定的提交状态

问题描述 投票:0回答:1

我知道这个问题已经被问过多次,但要么场景有点不同,要么我无法真正理解它。

基本上,我的 git 历史记录看起来像这样:

Merge A
Commit B
Merge C
Commit D
Commit E
Merge F
Commit G
Commit H <-- What i want

合并 A 目前是最新的,我想恢复 3 次合并和所有提交,直到“H”。

我到底如何按顺序恢复合并请求和提交,以便我的代码现在处于“提交 H”状态?之后我可以将这些恢复推送到原点。

git revert
1个回答
0
投票

TL;博士

git reset --hard my_branch^~^~2^~2

^ 和 ~ 的含义

插入符号 (^) 允许您从合并提交引用父提交。

^ 确定您想要哪位家长;例如,d921970^2 表示“d921970 的第二个父级”。此语法仅适用于具有多个父级的合并提交 — 合并提交的第一个父级来自合并时所在的分支(通常是 master),而合并提交的第二个父级来自该分支已合并(例如,主题)。

波浪号 (~) 允许引用线性历史记录中的父提交。

指第一个父级,因此 HEAD~ 和 HEAD^ 是等价的。当您指定数字时,差异就会变得明显。 HEAD~2 表示“第一个父级的第一个父级”或“祖父母” — 它按照您指定的次数遍历第一个父级

分解命令

  • my_branch^ 引用分支的 HEAD 提交的第一个父级(合并提交 A)。
  • my_branch^~ 引用同意合并的父提交 (B) 的上一个提交 (C)。
  • my_branch^~^ 引用倒数第二个合并的第一个父提交 (D)。
  • my_branch^~^~2 引用提交 D 的“祖父母”提交。
  • my_branch^~^~2^ 引用提交 F.
  • my_branch^~^~2^~2 引用提交 H.
© www.soinside.com 2019 - 2024. All rights reserved.