对于一个test 工程 git log 看其提交的过程:
commit 9fdd76eb5fd06b1b7f2af6800dc13e51099c40d9
Author: ShichaoXu <gudujianjsk@gmail.com>
Date: Tue Dec 31 17:13:24 2013 +0800
printf hello world
commit a648e0564c0802267edc774c010956b343e6a844
Author: ShichaoXu <gudujianjsk@gmail.com>
Date: Tue Dec 31 17:12:22 2013 +0800
add second line
commit 808d68dee51db0c3e64301f43be3c8b8a3808f5a
Author: ShichaoXu <gudujianjsk@gmail.com>
Date: Tue Dec 31 17:11:58 2013 +0800
add first line
commit 3c5fef11eb9389f3575f8a11dda2deb3b79aa668
Author: ShichaoXu <gudujianjsk@gmail.com>
Date: Tue Dec 31 17:11:16 2013 +0800
add test.c #include <stdio.h>
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 <gudujianjsk@gmail.com>
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 <gudujianjsk@gmail.com>
Date: Tue Dec 31 18:03:31 2013 +0800
add a program--printf hello world
commit 3c5fef11eb9389f3575f8a11dda2deb3b79aa668
Author: 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 总结:
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^ 制作补丁
版权声明:本文为GZgengzhen原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。