2014-10-03 89 views
6

遠程工作時我無法推送,所以我想從尚未推送到我的開發分支上的所有提交中創建一個單一補丁來發送電子郵件。我怎麼做?git從unpushed提交創建補丁

+0

絕對不可能重複[Viewing Unpushed Git Commits](http://stackoverflow.com/questions/2016901/viewing-unpushed-git-commits) – d33tah 2014-10-03 10:37:51

+1

該線程只回答如何查看unpushed提交,沒有說從他們那裏創建一個補丁 – Kosmotaur 2014-10-05 20:29:50

回答

10

git format-patch <commit-ish>爲自指定提交以來所做的每次提交創建一個補丁文件。

因此,要導出所有unpushed提交,簡單地說

git format-patch origin/master -o patches/ 

,他們都將被輸出到patches/目錄。

如果你想有一個單個文件,添加--stdout

git format-patch origin/master --stdout > patches_$(date -I).patch 

這將創建與它所有的補丁名爲patches_2014-10-03.patch文件(或其他日期)。 注意:patch或其他簡單的補丁程序應用程序無法應付生成的文件。它只能與git am一起使用。


旁註:
一個更容易(和更強大的)事情可能是,讓您的回購協議的副本在閃存棒或similiar。然後將拇指驅動器設置爲遙控器(git remote add thumb /media/thumbdrive),然後將其提交給它(git push thumb master),然後返回公司時,從驅動器拉出並推到原點。

+0

謝謝,那就是我正在尋找的 順便說一句,在OS X上'date'事實證明不能識別'-I'選項,所以我只是打電話給我的補丁'foo.patch',幸福的日子 – Kosmotaur 2014-10-05 20:28:42

+0

很高興知道,我已經習慣使用'$(date -I)'遍佈各處:) – cfstras 2014-10-06 08:32:43

3

相反的creating a patch,你可以創建一個bundle(意爲代表的git回購,從中你就能拉的文件)。
就你而言,需要一個incremental bundle

git bundle create ../yourRepo.bundle" --since=x.days.ago --all 

那時數量要擺在那束天更換x:不要害怕把「太邁恩」天在回購:有人從你的包克隆將只得到新的提交,而不是他/她在當地回購中已經擁有的那個。

捆綁包是一個單獨的文件,就像一個補丁,但可以用作Git倉庫:易於複製和易於使用(作爲常規的Git倉庫)。
如果您的唯一用途是通過從遠程回購(您無法直接推送)完成提交來完成本地回購,則這比補丁更容易。