我有两个分支。 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}
答案 0 :(得分: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
的提交消息可用于描述分支的内容。