git:隐藏分支上的详细提交信息

3
我想知道在git中是否有可能实现这一点。我有一个主分支,时不时会为功能开发创建一个侧分支。当完成后,我会将其合并回到主分支。现在通常情况下,侧分支上的所有提交历史记录都会显示在主分支上。是否有办法使主分支上所有提交记录都显示为一个呢?

为什么你想要这样做呢?提交历史非常重要。如果不重要的话,就在一个补丁中开发整个功能(或者在完成后将系列压缩成一个补丁)。 - Mureinik
你在这里使用Git插件还是只用命令行? - Tim Biegeleisen
@Mureinik,感觉更清爽,如果我没记错的话,ClearCase也是这样做的。 - lang2
1
如果您发布了一个合并提交的示例注释以及您不喜欢它的原因,那将会很有帮助。 - Tim Biegeleisen
@lang2 这方面有什么新消息吗? - Chris Maes
显示剩余3条评论
2个回答

5
$ git checkout master
$ git merge --squash <branch>

文档强调是我的)中得知: --squash
--no-squash
产生一个工作树和索引状态,就像发生了真正的合并(除了合并信息),但实际上并不进行提交、移动HEAD或记录$GIT_DIR/MERGE_HEAD(以使下一条git commit命令创建合并提交)。这允许您在当前分支之上创建单个提交,其效果与合并另一个分支相同(或者在章鱼合并的情况下更多)。
使用--no-squash执行合并并提交结果。此选项可用于覆盖--squash。

1
如果他想把所有的提交合并成一个提交,这确实是更快的解决方案。如果不想这样做,我的答案也允许分开提交。 - Chris Maes

2
假设您在一个“侧分支”上进行了开发:
git checkout -b dev_branch
< do your changes, and commit them >

现在,如果您希望所有提交显示为一个提交,请执行以下操作。如果您想保留所有提交不变,请跳至下一步。
git rebase -i master
< in the interface you should now keep the first commit, and select `squash` for all the successive commits >

现在您想将您的主分支(master branch) 变基(rebase) 到您的侧分支(side branch),并删除该分支:

git checkout master
git rebase dev_branch
git branch -d dev_branch

1
我喜欢使用 git rebase,但我不确定这是否是 OP 想要的。我认为合并会留下一个提交和一个注释,但也许我在这里漏掉了什么。 - Tim Biegeleisen
git rebase 赢了 :). 的确,git merge 会添加一个提交。但是 OP 说他想让“所有提交在主分支上显示为一个”。 - Chris Maes
1
git merge --squash 的结果与运行单个命令完全相同。此外,您可以保留 dev_branch 的原始历史记录。 - Antonio Pérez
你说得对,输出结果与我提出的所有命令一样,除了最后一个(删除分支)。我的解决方案允许他保留dev_branch中的多个提交,如果他愿意的话。 - Chris Maes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接