「Git」合并多个 Commit

作者: _Ryeeeeee | 来源:发表于2015-11-24 12:50 被阅读65623次

在使用 Git 作为版本控制的时候,我们可能会由于各种各样的原因提交了许多临时的 commit,而这些 commit 拼接起来才是完整的任务。那么我们为了避免太多的 commit 而造成版本控制的混乱,通常我们推荐将这些 commit 合并成一个。

首先假设我们有3个 commit

git-log-origin.png

我们需要将 2dfbc7e8c4e858b5 合并成一个 commit,那么我们输入如下命令

git-rebase-i.png

其中,-i 的参数是不需要合并的 commit 的 hash 值,这里指的是第一条 commit, 接着我们就进入到 vi 的编辑模式

git-rebase-edit.png

可以看到其中分为两个部分,上方未注释的部分是填写要执行的指令,而下方注释的部分则是指令的提示说明。指令部分中由前方的命令名称、commit hash 和 commit message 组成。

当前我们只要知道 picksquash 这两个命令即可。

  • pick 的意思是要会执行这个 commit
  • squash 的意思是这个 commit 会被合并到前一个commit

我们将 c4e858b5 这个 commit 前方的命令改成 squashs,然后输入:wq以保存并退出

git-rebase-squash.png

这是我们会看到 commit message 的编辑界面

git-rebase-commit-message.png

其中, 非注释部分就是两次的 commit message, 你要做的就是将这两个修改成新的 commit message。

git-rebase-commit-message-combination.png

输入wq保存并推出, 再次输入git log查看 commit 历史信息,你会发现这两个 commit 已经合并了。

git-rebase-log-new.png

注意事项:如果这个过程中有操作错误,可以使用 git rebase --abort来撤销修改,回到没有开始操作合并之前的状态。

相关文章

  • Git - 合并多个Commit

    1. 概述 在使用 Git 作为版本控制的时候,我们可能会由于各种各样的原因提交了许多临时的 commit,而这些...

  • git合并多个commit

    一共2种方法,方法二比较简单就不演示了。 rebase git log查看需要合并哪些commit git reb...

  • [Git] 合并多个 commit

    在平时开发过程中, 我们可能会有多个相同或相似功能的 commit, 比如增加日志, 修改变量, 如果让这些提交留...

  • 「Git」合并多个 Commit

    在使用 Git 作为版本控制的时候,我们可能会由于各种各样的原因提交了许多临时的 commit,而这些 commi...

  • git多个commit合并

    git多个commit合并 有时候我们本地写代码,因为要拉取同组其他小伙伴的代码,所以需要先把代码commit,或...

  • git 合并多个commit

    1、切换到你的开发分支上 2、git log 查看 3、git rebase -i commit号 注意:这行的意...

  • 「Git」合并多个 Commit

    在使用 Git 作为版本控制的时候,我们可能会由于各种各样的原因提交了许多临时的 commit,而这些 commi...

  • 【Git】合并多个commit

    git rebase -i 5d39ff2 例如: 准备合并 把 e7ba81d(Commit-1)、5756e1...

  • git 合并多个commit

    合并多个commit: 1:查找你要跳转的分支的前一个分支:git log 2:回滚:git reset <分支序...

  • git 多个commit合并

    如果你想合并 47d16cc38d 和 64ea73dd457c,一定注意下面的命令一定要定位到最后一个要合并的c...

网友评论

  • 653d1ebd6d6d:那怎么合并c4e8和f4f9两个commit呢?
  • osborne:学习了,按图示操作的,步骤及提示和图示一样,按步骤是成功了,但是github上的commit记录没有变化
    osborne:git push -f 解决了:smile:
  • 海狩:写的很好,赞赞赞!
  • TorvardsDB:我常用的是 git rebase -i HEAD~3
    斯诺李:谢谢!值得一提的是,git rebase -i HEAD~2 才与博文中 git rebase -i f1f92b 等价。
  • 生气龙:怎么输入wq保存并推出 呢
    TorvardsDB:@哪里有会生气的龙 :wq 等同 :X 等同 ZZ
    生气龙:@TorvardsDB 已经搞定了,:smile:
    TorvardsDB:一样的
  • 5dabb448cbaf:pick:正常选中
    reword:选中,并且修改提交信息;
    edit:选中,rebase时会暂停,允许你修改这个commit(参考这里)
    squash:选中,会将当前commit与上一个commit合并
    fixup:与squash相同,但不会保存当前commit的提交信息
    exec:执行其他shell命令
  • Flippancy:详细,有用 :+1:
  • Xwoder:不错学习了
  • liwb:我也想知道 三个commit点合为一个怎么做,因为当剩下两个commit 点的时候再进行同样的操作,总是出现 Cannot 'squash' without a previous commit 的报错,不能成功,作者要是知道原因麻烦告知以下,先谢谢了
    xlaoyu:@duXing 正解
    死宅程序员:进入 rebase 时 可以指定一个 commit 范围,比如:
    > git rebase -i HEAD~5
    选取最近的5笔 commit
  • ania:如果要合并的是第三个和第二个呢?
  • plusman:其中,-i 的参数是不需要合并的 commit 的 hash 值,这里指的是第一条 commit, 接着我们就进入到 vi 的编辑模式

    - i 应该是指交互模式吧
    5a69d76833fc:@plusman -i, --interactive let the user edit the list of commits to rebase
    -i 和 -i后面的hash地址都是rebase的参数才对吧。
  • ibrucekong:学习了:sunglasses:

本文标题:「Git」合并多个 Commit

本文链接:https://www.haomeiwen.com/subject/eyilhttx.html