Git merge --squash可以保留提交注释吗?

9
有没有一种方法可以在执行合并操作时自动添加所有来自压缩的mybranch提交中的提交注释?
git merge --squash mybranch

为了使单个提交包含来自mybranch的所有提交注释的连接


你可以在功能分支中先压缩,然后在交互式变基期间手动连接或重新排列注释,最后合并压缩的分支。你计划压缩多少个提交? - Tim Biegeleisen
1个回答

17
我认为这就是“git merge --squash”自动执行的操作!只需使用“git commit --no-edit”提交,我认为您将得到所需的结果。在运行“git merge --squash”命令后,我立即在.git/SQUASH_MSG中看到所有的提交消息。您呢?
个人而言,我会将其压缩到主分支中,然后将结果强制推回到我的主题分支。这样,我的最终提交可以通过拉取请求进行代码审查。
实时示例(尝试这些确切的命令,这将使用我的演示服务器,并真正起作用):
git clone http://vm.bit-booster.com/bitbucket/scm/bb/rebase-example-2.git
cd rebase-example-2
git checkout branch
git reset --hard origin/master
git merge --squash origin/branch
git commit --no-edit

git show
commit 74656c51212526af49382c985419244737141217
Author: G. Sylvie Davies <sylvie@bit-booster.com>
Date:   Mon Dec 26 22:07:50 2016 -0800

    Squashed commit of the following:

    commit 3120cbba4e94e0a81eed2f9ff42e7012cca996bf
    Author: G. Sylvie Davies <sylvie@bit-booster.com>
    Date:   Thu Dec 15 18:24:02 2016 -0800

        b2

    commit ccb522334464879b8f39824031c997b57303475d
    Merge: 6b85efb 026bf0c
    Author: G. Sylvie Davies <sylvie@bit-booster.com>
    Date:   Thu Dec 15 18:13:35 2016 -0800

        m

    commit 6b85efbddbb74d49a096bfc54fd4df15e261b72f
    Author: G. Sylvie Davies <sylvie@bit-booster.com>
    Date:   Thu Dec 15 18:12:51 2016 -0800

        b1

在这一点上,我建议执行“git push --force-with-lease”操作,以使这个压缩提交准备好进行代码审查的远程主题分支。
注意:在示例中,我做了一件花哨的事情。实际上,我将其压缩到origin/master而不是本地master,并且我首先执行“git checkout branch”和“git reset --hard origin/master”。这使得我的本地master不受此操作的影响,因此我正在处理的任何内容都不会受到干扰。
我使用的是Git 2.7.4。也许较旧的Git行为不同,我不知道。
如果您想在Web UI中完成所有操作,并且恰好使用Atlassian Bitbucket Server(on-premises版本),则可以安装我的Bit-Booster付费插件,并点击它放在拉取请求上的大“Squash”按钮。它执行完全相同的操作,只是连接非合并提交消息。

enter image description here


我通常不使用 git merge --squash,但在 Git 2.10.1 中进行了测试,发现它的工作方式与之前相同。 - torek
“--no-edit”选项正是我一直在寻找的。不幸的是,这个选项在SourceTree提交中不可用,所以必须在命令行中完成。当从命令行完成后,是否没有办法编辑连接的注释再提交?啊,我尝试了TortoiseGit,它默认连接所有注释,并允许在提交结果之前进行编辑。我正在使用Git 2.10.1.windows.1。 - JonN
尝试省略“--no-edit”。我相信“git commit”会在您的编辑器中预填写相同的内容。但是,如果您确实喜欢使用“--no-edit”,您始终可以使用“git commit --amend”来调整提交消息。 - G. Sylvie Davies
另外,你设置了git编辑器吗?(例如,输出结果为:git config --global --get core.editor) - G. Sylvie Davies

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