1 git patch操作
1.1 git diff比較
使用git diff用于顯示當(dāng)前工作區(qū)與暫存區(qū)或提交歷史之間的差異,如果使用它生成patch,則需要使用git apply命令來引入patch,比如:
$git diff A.cpp >commit.patch
1.2 git patch打包
使用git format-patch生成patch,如下所示:
# 打包最近的一個patch:
$git format-patch HEAD^
# 打包最近的兩個patch
$git format-patch HEAD^^
# 打包最近的三個patch
$git format-patch HEAD^^^
# 打包最近的n個patch
$git format-patch -n
# 打包版本n1與n2之間的patch
$git format-patch -n1 -n2
# 某次提交以后的所有patch,不包含此次提交,兩者等價
$ git format-patch -s 5d7c81a2b
$ git format-patch 5d7c81a2b
打包好后會生成0001-XXX.patch 這樣格式的patch,使用git am(自動提交) /git apply 來merge patch即可。
1.3 git am操作總結(jié)
@1 批量am操作
如果patch有很多且都是這種0001、0002,即由git format-patch批量生成,則直接執(zhí)行命令:
$git am ./patch/*.patch
注意:這里的*.patch需要是生成時就做了自動排序的,比如git format-patch批量生成。
如果有如下報錯:
git/rebase-apply/patch:272730: trailing whitespace.
struct gpio_pins {
.git/rebase-apply/patch:272752: trailing whitespace.
.git/rebase-apply/patch:272814: trailing whitespace.
gpio_direction_output(data->ipd_hall_en,1);
.git/rebase-apply/patch:272841: trailing whitespace.
.git/rebase-apply/patch:272874: trailing whitespace.
printk(KERN_ERR"GpioCtl_open\n");
warning: squelched 39 whitespace errors
warning: 44 lines add whitespace errors.
則執(zhí)行:
$git am --whitespace=fix 0001-xxx.patch
會自動修復(fù)一部分 whitespace errors
@2 沖突修復(fù)
如果git am時報錯,如下所示:
warning: quoted CRLF detected
Applying: update code
error: patch failed: LINUX/android/kernel/ship_prebuilt/secondary_kernel/scripts/.asn1_compiler.cmd:1
error: LINUX/android/kernel/ship_prebuilt/secondary_kernel/scripts/.asn1_compiler.cmd: patch does not apply
error: patch failed: LINUX/android/kernel/ship_prebuilt/secondary_kernel/scripts/.bin2c.cmd:1
error: LINUX/android/kernel/ship_prebuilt/secondary_kernel/scripts/.bin2c.cmd: patch does not apply
...
那么接下怎么做呢?先執(zhí)行
$git apply --reject 0001-xxx.patch
這時會在文件目錄下產(chǎn)生 .rej 后綴的文件,里面就是無法自動合并的沖突,需要手動修改。手動修改正確后再將rej文件刪除即可。
因為屬于modified狀態(tài),因此需要執(zhí)行
$git add xxx
操作之后再繼續(xù)執(zhí)行
?
$git am --continue
就這樣,直到所有patch都正確merge即可。
1.4 git diff和git format-patch的區(qū)別
git diff和git format-patch是Git中用于生成補(bǔ)丁和差異的命令,它們之間的主要區(qū)別如下:文章來源:http://www.zghlxwxcb.cn/news/detail-774226.html
- git diff:git diff命令用于顯示當(dāng)前工作區(qū)與暫存區(qū)或提交歷史之間的差異??梢燥@示文件的修改內(nèi)容,包括添加、刪除和修改的行??梢允褂貌煌倪x項和參數(shù)來控制差異的顯示方式,比如顯示具體的文件差異、忽略空白字符等。git diff通常用于查看尚未暫存或提交的更改,以幫助你了解當(dāng)前工作區(qū)的狀態(tài)和修改內(nèi)容。
- git format-patch:git format-patch命令用于生成補(bǔ)丁文件(patch files),它將一系列提交轉(zhuǎn)換為可應(yīng)用的補(bǔ)丁文件。git format-patch會為每個提交創(chuàng)建一個單獨的補(bǔ)丁文件,每個補(bǔ)丁文件包含了該提交的所有修改內(nèi)容。生成的補(bǔ)丁文件一般以.patch擴(kuò)展名結(jié)尾,可以通過郵件或其他方式傳遞給他人,以便他們應(yīng)用這些補(bǔ)丁到他們的代碼庫中。補(bǔ)丁文件包含了修改的具體內(nèi)容,包括添加、刪除和修改的行,以及與之相關(guān)的提交信息。git format-patch命令可以使用不同的選項和參數(shù)來控制生成補(bǔ)丁文件的方式,比如指定要處理的提交范圍、生成多個補(bǔ)丁文件等。
總結(jié)來說:git diff用于顯示當(dāng)前工作區(qū)與暫存區(qū)或提交歷史之間的差異,用于查看尚未暫存或提交的更改。git format-patch用于將提交轉(zhuǎn)換為補(bǔ)丁文件,每個補(bǔ)丁文件包含了一個提交的所有修改內(nèi)容,用于傳遞和應(yīng)用補(bǔ)丁。這兩個命令在不同的場景下有不同的用途,根據(jù)你的需求選擇適合的命令來查看差異或生成補(bǔ)丁。文章來源地址http://www.zghlxwxcb.cn/news/detail-774226.html
2 git分支操作
2.1 基本操作
# 在master分支下保證當(dāng)前代碼與線上同步。
$git pull origin master
# 查看遠(yuǎn)程分支
$git branch -r
# 查看本地和遠(yuǎn)程的所有分支
$git branch -a
2.2 新建 / 切換分支
#新建分支
$git branch <分支名>
#切換到新建的分支
$git checkout/switch <分支名>
#優(yōu)化操作,創(chuàng)建分支的同時再切換到該分支
$git checkout -b <分支名>
2.3 提交分支到遠(yuǎn)端
# 把本地分支推到遠(yuǎn)端,讓遠(yuǎn)端也有一個你的分支,用來后面提交你的代碼
$git push origin <分支名>
2.4 合并分支
# 合并分支,在當(dāng)前分支下將 <分支>合并到當(dāng)前分支,合并沖突后手動解決沖突
# 解決后使用git commit -m "Merge branchname into current branch"來完成了分支的合并操作
# 如果有沖突則需要先解決沖突再最后提交,其中
# 介于 <<<<<<<HEAD 和 ======= 之間的內(nèi)容是代碼塊1中內(nèi)容,
# 介于 ======= 和 >>>>>>> 之間的內(nèi)容是代碼塊2中內(nèi)容。
$git merge <分支名>
2.5 刪除分支
# 刪除分支,注意,只有當(dāng)該分支的修改已經(jīng)合并到其他分支時,才能被安全地刪除。如果分支的修改尚未合并,可以使用強(qiáng)制刪除的命令
git branch -d <分支名>
# 分支的修改尚未合并,強(qiáng)制刪除分支
git branch -D <分支名>
2.6 重命名本地分支
$git branch -m <oldbranch> <newbranch>
到了這里,關(guān)于Git版本管理(02)patch操作和分支操作整理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!