比较git合并后的分支与--squash

比较git合并后的分支与--squash,git,git-merge,git-squash,Git,Git Merge,Git Squash,我有一个父分支a和一个子分支B。在分支B中,我有两个单独的提交。我像这样把树枝B和壁球合并在一起 git merge --squash B 当我比较分支A和分支B时: git log A..B 它将来自分支B的两个提交显示为未合并。如何将其与父分支A的压缩提交进行比较?因此,它可以在两个分支之间获得相同的响应 谢谢引用,--squash的意思是: 生成工作树和索引状态,就像发生了真正的合并一样(合并信息除外),但不实际进行提交或移动头,也不记录$GIT\u DIR/merge\u头以使下一

我有一个父分支a和一个子分支B。在分支B中,我有两个单独的提交。我像这样把树枝B和壁球合并在一起

git merge --squash B 
当我比较分支A和分支B时:

git log A..B
它将来自分支B的两个提交显示为未合并。如何将其与父分支A的压缩提交进行比较?因此,它可以在两个分支之间获得相同的响应

谢谢

引用,
--squash
的意思是:

生成工作树和索引状态,就像发生了真正的合并一样(合并信息除外),但不实际进行提交或移动
,也不记录
$GIT\u DIR/merge\u头
以使下一个
GIT commit
命令创建合并提交。这允许您在当前分支上创建一个提交,其效果与合并另一个分支相同(如果是八达通,则为多个分支)

换句话说,在您
git提交
结果之后,您只需要进行普通提交,而不是合并提交。与此普通提交相关联的树—如果签出它,则您在工作目录中获得的内容—与您通过执行合并将获得的树相匹配,但不会记录实际的合并

根据您描述的设置,您在运行
git merge--squash B
之前已经完成了以下步骤:

...- o         <-- A
      \
       o - o   <-- B
请注意,最新的提交
*
与专门位于分支
B
上的两个提交之间没有提交图连接。commit
*
的树与通过常规合并得到的树相同,但commit图不同:真正的合并应该是这样的:

...- o ----- *
      \     /
       o - o
(我在这里省略了分支标签,以强调这不是您实际拥有的)


点-点表示法
A..B
要求“可从
B
访问的提交,减去可从
A
访问的提交”。该图如下所示(与上面的一些图相同,只是为了清晰起见在此处重复):


…-o----------*有没有办法只进行压缩提交?没有。这里的关键点是,
git merge--squash
不会进行合并提交(它根本不会进行任何提交!),因此,后续手动提交与您所做的任何其他提交没有任何区别。(您可以确保为此类提交提供一个特殊的提交消息字符串,然后搜索您自己的特殊字符串,但这要求您在最终希望找到此类提交之前遵守自定义协议。)
...- o ----- *
      \     /
       o - o
...- o ----- *   <-- HEAD=A
      \
       o - o     <-- B