Git 上多次commit 合并成一个 patch |
您所在的位置:网站首页 › git合并多次提交的 › Git 上多次commit 合并成一个 patch |
对于一个test 工程 git log 看其提交的过程: commit 9fdd76eb5fd06b1b7f2af6800dc13e51099c40d9 Author: ShichaoXu Date: Tue Dec 31 17:13:24 2013 +0800 printf hello world commit a648e0564c0802267edc774c010956b343e6a844 Author: ShichaoXu Date: Tue Dec 31 17:12:22 2013 +0800 add second line commit 808d68dee51db0c3e64301f43be3c8b8a3808f5a Author: ShichaoXu Date: Tue Dec 31 17:11:58 2013 +0800 add first line commit 3c5fef11eb9389f3575f8a11dda2deb3b79aa668 Author: ShichaoXu Date: Tue Dec 31 17:11:16 2013 +0800 add test.c经过第四次commit之后文件内容如下: #include int main() { printf("hello world\n"); return 0; } 首先创建一个新的分支 dev (原来分支是master) $ git checkout -b dev Switched to a new branch 'dev' $ git branch * dev master 再使用git reset 命令彻底回退到某个版本,这里回退到第一次commit之后: $ git reset --hard 3c5fef11eb9389f3575f8a11dda2deb3b79aa668 HEAD is now at 3c5fef1 add test.c 此时git log 发现后面3次commit已经没有了: $ git log commit 3c5fef11eb9389f3575f8a11dda2deb3b79aa668 Author: ShichaoXu Date: Tue Dec 31 17:11:16 2013 +0800 add test.c 同时first.c 文件内容也为空。
再使用git merge: $ git merge master --squash Updating 3c5fef1..9fdd76e Fast-forward Squash 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 50dc07351f136f5855b0d0ee3078f9192a58838b Author: ShichaoXu Date: Tue Dec 31 18:03:31 2013 +0800 add a program--printf hello world commit 3c5fef11eb9389f3575f8a11dda2deb3b79aa668 Author: ShichaoXu 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
总结: 1. 基于当前已经修改过的分支 Test 创建新分支 Fix 切换到分支 Fix 2. git log 查看提交记录 假如当前提交记录为:commit 5 commit 4 commit 3 commit 2 commit 1 commit 原始
3. 自己新提交的有五次 使用git reset 命令彻底回退到某个版本 这里回退到commit 原始 git reset --hard 原始 4. git merge Test --squash 5. 再编辑一下commit信息 git commit -m " new message " 6. git log 查看合并好的提交 7. 使用 git format-patch HEAD^ 制作补丁
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |