gpt4 book ai didi

git - 在进行软重置时如何告诉 git 包含我的 merge 提交?

转载 作者:行者123 更新时间:2023-12-05 06:32:00 24 4
gpt4 key购买 nike

我经常发现自己想要从我的本地存储库中压缩两个或多个提交。我这样做的策略是从软重置开始,然后提交所有重置的更改。

对于软重置,我使用以下命令:

git reset --soft HEAD~n

其中 n 是我要重置的提交数。如果我没有将 merge 提交包括在我想要重置的提交数量中,这就可以正常工作——例如,如果我在我当前的分支上提交了四次并且想要软重置 HEAD~4。

但是,假设在我的 4 次提交之后,我将另一个分支 merge 到我当前的分支上。 Git 隐式提交 merge 更改,并在我执行 git 日志时显示。现在,如果我想软重置回 HEAD~5(4 次提交 + merge 提交),除了我打算重置的 4 次提交之外,git 将忽略 merge 提交并重置下一个最新的非 merge 提交.本质上,我应该重置回 HEAD~4 - git 在重置时似乎忽略了 merge 提交。

为什么 Git 会这样?我如何将这些 merge 提交包含在软重置中?

(举个例子:我按时间顺序提交了 A-B-C-D-E-F,F 是 merge 提交。git reset --soft HEAD~4 会将分支重置为 A:提交 BCDE 已重置,提交 F 不包含在 4.)

最佳答案

嗯,这不是因为 git 忽略了 merge 提交。这是因为 ~^ 在 Git 中是如何工作的。

~n 表示通过第一个父级在层次结构中上升 n 级。如果将其指定为 ^n,则表示转到 n th 父级,从左边开始。

如果我们在您的 git 存储库(您给出的示例)中运行 git log --graph --pretty=oneline,我们可能会得到如下内容:

*   da497fa213169e75b9cec382e28561d5e56f6daf (HEAD -> master) f (merge)
|\
| * aaa519bce409d0fb5e187dff6ed82d73d7cd437b (Dev) e
|/
* f537237e48fc7218af288ddc91a02c1e24ea1887 d
* 2c41ee71ee7b9b450cd10eab685e0007fe92b688 c
* 411c96c85a2e34bf798cab5c0e6f4532a5ebfe35 b
* c9d38077a5704df382b0fd0d83d4fcdf7c408f23 a

请注意提交 f 有两个父项(由于 merge 提交)。现在当你说 HEAD~4 时,它会在 HEAD 之后的层次结构中从左开始寻找 4 个提交,即 b。 (它不会占用 e,因为它在 fsecond parent 中。)

您可以使用 git rev-parse 命令来解析并获取特定的提交 ID。

例如:如果您运行 git rev-parse HEAD~4,您将看到它返回 a 的提交 ID。

在我看来,您不必担心这一点,因为最终,git 会将您的分支重置为给定的提交 ID。但是如果你想重置你的分支以提交 e,现在你需要告诉它访问它的正确方法。

所以你可以告诉它,选择 HEAD 的第二个父级,然后重置为那个。

那等于:HEAD^2

你也可以将它扩展到 ae,如果你给出你的重置命令:

git reset --soft HEAD^2~3

但我认为,您的情况不需要这样做。

这是对上述内容的一个很好的表示,取自 git rev-parse 文档。

G   H   I   J
\ / \ /
D E F
\ | / \
\ | / |
\|/ |
B C
\ /
\ /
A

A = = A^0
B = A^ = A^1 = A~1
C = A^2 = A^2
D = A^^ = A^1^1 = A~2
E = B^2 = A^^2
F = B^3 = A^^3
G = A^^^ = A^1^1^1 = A~3
H = D^2 = B^^2 = A^^^2 = A~2^2
I = F^ = B^3^ = A^^3^
J = F^2 = B^3^2 = A^^3^2

https://git-scm.com/docs/git-rev-parse/1.8.0#_specifying_revisions

希望对您有所帮助:)

关于git - 在进行软重置时如何告诉 git 包含我的 merge 提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51591873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com