0

我有两个分支。branch1有最新的更改,另一个 ( branch2) 包含遥控器上的最新更改。

所以我要做的是我得到最近的共享提交,如下所示:

SHA=$(git merge-base branch1 branch2)

然后我运行 rebase

git checkout branch1
git rebase ${SHA} 

我遇到的问题是,这似乎并没有压缩 branch1 上的提交。它应该是压缩提交并且我的概要是错误的吗?

当您使用带交互选项的 rebase 时,您指定是否压缩提交。

我想知道是否可能需要使用 rebase 命令这样的选项

git rebase -s ${SHA} 

或者可能

git rebase --autosquash ${SHA} 
4

1 回答 1

2

它应该是压缩提交并且我的概要是错误的吗?

不,默认情况下不会。

从概念上讲,变基就像假装一个分支总是在另一个提交之上。例如,这里我们有一个已经过时的特性分支。

A - B - C - D - E [master]
         \
          F - G - H [feature]

我们可以git merge master,但是会有混乱的合并提交。相反,我们可以重写feature,就好像它总是在 `master.

  • git checkout feature
  • git rebase master

现在我们有...

                  F1 - G1 - H1 [feature]
                 /
A - B - C - D - E [master]
         \
          F - G - H

请注意,旧分支仍然存在,最终会被清理干净。


相反,您正在寻找的是git merge --squash.

我不建议压缩分支,因为它会丢失对代码考古有用的重要历史记录(即弄清楚为什么事情是这样写的)。仅在删除诸如拼写错误之类的琐碎提交时才继续压缩。

相反,我会推荐“功能气泡”。然后像上面那样重新设置分支git merge --no-ff(这会迫使 Git 合并而不是快进)。这导致...

                  F1 - G1 - H1
                 /            \
A - B - C - D - E ------------ I [master]

你得到线性历史(git log将显示 I, H1, G1, F1, E, D, ...),你保留了详细的提交信息,F1、G1 和 H1 是相关的,提交信息I可以用来描述分支是关于什么的。

于 2016-12-21T03:10:11.430 回答