Git 上多次commit 合并成一个 patch

您所在的位置:网站首页 git合并多次提交的 Git 上多次commit 合并成一个 patch

Git 上多次commit 合并成一个 patch

2024-02-23 21:06| 来源: 网络整理| 查看: 265

对于一个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