我有一个同事创建的.diff文件,并希望将该diff文件中列出的更改应用到完全相同的存储库的本地分支。我没有访问那个工人的pc或分支,用来生成这个差异文件。
显然,我可以一行一行地重新输入所有内容,但我宁愿不让系统出现人为错误。最简单的方法是什么?
我有一个同事创建的.diff文件,并希望将该diff文件中列出的更改应用到完全相同的存储库的本地分支。我没有访问那个工人的pc或分支,用来生成这个差异文件。
显然,我可以一行一行地重新输入所有内容,但我宁愿不让系统出现人为错误。最简单的方法是什么?
当前回答
将diff文件复制到存储库的根目录,然后执行以下操作:
git apply yourcoworkers.diff
关于apply命令的更多信息可以在它的手册页上找到。
顺便说一下:通过文件交换整个提交的更好的方法是在发送方使用git format-patch命令,然后在接收方使用git am命令,因为它也传输作者信息和提交消息。
如果补丁应用程序失败,并且生成差异的提交实际上在你的repo中,你可以使用apply的-3选项来尝试合并更改。
它也适用于Unix管道,如下所示:
git diff d892531 815a3b5 | git apply
其他回答
似乎还可以使用patch命令。将diff放在存储库的根目录中,然后从命令行运行patch。
patch -i yourcoworkers.diff
or
patch -p0 -i yourcoworkers.diff
如果他们没有使用——no-prefix创建差异,则可能需要删除前导文件夹结构。
如果是这样,那么你可以删除文件夹中不适用的部分,使用:
patch -p1 -i yourcoworkers.diff
-p(n)表示要删除文件夹结构的多少部分。
更多关于创建和应用补丁的信息请点击这里。
你也可以使用
git apply yourcoworkers.diff --stat
查看在默认情况下diff是否应用任何更改。如果补丁没有正确应用(不同的文件夹结构),它可能会说0个文件受影响。
将diff文件复制到存储库的根目录,然后执行以下操作:
git apply yourcoworkers.diff
关于apply命令的更多信息可以在它的手册页上找到。
顺便说一下:通过文件交换整个提交的更好的方法是在发送方使用git format-patch命令,然后在接收方使用git am命令,因为它也传输作者信息和提交消息。
如果补丁应用程序失败,并且生成差异的提交实际上在你的repo中,你可以使用apply的-3选项来尝试合并更改。
它也适用于Unix管道,如下所示:
git diff d892531 815a3b5 | git apply