1 git patch操作
1.1 git diff比较
使用git diff用于显示当前工作区与暂存区或提交历史之间的差异,如果使用它生成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操作总结
@1 批量am操作
如果patch有很多且都是这种0001、0002,即由git format-patch批量生成,则直接执行命令:
$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.
则执行:
$git am --whitespace=fix 0001-xxx.patch
会自动修复一部分 whitespace errors
@2 冲突修复
如果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
...
那么接下怎么做呢?先执行
$git apply --reject 0001-xxx.patch
这时会在文件目录下产生 .rej 后缀的文件,里面就是无法自动合并的冲突,需要手动修改。手动修改正确后再将rej文件删除即可。
因为属于modified状态,因此需要执行
$git add xxx
操作之后再继续执行
$git am --continue
就这样,直到所有patch都正确merge即可。
1.4 git diff和git format-patch的区别
git diff和git format-patch是Git中用于生成补丁和差异的命令,它们之间的主要区别如下:文章来源:https://www.toymoban.com/news/detail-774226.html
- git diff:git diff命令用于显示当前工作区与暂存区或提交历史之间的差异。可以显示文件的修改内容,包括添加、删除和修改的行。可以使用不同的选项和参数来控制差异的显示方式,比如显示具体的文件差异、忽略空白字符等。git diff通常用于查看尚未暂存或提交的更改,以帮助你了解当前工作区的状态和修改内容。
- git format-patch:git format-patch命令用于生成补丁文件(patch files),它将一系列提交转换为可应用的补丁文件。git format-patch会为每个提交创建一个单独的补丁文件,每个补丁文件包含了该提交的所有修改内容。生成的补丁文件一般以.patch扩展名结尾,可以通过邮件或其他方式传递给他人,以便他们应用这些补丁到他们的代码库中。补丁文件包含了修改的具体内容,包括添加、删除和修改的行,以及与之相关的提交信息。git format-patch命令可以使用不同的选项和参数来控制生成补丁文件的方式,比如指定要处理的提交范围、生成多个补丁文件等。
总结来说:git diff用于显示当前工作区与暂存区或提交历史之间的差异,用于查看尚未暂存或提交的更改。git format-patch用于将提交转换为补丁文件,每个补丁文件包含了一个提交的所有修改内容,用于传递和应用补丁。这两个命令在不同的场景下有不同的用途,根据你的需求选择适合的命令来查看差异或生成补丁。文章来源地址https://www.toymoban.com/news/detail-774226.html
2 git分支操作
2.1 基本操作
# 在master分支下保证当前代码与线上同步。
$git pull origin master
# 查看远程分支
$git branch -r
# 查看本地和远程的所有分支
$git branch -a
2.2 新建 / 切换分支
#新建分支
$git branch <分支名>
#切换到新建的分支
$git checkout/switch <分支名>
#优化操作,创建分支的同时再切换到该分支
$git checkout -b <分支名>
2.3 提交分支到远端
# 把本地分支推到远端,让远端也有一个你的分支,用来后面提交你的代码
$git push origin <分支名>
2.4 合并分支
# 合并分支,在当前分支下将 <分支>合并到当前分支,合并冲突后手动解决冲突
# 解决后使用git commit -m "Merge branchname into current branch"来完成了分支的合并操作
# 如果有冲突则需要先解决冲突再最后提交,其中
# 介于 <<<<<<<HEAD 和 ======= 之间的内容是代码块1中内容,
# 介于 ======= 和 >>>>>>> 之间的内容是代码块2中内容。
$git merge <分支名>
2.5 删除分支
# 删除分支,注意,只有当该分支的修改已经合并到其他分支时,才能被安全地删除。如果分支的修改尚未合并,可以使用强制删除的命令
git branch -d <分支名>
# 分支的修改尚未合并,强制删除分支
git branch -D <分支名>
2.6 重命名本地分支
$git branch -m <oldbranch> <newbranch>
到了这里,关于Git版本管理(02)patch操作和分支操作整理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!