多个commit 合并为一个patch
来源:互联网 发布:知满天面试班怎么样 编辑:程序博客网 时间:2024/06/06 03:02
有时候开发一个功能需要commit 很多次才能有一个比较精简的版本。 但是此时只允许打一个patch,如果这样就要把这几个commit 信息合并。
可以通过git reset + git merge 命令来搞定。
对于一个test 工程 git log 看其提交的过程:
commit 9fdd76eb5fd06b1b7f2af6800dc13e51099c40d9Author: ShichaoXu <gudujianjsk@gmail.com>Date: Tue Dec 31 17:13:24 2013 +0800 printf hello worldcommit a648e0564c0802267edc774c010956b343e6a844Author: ShichaoXu <gudujianjsk@gmail.com>Date: Tue Dec 31 17:12:22 2013 +0800 add second linecommit 808d68dee51db0c3e64301f43be3c8b8a3808f5aAuthor: ShichaoXu <gudujianjsk@gmail.com>Date: Tue Dec 31 17:11:58 2013 +0800 add first linecommit 3c5fef11eb9389f3575f8a11dda2deb3b79aa668Author: ShichaoXu <gudujianjsk@gmail.com>Date: Tue Dec 31 17:11:16 2013 +0800 add test.c
经过第四次commit之后文件内容如下:
#include <stdio.h>int main(){printf("hello world\n");return 0;}
首先创建一个新的分支 dev (原来分支是master)
$ git checkout -b devSwitched to a new branch 'dev'
$ git branch * dev master
再使用git reset 命令彻底回退到某个版本,这里回退到第一次commit之后:
$ git reset --hard 3c5fef11eb9389f3575f8a11dda2deb3b79aa668HEAD is now at 3c5fef1 add test.c
此时git log 发现后面3次commit已经没有了:
$ git log commit 3c5fef11eb9389f3575f8a11dda2deb3b79aa668Author: ShichaoXu <gudujianjsk@gmail.com>Date: Tue Dec 31 17:11:16 2013 +0800 add test.c同时first.c 文件内容也为空。
再使用git merge:
$ git merge master --squashUpdating 3c5fef1..9fdd76eFast-forwardSquash commit -- not updating HEAD first.c | 7 +++++++ 1 file changed, 7 insertions(+)
--squash选项的含义是:本地文件内容与不使用该选项的合并结果相同,但是不保留待合并分支上的历史信息,也不提交、不移动HEAD,因此需要一条额外的commit命令。其效果相当于将another分支上的多个commit合并成一个,放在当前分支上,原来的commit历史则没有拿过来。
判断是否使用--squash选项最根本的标准是,待合并分支上的历史是否有意义。
再编辑一下commit信息:
$ git commit -m "add a program--printf hello world"[dev 50dc073] add a program--printf hello world 1 file changed, 7 insertions(+)
git log :
$ git log commit 50dc07351f136f5855b0d0ee3078f9192a58838bAuthor: ShichaoXu <gudujianjsk@gmail.com>Date: Tue Dec 31 18:03:31 2013 +0800 add a program--printf hello worldcommit 3c5fef11eb9389f3575f8a11dda2deb3b79aa668Author: ShichaoXu <gudujianjsk@gmail.com>Date: Tue Dec 31 17:11:16 2013 +0800 add test.c
此时dev 分支的first.c 文件与 master 分支一样。
可以用 git format-patch 制作补丁
$ git format-patch HEAD^0001-add-a-program-printf-hello-world.patch
关于git merge 可以参考如下链接:
http://blog.csdn.net/hudashi/article/details/7664382
0 0
- 多个commit 合并为一个patch
- 多个commit 合并为一个patch
- 多个commit 合并为一个patch
- Git: 合并几个commit为一个commit
- Git 上多次commit 合并成一个 patch
- squash commit合并多个commit
- git合并多个commit压缩成一个点
- Git合并多个commit
- git 合并多个patch
- git rebase 合并多个 Commit
- 「Git」合并多个 Commit
- Git——合并多个commit
- Git使用rebase合并多个commit
- 「Git」合并多个 Commit
- 「Git」合并多个 Commit
- Git命令合并多个Commit
- AD merge patch(admrgpch)合并多个Patch
- 合并分解多个可执行文件为一个文件
- 常用短信sp号头介绍
- array('name', 'unique'),
- Svn清理方法
- WAITEVENT: "library cache pin" Reference Note (文档 ID 34579.1)
- VM里ubuntu扩大空间
- 多个commit 合并为一个patch
- 操作系统进程同步三大问题:生产者消费者,哲学家进餐,读者写者问题
- 请应用apk不在系统中显示出来
- 打开和关闭Oracle Flashback
- sicily 1798.Aclie and Bob
- java中判断字符串是否为数字的三种方法
- 移动web开发经验总结
- C语言linux下实现多语言以及错误处理
- mysql存储过程参数应该注意