git 生成patch和使用patch
啰嗦下:發(fā)現(xiàn)自己的blog被轉(zhuǎn)載了,不過沒有注明出處,有點痛并快樂著的感覺。這里正式申明下:轉(zhuǎn)載請注明出處,感謝。如有商用目的請務(wù)必知會本人。
?
????????在android大環(huán)境下工作,遲早都會接觸到git工具,這里說一下本地獲取修改補丁的幾種方式。
????????工作中用到的補丁大致可以分為兩種,一種是patch文件,即補丁文件拿過來利用某些命令將這個補丁打入當(dāng)前代碼中,另外一種是修改前和修改后的文件對比包,這個對比包可以讓我們快速查看到修改點的同時看到修改的上下文。先說說獲取修改前和修改后文件的兩種常用方法。第一種:調(diào)試完成代碼之后,在當(dāng)前倉庫下執(zhí)行如下語句:
????????git stash;
就能恢復(fù)到修改前的狀態(tài),得到修改文件之后,再執(zhí)行:
????????git stash pop;
這又恢復(fù)了修改之后的狀態(tài)了。如果你有多個倉庫需要管理,可以使用repo forall命令幫助執(zhí)行。
????????再說說另外一種方法。有時候修改完代碼之后,不想馬上就提交,可以另外其一個分支,在這個分支上提交,結(jié)束之后再切回原來的分支。一般常用命令如下:
????????repo start name . (注意name之后有一個".",表示當(dāng)前工程。或者使用git checkout -b name 遠程分支名稱)
????????git commit -a
????????git checkout name (或者在新建一個分支)
這兩種方法一般本地團隊使用比較好。如果涉及到跨公司跨地域的交流,建議還是用下面的patch文件方式。
????????個人理解android開發(fā)接觸到的patch,一般可以分為兩種,一種是UNIX下的patch,可以使用git diff或者其他UNIX的diff命令生成(本人只用過git diff命令,后面的看書有提到過但是自己木有用過),一種是git 工具生成的patch,也可以說是git專用的patch,使用git format-patch命令生成。先來看看git diff生成patch的過程。一般常用命令如下:
????????git?diff??>?patch
????????git?diff??--cached >?patch
????????git?diff??branchname --cached >?patch
這個時候當(dāng)前目錄下就會有一個patch文件,這是一個非git環(huán)境也可以使用的patch。對于這種patch,在git上使用要用git apply命令,如下:
????????git apply patch
由于這是一個類似UNIX下更新文件的操作,所以執(zhí)行完上述操作之后,實際上是等于手動修改了文件,還要做一些git commit之類的操作。另外請注意,git apply 是一個事務(wù)性操作的命令,也就是說,要么所有補丁都打上去,要么全部放棄。ProGit上說明在實際打補丁之前,可以先用git apply --check 查看補丁是否能夠干凈順利地應(yīng)用到當(dāng)前分支中:git apply --check patch,如果執(zhí)行完該命令之后沒有任何輸出,表示我們可以順利采納該補丁,接下來就是git上的提交了。
????????在接著說說git format-patch生成的補丁,這是git專用的,也是日常工作中最常接觸到的補丁類型。常用命令如下:
????????1)兩個節(jié)點之間的提交: git format-patch??節(jié)點A???節(jié)點B
????????2)單個節(jié)點: git format-patch -1?節(jié)點A (-n就表示要生成幾個節(jié)點的提交)
????????3)最近一次提交節(jié)點的patch :git format-patch HEAD^ 依次類推……
使用git format-patch命令生成的patch文件,包含了提交的附加信息:比如作者,時間等。再次基礎(chǔ)上使用git am命令即可將此補丁應(yīng)用到當(dāng)前分支。注意應(yīng)用完之后,你會發(fā)現(xiàn)當(dāng)前分支多了一次提交記錄,并且有完整的信息,而不是簡單的修改文件。在對比一下,git diff 和git format-patch生成的patch一個重要不同之處,實際使用中會發(fā)現(xiàn)git diff一次只會生成一個patch文件,不管差別了多少個提交,都是一個;而git format-patch是根據(jù)提交的節(jié)點來的,一個節(jié)點一個patch。
????????補充小技巧:??如果有額外信息需要補充,但又不想放在提交消息中說明以免搞亂了提交說明。可以編輯這些補丁文件,在第一個“---” 行之前添加說明即可。這樣的信息能閱讀,但在執(zhí)行完git am命令之后該節(jié)點的提交信息不回包含上述信息。?
————————————————
版權(quán)聲明:本文為CSDN博主「Andrew這個昵稱」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/maybe_windleave/article/details/8703778
總結(jié)
以上是生活随笔為你收集整理的git 生成patch和使用patch的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 802.11N blockACK
- 下一篇: win10系统上抓包网卡的驱动总是失效怎