git中有没有合并多个commit并修改提交信息的快捷操作?

比如我最近的3个commit分别为:任务1、任务2、任务3.

现在我想将这3个commit合并为1个commit,并且将这个commit的信息改为“完成所有任务”。

我应该怎样操作?

阅读 1.6k
8 个回答

git merge --squash

头像头饰
唯一丶
    23.1k103741
    美国弗吉尼亚州文特山农场

    想要快捷、易用,那就用 GUI。


    命令行下

    如果是在 HEAD 的几个提交,你可以直接 reset 到 任务1^ 的前一个提交,然后重新 commit。
    假设当前分支为 old,且已经在当前分支。

    或者基于当前分支的 任务1 的前一个提交,新建一个分支(git checkout -b copy1 任务1^),把当前分支的代码合并(git merge --squash old),合并过来后,你现在再提交一次,就可以了。


    当然,前面几个方法的限定就是 任务3 必须是 HEAD 指向的,说白了就是,只能处理最近的几个提交。

    如果是任意位置的提交,那就需要使用 rebase,具体可以搜索 git rebase 合并提交

    git rebase -i HEAD~3

    进去后把你需要修改的那两个靠后commit的操作改成s,然后:wq退出文件,就能进入commit信息的修改界面。最后就能将三个commit合并成一个。

    1. 用命令行相关 squash
    2. 开发工具集成的图形操作界面中,WebStorm为例,可以选择多个 commit,然后使用压缩提交。

    以上,要确保这些关联到的commit没有上传到公共分支

    image.png
    guthubdesktop桌面软件,想当好用,切分支,拉代码,合并commit,cherry pick到别的分支等等

    git commit --amend

    虽然你题目没有提到命令行,我还是要多嘴一句。
    千万不要沉迷命令行。
    了解git命令的内涵就行,日常工作还是GUI爽

    回到题目,我个人喜欢jetbrains系列很大一个原因就是因为它的git体验好
    这个【压缩提交】就是你要的东西
    image.png

    新手上路,请多包涵

    git rebase -i HEAD~3
    进去后把你需要修改的那两个靠后commit的操作改成s,然后:wq退出文件,就能进入commit信息的修改界面。最后就能将三个commit合并成一个。测试

    推荐问题
    宣传栏