我们进行开发工作经常需要给代码制作补丁,并且将补丁应用到其它版本的代码当中。在Git出来之前我们通过使用diff和patch命令制作和应用补丁。那么,Git下是否有更为方便的命令呢?下面带领大家了解一下如何使用Git命令制作和应用补丁。
本文只针对补丁的用法介绍一下场景,当然也有一些更为有效的访问解决这些场景的问题,但不在本文范围内。
制作补丁
1. 最后一次提交
我们经常修复Bug,然后将该Bug的代码合并到某个分支中,如果每个分支都通过手动修改就会非常麻烦,这是可以将修改的代码制作称一个补丁,然后应用到其它分支即可。当我们修改并提交代码后,这个代码通常是最后一次提交,因此可以用下面命令非常方便的制作一个补丁。其中,-1表示最后一次提交,-o表示补丁文件输出的目录。
git format-patch -1 -o /root/patch/
有的时候这个Bug非常复杂,我们可能进行了多次提交,这个时候可以将命令调整为如下格式。示例中-5表示将最近5次提交制作成补丁。当然可以用下面介绍的第2中方式。
git format-patch -5 -o /root/patch/
2. 从某commit以来的修改
有的时候这个Bug非常复杂,我们可能进行了多次提交,而且可能数起来都非常麻烦,这个时候可以将命令调整为如下格式,这个命令格式将某次提交(不包含该次提交)之前的所有提交做成补丁。
git format-patch de85add54522b7ca3b7ad99c7c5ea24525d39ba0 -o /root/patch/
如果我们只想将该次提交制作称补丁,那么应该怎么办呢?可以使用如下命令:
git format-patch -1 de85add54522b7ca3b7ad99c7c5ea24525d39ba0 -o /root/patch/
如果想将该次提交之前的若干个提交一起制作成补丁呢?可以使用如下命令,将该次提交之前的3个提交(含本次提交)制作成bud
git format-patch -3 de85add54522b7ca3b7ad99c7c5ea24525d39ba0 -o /root/patch/
3. 两个commit间的修改
有的时候可能需要将新版本中解决Bug的代码移到老版本中,而代码提交的又多,又很久远。这是可以将两次提交之间的内容(包含两个commit)全部做成补丁。需要注意的是两次commit id之前是三个点(...)。
git format-patch 7f581e5fabbed21ad8c8ccd3398513d626f01ecf...de85add54522b7ca3b7ad99c7c5ea24525d39ba0e919cd7a -o /root/patch/
其实这个commit id不需要全量,可以只截取一部分。
git format-patch 7f581e5fabbed...de85add54522b7 -o /root/patch/
应用补丁
制作的补丁最终肯定是要用的,下面我们介绍一下如何使用git补丁。首先需要把生成的patch文件拷贝到某个目录下。比如本文假设生成在/root/patch/下。
1. 检查patch(补丁)文件
这个命令用于检查补丁文件,确保文件没有问题。
git apply --stat /root/patch/0001-test-fix.patch
2. 查看是否可以应用成功
这个命令用于检查如果应用到本代码树是否会有问题,相当于一个演练。这样可以避免合并的时候才出现问题。
git apply --check /root/patch/0001-test-fix.patch
3. 实际应用补丁
这个命令是进行实际的应用,此时补丁代码会合并到代码树中。
git am -s < /root/patch/0001-test-fix.patch
好了,今天就介绍到这了。相信大家看完这边文章之后再也不会担心制作补丁的事情了。如果有任何疑问,请在下面留言。