如何判断 git 两次提交相同?

How to tell git that two commits are the same?

目前我有两个分支,命名为A和B:

    B1-...many dirty checkouts...-B2
   /
--O-A1-A2-......................-A3

目前,B2 和 A3 相同(git diff A B 给出空输出)。

现在的问题是,这个状态是通过 A 的部分签出达到的。即很多次 git checkout -- dir1 dir2... 发生而不是 git merge.

简单地将B合并到A完全废了A,这是不可能的。

我不想失去B的历史。

我应该告诉 git,分支 B 上的 git merge A 不应该做任何事情。

当然我可以简单地用A3替换B2,但在这种情况下我会丢失B的历史。

有可能吗?

我找到了解决方案:

  1. 我用git checkout B结帐B。

  2. 我用 git merge A 将 A 合并到 B 中。现在B在本地处于垃圾状态。

  3. 但现在我使用 git checkout remotes/origin/B -- . 进行目录签出。这会将 B 恢复到其所需的状态。

  4. 现在向上推 B (git push --all) 将根据需要更新合并箭头。

git merge 中的不同 策略 通过 -s 选项可能会有所帮助,例如 ours:

   ours
       This resolves any number of heads, but the resulting tree of the
       merge is always that of the current branch head, effectively
       ignoring all changes from all other branches. It is meant to be
       used to supersede old development history of side branches. Note
       that this is different from the -Xours option to the recursive
       merge strategy.

听起来这可能基本上只是按原样采用给定的分支,并创建一个带有附加头的提交作为附加父级;即,您似乎正在尝试做什么。