Gerrit“Format Patch”和“Checkout”选项之间有什么区别?基本上我希望提交的所有更改都在我的本地目录中,而不需要在我的本地仓库中进行新的提交。
hmtdttj41#
两者都首先调用git fetch <url> refs/changes/xx/xxx/xx以获取更改的历史记录。然后Format Patch调用git format-patch -1 --stdout FETCH_HEAD。它会生成一个当前补丁集的补丁。您可以将其重定向到本地文件或删除--stdout,以便创建一个名为0001-xxxx.patch的补丁。
git fetch <url> refs/changes/xx/xxx/xx
Format Patch
git format-patch -1 --stdout FETCH_HEAD
--stdout
0001-xxxx.patch
注意,如果您要将补丁发送给其他人,或者您要在其他仓库中应用补丁,最好将--binary附加到git format-patch,这样您就不必考虑提交是否更改了任何二进制文件。应用补丁的仓库可能没有这些二进制文件的必要数据,这将使应用失败。使用--binary,必要的数据也包含在补丁中。
--binary
git format-patch
然后Checkout调用git checkout FETCH_HEAD。它将本地代码切换到更改的当前补丁集的修订版,并导致分离的HEAD状态。如果你想把提交的修改引入到本地分支,你可以粘贴Cherry Pick的命令,并附加-n选项,然后运行它。另一种方法是先运行Format Patch的命令,而不运行--stdout,然后运行git apply -3 0001*.patch。
Checkout
git checkout FETCH_HEAD
Cherry Pick
-n
git apply -3 0001*.patch
1条答案
按热度按时间hmtdttj41#
两者都首先调用
git fetch <url> refs/changes/xx/xxx/xx
以获取更改的历史记录。然后
Format Patch
调用git format-patch -1 --stdout FETCH_HEAD
。它会生成一个当前补丁集的补丁。您可以将其重定向到本地文件或删除--stdout
,以便创建一个名为0001-xxxx.patch
的补丁。注意,如果您要将补丁发送给其他人,或者您要在其他仓库中应用补丁,最好将
--binary
附加到git format-patch
,这样您就不必考虑提交是否更改了任何二进制文件。应用补丁的仓库可能没有这些二进制文件的必要数据,这将使应用失败。使用--binary
,必要的数据也包含在补丁中。然后
Checkout
调用git checkout FETCH_HEAD
。它将本地代码切换到更改的当前补丁集的修订版,并导致分离的HEAD状态。如果你想把提交的修改引入到本地分支,你可以粘贴
Cherry Pick
的命令,并附加-n
选项,然后运行它。另一种方法是先运行Format Patch
的命令,而不运行--stdout
,然后运行git apply -3 0001*.patch
。