Git:重置的影响——对未来合并的影响

Git:重置的影响——对未来合并的影响,git,merge,git-reset,Git,Merge,Git Reset,我们不小心将sha XXX委托给了分支机构A而不是B A: VVV-WWW-XXX B: VVV-WWW 因此,我们将按照以下步骤将提交从A移动到B: git checkout B git merge A git checkout A git reset --hard HEAD~1 git push --force 这将使我们: A: VVV-WWW B: VVV-WWW-XXX 如果我们在分支机构A上提交YYY,给我们: A: VVV-WWW-YYY B: VVV-WWW-XXX 并将

我们不小心将sha XXX委托给了分支机构A而不是B

A: VVV-WWW-XXX
B: VVV-WWW
因此,我们将按照以下步骤将提交从A移动到B:

git checkout B
git merge A
git checkout A
git reset --hard HEAD~1
git push --force
这将使我们:

A: VVV-WWW
B: VVV-WWW-XXX
如果我们在分支机构A上提交YYY,给我们:

A: VVV-WWW-YYY
B: VVV-WWW-XXX
并将其合并到B中会不会干净地将YYY合并到B中,同时不会恢复B中的XXX,因为XXX在A上是
reset--hard
?合并后我们需要的是:

A: VVV-WWW-YYY
B: VVV-WWW-XXX-YYY

我正在努力解决
reset--hard
对合并行为的影响。我认为重置会擦除提交的任何历史记录,这样合并就可以正常工作,而不会试图从B中删除XXX。

合并的结果将是

                (A)
VVV --- WWW --- YYY
          \         \   (B)
            --- XXX --- ZZZ
其中ZZZ为合并提交,其父级为XXX和YYY。括号中的单个字母表示引用或分支名称,它们只是历史图中沿途的路标

与(git log--graph--decoration--pretty=oneline--abbrev commit--all的一个方便的别名)呈现一样

我使用上面的提交消息来联系您问题中的历史。您的SHA-1对象名称将与上述名称不同

不要想得太多。请记住,git存储树状态的快照,历史谱系来自提交对象。使用锐利的工具git reset--hard删除历史记录,就好像它从未发生过一样,没有留下任何痕迹


像任何锋利的工具一样,
git reset--hard
如果不小心,可能会割伤你。像
rm-rf

那样考虑一下,合并的结果将是

                (A)
VVV --- WWW --- YYY
          \         \   (B)
            --- XXX --- ZZZ
其中ZZZ为合并提交,其父级为XXX和YYY。括号中的单个字母表示引用或分支名称,它们只是历史图中沿途的路标

与(git log--graph--decoration--pretty=oneline--abbrev commit--all的一个方便的别名)呈现一样

我使用上面的提交消息来联系您问题中的历史。您的SHA-1对象名称将与上述名称不同

不要想得太多。请记住,git存储树状态的快照,历史谱系来自提交对象。使用锐利的工具git reset--hard删除历史记录,就好像它从未发生过一样,没有留下任何痕迹


像任何锋利的工具一样,
git reset--hard
如果不小心,可能会割伤你。想象一下,就像将头/分支指针移动到另一个提交一样。它不会对存储库或任何未来操作产生任何影响


您是正确的,将来的合并将完全相同,无论您是否进行了一次提交,您都可以重置。

reset
只是将头/分支指针移动到另一次提交。它不会对存储库或任何未来操作产生任何影响

您是正确的,将来的合并将完全一样工作,无论您是否进行了重新设置