git patch简介

本文简单介绍一下git patch

首先创建包含git的工作目录:

git init git_repo

接着在这个文件夹下创建一个文本文件(a.txt):

aaaa
bbbb
cccc
dddd
eeee
ffff

把这个文件加到git版本控制:

git add a.txt
git commit -m "Initialize a.txt"

接着再开出一个patch分支,剩下的操作都在这个分支上进行:

git checkout -b patch

然后把a.txt文件第二行的bbbb改成bb11

aaaa
bb11
cccc
dddd
eeee
ffff

提交:

git commit -a -m "Modify a.txt"

接下来生成相对于master分支的patch

[root@localhost git_repo]# git format-patch master
0001-Modify-a.txt.patch

看一下0001-Modify-a.txt.patch这个patch文件:

From 9512ec20468586e0632ece9e97e4e89b3a68c40e Mon Sep 17 00:00:00 2001
From: root <root@localhost.localdomain>
Date: Thu, 30 Jul 2015 02:30:45 -0400
Subject: [PATCH 1/3] Modify a.txt

---
 a.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/a.txt b/a.txt
index 1707b56..1ba3da1 100644
--- a/a.txt
+++ b/a.txt
@@ -1,5 +1,5 @@
 aaaa
-bbbb
+bb11
 cccc
 dddd
 eeee
--
2.4.3

重点看一下@@ -1,5 +1,5 @@-1,5表示原来的文件,+1,5表示修改后的文件。1表示起始行号,5表示从起始行号算起,一共包含多少行。下面的-bbbb表示删除原来文件的内容,而+bb11表示修改后文件的内容。

下面切换回master分支:

[root@localhost git_repo]# git checkout master
Switched to branch 'master'

看一下master分支的a.txt

[root@localhost git_repo]# cat a.txt
aaaa
bbbb
cccc
dddd
eeee
ffff

没有任何变化。

接下来merge patch

[root@localhost git_repo]# git am < 0001-Modify-a.txt.patch
Applying: Modify a.txt

再次查看a.txt

[root@localhost git_repo]# cat a.txt
aaaa
bb11
cccc
dddd
eeee
ffff

可以看到patch已经成功地merge进了a.txt