如何利用git製作和提交patch

2021-08-11 16:58:19 字數 2725 閱讀 6295

不過在git中,我們沒有必要直接使用diff和patch來做補丁,這樣做既危險又麻煩。git提供了兩種簡單的patch方案。一是用git diff生成的標準patch,二是git format-patch生成的git專用patch

。我們可以首先用git diff製作乙個patch。本文示例的工作目錄裡最初有乙個檔案a,內容是「this is the file a.」,放置在master分支中。為了修改**,我們一般的做法是建立乙個新分支:

sweetdum@sweetdum-asus:~/gitex$ git branch fix

sweetdum@sweetdum-asus:~/gitex$ git checkout fix

switched to branch 'fix'

接下來我們在a檔案裡面追加一行,然後執行git diff。

sweetdum@sweetdum-asus:~/gitex$ echo 'fix!!

!'>;>a

sweetdum@sweetdum-asus:~/gitex$ git diff

diff --git a/a b/a

index 4add65f..0d295ac 100644

--- a/a

+++ b/a

@@ -1 +1,2 @@

this is the file a.

+fix!!!

我們看到了git diff的輸出,這是乙個非常典型的patch式diff。這樣我們可以直接把這個輸出變為乙個patch:

sweetdum@sweetdum-asus:~/gitex$ git commit -a -m "fix"

[fix b88c46b] fix

1 files changed, 1 insertions(+), 0 deletions(-)

sweetdum@sweetdum-asus:~/gitex$ git diff master > patch

sweetdum@sweetdum-asus:~/gitex$ git checkout master

switched to branch 'master'

看,現在我們在patch分支中應用了這個補丁,我們可以把patch分支和fix比對一下,結果肯定是什麼也沒有,說明patch分支和fix分支完全一樣。patch應用成功。即使有多個檔案git diff 也能生成乙個patch。

我們同樣用上面那個例子的工作目錄,這次,我們在fix分支中的a新增了新行之後,用git format-patch生成乙個patch。

sweetdum@sweetdum-asus:~/gitex$ git checkout fix

switched to branch 'fix'

sweetdum@sweetdum-asus:~/gitex$ echo 'fix!!!'>>a

sweetdum@sweetdum-asus:~/gitex$ git commit -a -m "fix1"

[fix 6991743] fix1

1 files changed, 1 insertions(+), 0 deletions(-)

sweetdum@sweetdum-asus:~/gitex$ git format-patch -m master

0001-fix1.patch

git format-patch的-m選項表示這個patch要和那個分支比對。現在它生成了乙個patch檔案,我們看看那是什麼:

sweetdum@sweetdum-asus:~/gitex$ cat 0001-fix1.patch

from 6991743354857c9a6909a253e859e886165b0d90 mon sep 17 00:00:00 2001

from: sweetdumplings

date: mon, 29 aug 2011 14:06:12 +0800

subject: [patch] fix1

---a |    1 +

1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/a b/a

index 4add65f..0d295ac 100644

--- a/a

+++ b/a

@@ -1 +1,2 @@

this is the file a.

+fix!!!

--1.7.4.1

看,這次多了好多東西,不僅有diff的資訊,還有提交者,時間等等,仔細一看你會發現,這是個e-mail的檔案,你可以直接傳送它!這種patch,我們要用git am來應用。

在提交了補丁之後,我們可以再看看目前檔案a的情況:

sweetdum@sweetdum-asus:~/gitex$ cat a

this is the file a.

fix!!!

果然,多了乙個fix!!!

不過要注意的是,如果master與fix分支中間有多次提交,它會針對每次提交生成乙個patch。

提交補丁到郵件列表:

sweetdum@sweetdum-asus:~/gitex$ git send-email --to --cc

注意:git send-email在很多機器上沒有預設安裝,需要進行手動安裝

總結一下,利用git format-patch製作補丁大概有以下步驟:1)新建分支  2)在新建的分支上進行相關修改  3)提交修改到本地資料庫   4)針對上乙個支生成補丁5)另外新建分支,驗證補丁6)提交補丁到郵件列表

如何利用git製作和提交patch

不過在git中,我們沒有必要直接使用diff和patch來做補丁,這樣做既危險又麻煩。git提供了兩種簡單的patch方案。一是用git diff生成的標準patch,二是git format patch生成的git專用patch 我們可以首先用git diff製作乙個patch。本文示例的工作目錄...

網線如何製作和如何使用?

網線製作是搞網路的人的必修課,也是最為基礎的實戰專案。網線製作方法有很多,我們在此簡單的製作一下現在出現最多的rj45通用8針網線製作方法。網線做法有兩種國際標準,分別是eia tia568a和eia tia568b。兩種標準對應的線序如下 正確檢視網線線序的方法為 水晶頭彈片朝下,且有水晶彈片的一...

patch和git製作和應用補丁

1 處理單個檔案補丁的方法 產生補丁 diff un from file to file to file.patch 打補丁 patch p0 to file.patch 取消補丁 patch re p0 to file.patch 2 對整個資料夾打補丁的情況 產生補丁 diff unr from...