← 上一章:使用 GitHub 免費製作個人網站 下一章:Git Flow 是什麼?為什麼需要這種東西? →
【冷知識】一定要有 GitHub 才能得到別人更新的檔案嗎?
大部份人的觀念,檔案如果沒有上傳到 GitHub,其它人是要怎麼更新?難道是要用 Email 寄來寄去嗎?
嗯,你猜對了,雖然現在有 GitHub 很方便沒錯,只要 Push、Pull 幾個簡單的指令檔案就同步,但在以前的時候的確就是用 Email 來寄送更新檔案。
製作更新檔
來試一下怎麼製作所謂的「更新檔(Patch)」。假設目前的歷史紀錄是這樣:
$ git log --oneline
fd7cd38 (HEAD -> master, origin/master, origin/HEAD) Update about.html
2eb8fea add readme
953cbd9 update info page
15202a1 add info page
b8ac91f add contact page
9a0233e add about page
1bbf412 update index.html
59dbbc9 init commit
然後我先很快的做了 2 次 Commit,所以現在歷史變這樣:
$ git log --oneline
6e6ed76 (HEAD -> master) add product page
6aba968 update info.html
fd7cd38 (origin/master, origin/HEAD) Update about.html
2eb8fea add readme
953cbd9 update info page
15202a1 add info page
b8ac91f add contact page
9a0233e add about page
1bbf412 update index.html
59dbbc9 init commit
接下來,我使用 git format-patch
指令來產生幾個更新檔
$ git format-patch fd7cd38..6e6ed76
0001-update-info.html.patch
0002-add-product-page.patch
後面的參數 fd7cd38..6e6ed76
表示會產生從 fd7cd38
這個 Commit 之後(不包括本身),直到 6e6ed76
這個 Commit 為止的更新檔。如果是這樣:
$ git format-patch -2
0001-update-info.html.patch
0002-add-product-page.patch
後面那個 -2
表示「請幫我產生最新的兩次 Commit」的更新檔。因為這個指令會直接在當下目錄產生 Patch 檔,如果加上 -o
參數可以指定產生的更新檔的位置:
$ git format-patch -2 -o /tmp/patches
/tmp/patches/0001-update-info.html.patch
/tmp/patches/0002-add-product-page.patch
使用更新檔
要使用 format-patch
指令產出的修正檔,使用的是 git am
指令:
$ git am /tmp/patches/*
Applying: update info.html
Applying: add product page
你可以一次使用一個更新檔,或是像這樣一口氣把剛剛產出在 /tmp/patches
目錄的更新檔全部用上,Git 會依據檔案的名字依序一個一個套在現有的專案上了。
Comments