Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 恢复合并时如何查找分支编号?_Git_Git Merge_Git Revert - Fatal编程技术网

Git 恢复合并时如何查找分支编号?

Git 恢复合并时如何查找分支编号?,git,git-merge,git-revert,Git,Git Merge,Git Revert,我的提交历史记录如下所示: A - B - C - D - E \ / X - Y 分支ABCDE是master,分支XY是另一个分支(比如test),而D是合并提交头部现在位于E。我需要使用git reset--hard,仅使用git revert,将我的工作目录返回到A的状态,前提是不。据我所知,在这种情况下,这可以通过两种方式实现: 第一种方式: git revert --no-commit <SHA1(E)> git revert -m 1 -

我的提交历史记录如下所示:

A - B - C - D - E
     \     /
      X - Y
分支
ABCDE
master
,分支
XY
是另一个分支(比如
test
),而
D
是合并提交<代码>头部现在位于
E
。我需要使用
git reset--hard
,仅使用
git revert
,将我的工作目录返回到
A
的状态,前提是。据我所知,在这种情况下,这可以通过两种方式实现:

第一种方式:

git revert --no-commit <SHA1(E)>
git revert -m 1 --no-commit <SHA1(D)>
git revert --no-commit <SHA1(C)>
git revert --no-commit <SHA1(B)>
git commit -m "Reverted to state A"
git revert——不提交
git revert-m1——不提交
git revert——不提交
git revert——不提交
git提交-m“已恢复到状态A”
第二种方式:

git revert --no-commit <SHA1(E)>
git revert -m 2 --no-commit <SHA1(D)>
git revert --no-commit <SHA1(Y)>
git revert --no-commit <SHA1(X)>
git revert --no-commit <SHA1(B)>
git commit -m "Reverted to state A"
git revert——不提交
git revert-m2——不提交
git revert——不提交
git revert——不提交
git revert——不提交
git提交-m“已恢复到状态A”
一个绊脚石是
git revert-m
。在本例中,我假设
1
允许沿着分支
master
,以及
2
-沿着分支
测试继续还原链


问题是:我如何真正知道哪个数字表示哪个分支?

您可以检查合并提交以查看它的父级是谁:

git show <SHA1(D)>
更新:我在仔细阅读一些旧资料,发现我给出的答案完全不正确。如果您执行上述操作,您将不会获得状态A,但您将获得您不想要的弗兰肯斯坦:

A - C' - D' - E'
 \     /
  X - Y
这相当于你得到的,而这根本不是你想要的。要做到这一点并完全保存您的历史,只有一种方法:

git revert HEAD              # reverts E, labeled as E' below
git revert -m 1 <SHA1(D)>    # reverts D, labeled as D' below
git revert HEAD              # reverts C, labeled as C' below
git revert HEAD              # reverts B, labeled as B' below
这种方法会让你得到你想要的东西,并保存每一段历史@Kaz和@torek的方法效率更高,也不太冗长,如果你不想再次引入
X
Y
,那么我推荐其中一种解决方案;但是,如果您关心的是
X
Y
,那么它们可能会使重新引入主分支变得更加困难。还原每一个片段可以重新引入
X
Y
,而无需重新编写/C&P代码,如果
X
Y
是大的更改,或者如果你想保持最准确的历史记录(我倾向于这样),这是一个很有吸引力的选择

要重新引入
X
Y
,应执行以下操作:

git revert D'

这可能会产生合并冲突,特别是如果您不同时还原
B'
C'
,但这可能比手动执行
X
Y
要好。Linux Torvalds写道,这可能会对您有所帮助。

您可以检查合并提交,以查看其家长是谁:

git show <SHA1(D)>
更新:我在仔细阅读一些旧资料,发现我给出的答案完全不正确。如果您执行上述操作,您将不会获得状态A,但您将获得您不想要的弗兰肯斯坦:

A - C' - D' - E'
 \     /
  X - Y
这相当于你得到的,而这根本不是你想要的。要做到这一点并完全保存您的历史,只有一种方法:

git revert HEAD              # reverts E, labeled as E' below
git revert -m 1 <SHA1(D)>    # reverts D, labeled as D' below
git revert HEAD              # reverts C, labeled as C' below
git revert HEAD              # reverts B, labeled as B' below
这种方法会让你得到你想要的东西,并保存每一段历史@Kaz和@torek的方法效率更高,也不太冗长,如果你不想再次引入
X
Y
,那么我推荐其中一种解决方案;但是,如果您关心的是
X
Y
,那么它们可能会使重新引入主分支变得更加困难。还原每一个片段可以重新引入
X
Y
,而无需重新编写/C&P代码,如果
X
Y
是大的更改,或者如果你想保持最准确的历史记录(我倾向于这样),这是一个很有吸引力的选择

要重新引入
X
Y
,应执行以下操作:

git revert D'

这可能会产生合并冲突,特别是如果您不同时还原
B'
C'
,但这可能比手动执行
X
Y
要好。Linux Torvalds写道,这可能会对您有所帮助。

您可以检查合并提交,以查看其家长是谁:

git show <SHA1(D)>
更新:我在仔细阅读一些旧资料,发现我给出的答案完全不正确。如果您执行上述操作,您将不会获得状态A,但您将获得您不想要的弗兰肯斯坦:

A - C' - D' - E'
 \     /
  X - Y
这相当于你得到的,而这根本不是你想要的。要做到这一点并完全保存您的历史,只有一种方法:

git revert HEAD              # reverts E, labeled as E' below
git revert -m 1 <SHA1(D)>    # reverts D, labeled as D' below
git revert HEAD              # reverts C, labeled as C' below
git revert HEAD              # reverts B, labeled as B' below
这种方法会让你得到你想要的东西,并保存每一段历史@Kaz和@torek的方法效率更高,也不太冗长,如果你不想再次引入
X
Y
,那么我推荐其中一种解决方案;但是,如果您关心的是
X
Y
,那么它们可能会使重新引入主分支变得更加困难。还原每一个片段可以重新引入
X
Y
,而无需重新编写/C&P代码,如果
X
Y
是大的更改,或者如果你想保持最准确的历史记录(我倾向于这样),这是一个很有吸引力的选择

要重新引入
X
Y
,应执行以下操作:

git revert D'

这可能会产生合并冲突,特别是如果您不同时还原
B'
C'
,但这可能比手动执行
X
Y
要好。Linux Torvalds写道,这可能会对您有所帮助。

您可以检查合并提交,以查看其家长是谁:

git show <SHA1(D)>
更新:我在仔细阅读一些旧资料,发现我给出的答案完全不正确。如果您执行上述操作,您将不会得到状态A,而是会得到F