生成和合入patch的两种方式
在平時有代碼移植或合入芯片廠商或板卡商的代碼時,我們就可能要用到打補丁技術。
1. 兩種補丁方案
Git提供了兩種補丁方案,分別patch和diff。
diff
git diff 生成的是UNIX標準補丁.diff文件。只會記錄文件改變的內容,不會帶有commit記錄信息,多個commit可以合并成一個diff文件。
patch
git format-patch生成的是Git專用.patch文件。帶有記錄文件改變的內容和commit記錄信息,每個commit對應一個patch文件。
2. 生成patch文件常用命令
2.1 找到commit id
在生成補丁文件前,一般要通過git log命令找到commit id,如果下圖所示:
2.1 某一筆提交的patch
git format-patch commitID -1例如:
git format-patch 255867fabcf79246d948fadfebe307f8a848bff4 -12.2 某筆提交(包含)之前的幾次提交
git format-patch commitID -n例如:
git format-patch commitID -22.3 某兩筆(包后不包前)提交之間的所有提交
git format-patch commitID1..commitID2例如:
git format-patch 1ac240c4561fab6ce400943edb38e46c792b949a..255867fabcf79246d948fadfebe307f8a848bff4這里有兩點說明下:
1:“包后不包前”,即255867fabcf79246d948fadfebe307f8a848bff4的提交會打成patch,1ac240c4561fab6ce400943edb38e46c792b949a不會打patch
2:“前面的commitID要比后面的commitID早”,即1ac240c4561fab6ce400943edb38e46c792b949a要比后面的255867fabcf79246d948fadfebe307f8a848bff4早提交
如果執行git format-patch 255867fabcf79246d948fadfebe307f8a848bff4…1ac240c4561fab6ce400943edb38e46c792b949a則不會生成patch文件
2.4 某筆提交(不包含)以后所有提交
git format-patch commitID例如:
git format-patch 1ac240c4561fab6ce400943edb38e46c792b949a3. 生成diff文件常用命令
某兩筆(包前包后)提交之間的所有提交
git diff commitID1 commitID2 > patch.diff例如:
git diff 6ad340a4ce0688afffe062c1cef529ecc549ca04 255867fabcf79246d948fadfebe307f8a848bff4 > patch.diff將單個文件做成一個單獨的補丁
git diff testFile > patch將工作區與版本庫的差異做成補丁
git diff --HEAD > patch將暫存區與版本庫的差異做成補丁
git diff --cached > patch4. 合入patch和diff文件的常用命令
檢查patch/diff是否能正常打入
git apply --check file.patch文件或:
git apply --check file.diff文件打入patch/diff
git apply file.patch文件或:
git apply file.diff文件或:
git am file.patch文件4. 解決沖突
如果在合入patch的過程中報錯了,可以使用下面命令:
git apply --reject file.patch這個命令會自動合入不沖突的代碼,然后保留沖突的部分,同時會生成后綴為.rej的文件,用于保存沒有合并進去的部分,可以參考這個進行沖突解決。
解決完沖突后,刪除后綴為.rej文件,并執行git add . 添加改動到暫存區
最后執行git am --resolved或者git am --continue
備注:在打入patch沖突時,可以執行git am --skip跳過此次沖突,也可以執行git am --abort回退打入patch的動作,還原到操作前狀態。
非常感謝您的耐心閱讀,希望我的文章對您有幫助。歡迎點評、轉發或分享給您的朋友或技術群。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的生成和合入patch的两种方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 屏蔽Crash 提示框的两种方式
- 下一篇: 第一行代码学习笔记第三章——UI开发的点