git rebase <SHA1> 似乎没有压缩提交
git rebase <SHA1> does not seem to squash commits
我有两个分支。 branch1
包含最新更改,另一个 (branch2
) 包含远程上的最新更改。
所以我所做的是像这样获得最近的共享提交:
SHA=$(git merge-base branch1 branch2)
然后我运行变基
git checkout branch1
git rebase ${SHA}
我遇到的问题是这似乎并没有压缩 branch1 上的提交。它应该是压缩提交并且我的概要是错误的吗?
当您将 rebase 与交互选项一起使用时,您指定是否压缩提交。
我想知道我是否需要像 rebase 命令那样使用一些选项
git rebase -s ${SHA}
或者也许
git rebase --autosquash ${SHA}
Should it be squashing commits and my synopsis is wrong?
不,默认情况下不会。
从概念上讲,变基就像假装一个分支总是在另一个提交之上。例如,这里我们有一个已过时的功能分支。
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
.
我不建议压缩分支,因为它会丢失对代码考古学有用的重要历史记录(即弄清楚为什么要这样写)。继续压缩只是为了删除诸如错字修复之类的琐碎提交。
相反,我推荐 "feature bubbles"。如上所述重新设置分支的基线,然后 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
的提交消息可用于描述分支的内容。
我有两个分支。 branch1
包含最新更改,另一个 (branch2
) 包含远程上的最新更改。
所以我所做的是像这样获得最近的共享提交:
SHA=$(git merge-base branch1 branch2)
然后我运行变基
git checkout branch1
git rebase ${SHA}
我遇到的问题是这似乎并没有压缩 branch1 上的提交。它应该是压缩提交并且我的概要是错误的吗?
当您将 rebase 与交互选项一起使用时,您指定是否压缩提交。
我想知道我是否需要像 rebase 命令那样使用一些选项
git rebase -s ${SHA}
或者也许
git rebase --autosquash ${SHA}
Should it be squashing commits and my synopsis is wrong?
不,默认情况下不会。
从概念上讲,变基就像假装一个分支总是在另一个提交之上。例如,这里我们有一个已过时的功能分支。
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
.
我不建议压缩分支,因为它会丢失对代码考古学有用的重要历史记录(即弄清楚为什么要这样写)。继续压缩只是为了删除诸如错字修复之类的琐碎提交。
相反,我推荐 "feature bubbles"。如上所述重新设置分支的基线,然后 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
的提交消息可用于描述分支的内容。