Typography

活版印字


  • Home
  • Archive
  • Categories
  • Tags
  •  

© 2020 alincode

Theme Typography by Makito

Proudly published with Hexo

git format-patch

Posted at 2016-03-09 git format-patch 

之前在公司都是做產品,只有一個 repo,不過現在不只維護一個專案。已經不是 git merge,就可以搞定了。

前陣子為了要同步共用的 code 做 sync,研究了一下,有兩個指令可以做到這件事。

一個是 git cherry-pick,另一個則是 git format-patch。

我兩個都試過,但我實在覺得 cherry-pick 對於跨 repo 的指令太繁雜了,所以在這裡介紹 format-patch 的用法。

常用指令

產最後一個 commit 的 patch 出來

1
git format-patch -1

0001-hide-some-menu-for-admin.patch

產指定的patch出來

1
git format-patch -1 <sha>

產最後三個 commit 的 patch 出來

1
git format-patch -3

0001-fixed-reset-password.patch
0002-update-src-from-https.patch
0003-hide-some-menu-for-admin.patch

要記得這部分跟我們平常看 git log --oneline 順序不一樣,0001 是最舊的,0003 是最後一筆 commit。

接下來只有把 xxx.patch 檔,複製到你另一個 repo 的資料夾下。

一次匯入一個patch

1
git am 0001-fixed-reset-password.patch

一次匯入所有patch

1
git am *.patch

結論

由於自動產的 patch 檔名會帶 commit 內容,所以不像用 cherry-pick 用 sha 編號難以辨別,一個不專心就撿錯包了,我通常直接用 format-patch 幾筆一次拉出來,然後再看檔名,把不需要的 patch 砍掉方便又快速。

不過這時候就會對於那種 log 內只寫 0001_fix_bug.patch 的情況,非常感冒…,都不能理解 merge code 人的心酸。

補充

如果想嘗試 git cherry-pick 的話,要先把另一個 repo 加進去,然後做 git fetch other_repo,然後另一個repo東西,就會變成分支,然後你就可以用 cherry-pick 指令去撿了。

Share 

 Previous post: javascript var 作用域 Next post: Facebook Share vs Feed 

© 2020 alincode

Theme Typography by Makito

Proudly published with Hexo