「Git」合并多个 Commit
2017-05-30 00:29
162 查看
在使用 Git 作为版本控制的时候,我们可能会由于各种各样的原因提交了许多临时的 commit,而这些 commit 拼接起来才是完整的任务。那么我们为了避免太多的 commit 而造成版本控制的混乱,通常我们推荐将这些 commit 合并成一个。
首先假设我们有3个 commit
![](http://upload-images.jianshu.io/upload_images/228805-ffd461efeb8a26a2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
git-log-origin.png
我们需要将2dfbc7e8和c4e858b5合并成一个 commit,那么我们输入如下命令
![](http://upload-images.jianshu.io/upload_images/228805-e96334b872909dc4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
git-rebase-i.png
其中,-i的参数是不需要合并的 commit 的 hash 值,这里指的是第一条 commit, 接着我们就进入到vi的编辑模式
![](http://upload-images.jianshu.io/upload_images/228805-fce11005e6ee8e2d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
git-rebase-edit.png
可以看到其中分为两个部分,上方未注释的部分是填写要执行的指令,而下方注释的部分则是指令的提示说明。指令部分中由前方的命令名称、commit hash 和 commit message 组成。
当前我们只要知道pick和squash这两个命令即可。
pick的意思是要会执行这个 commit
squash的意思是这个 commit 会被合并到前一个commit
我们将c4e858b5这个 commit 前方的命令改成squash或s,然后输入:wq以保存并退出
![](http://upload-images.jianshu.io/upload_images/228805-8c742e137feb7ce5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
git-rebase-squash.png
这是我们会看到 commit message 的编辑界面
![](http://upload-images.jianshu.io/upload_images/228805-e0ca7e9d694e3f52.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
git-rebase-commit-message.png
其中, 非注释部分就是两次的 commit message, 你要做的就是将这两个修改成新的 commit message。
![](http://upload-images.jianshu.io/upload_images/228805-7bb2a59daa90975c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
git-rebase-commit-message-combination.png
输入wq保存并推出, 再次输入git log查看 commit 历史信息,你会发现这两个 commit 已经合并了。
![](http://upload-images.jianshu.io/upload_images/228805-aa15aa1014eadbcf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
git-rebase-log-new.png
注意事项:如果这个过程中有操作错误,可以使用git rebase –abort来撤销修改,回到没有开始操作合并之前的状态。
合并Git中第一个Root的commit的方法:
$ git rebase -i –root
首先假设我们有3个 commit
![](http://upload-images.jianshu.io/upload_images/228805-ffd461efeb8a26a2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
git-log-origin.png
我们需要将2dfbc7e8和c4e858b5合并成一个 commit,那么我们输入如下命令
![](http://upload-images.jianshu.io/upload_images/228805-e96334b872909dc4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
git-rebase-i.png
其中,-i的参数是不需要合并的 commit 的 hash 值,这里指的是第一条 commit, 接着我们就进入到vi的编辑模式
![](http://upload-images.jianshu.io/upload_images/228805-fce11005e6ee8e2d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
git-rebase-edit.png
可以看到其中分为两个部分,上方未注释的部分是填写要执行的指令,而下方注释的部分则是指令的提示说明。指令部分中由前方的命令名称、commit hash 和 commit message 组成。
当前我们只要知道pick和squash这两个命令即可。
pick的意思是要会执行这个 commit
squash的意思是这个 commit 会被合并到前一个commit
我们将c4e858b5这个 commit 前方的命令改成squash或s,然后输入:wq以保存并退出
![](http://upload-images.jianshu.io/upload_images/228805-8c742e137feb7ce5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
git-rebase-squash.png
这是我们会看到 commit message 的编辑界面
![](http://upload-images.jianshu.io/upload_images/228805-e0ca7e9d694e3f52.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
git-rebase-commit-message.png
其中, 非注释部分就是两次的 commit message, 你要做的就是将这两个修改成新的 commit message。
![](http://upload-images.jianshu.io/upload_images/228805-7bb2a59daa90975c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
git-rebase-commit-message-combination.png
输入wq保存并推出, 再次输入git log查看 commit 历史信息,你会发现这两个 commit 已经合并了。
![](http://upload-images.jianshu.io/upload_images/228805-aa15aa1014eadbcf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
git-rebase-log-new.png
注意事项:如果这个过程中有操作错误,可以使用git rebase –abort来撤销修改,回到没有开始操作合并之前的状态。
合并Git中第一个Root的commit的方法:
$ git rebase -i –root
相关文章推荐
- 「Git」合并多个 Commit
- 「Git」合并多个 Commit
- git cherry-pick合并某个commit
- git合并特定commit到指定分支
- (转)git合并多个commit
- git commit 合并
- git只合并某一个分支的某个commit
- git合并多个commit的方法: git rebase -i
- git合并commit方法
- git合并远程仓库commit
- Git怎样合并最近两次commit
- git 合并分支出现 Please enter a commit message to explain why this merge is necessary.
- git如何合并某次提交命令到分支--git cherry-pick <commit id>
- Git开发时多分支防止多次提交版本线,使用cherry-pick、合并commit实现多次修改关联iusses
- git如何合并只有两个commit到一个?
- git 合并某个提交commit到指定的分支上
- 如何合并git的多条commit
- git rebase 合并多个 Commit
- git的操作(拉代码到本地/commit到本地/pull/push到远程/新建分支/合并分支/)
- git合并分支或者push时,报错:“Please enter a commit message to explain why this merge is necessary,especi”的解决办法