如何获取git diff文件,并将其应用于作为同一存储库副本的本地分支?


491

我有一个由同事创建的.diff文件,并希望将该diff文件中列出的更改应用于完全相同的存储库的本地分支。我无权访问用于生成此差异文件的工作人员的PC或分支。

显然,我可以一行一行地重新键入所有内容,但是我宁愿不要使系统遭受人为错误。最简单的方法是什么?

Answers:


746

将diff文件复制到存储库的根目录,然后执行以下操作:

git apply yourcoworkers.diff

有关该apply命令的更多信息,请参见其手册页

顺便说一句:按文件交换整个提交的一种更好的方法是在git format-patch发送者然后git am在接收者上组合命令,因为它还会传送作者信息和提交消息。

如果补丁应用程序失败,并且生成差异的提交实际上在您的存储库中,则可以使用的-3选项apply尝试合并更改。

它也可用于Unix管道,如下所示:

git diff d892531 815a3b5 | git apply

3
感谢您的答复,但是这导致了错误提示,补丁程序失败:filename.php:202错误:filename.php:补丁程序不适用。好消息是它不是文件中的第一个文件名,因此至少它能够处理某些文件。有什么想法吗?
Mike_K 2012年

4
您似乎也对该文件进行了更改,从而使补丁无法正常工作。为了解决这个问题,您可以提交更改,创建一个新分支,将其重置为您和您的同事分歧的提交,应用补丁,提交,然后合并两个分支。
菲利普

3
@orlybg如果尚未提交,请执行git reset --hard以使工作树返回到最后一次提交。提交后,请添加您要返回的修订。
菲利普2014年

5
@orlybg抱歉,但是您被搞砸了。Git仅创建一个检查点,您可以在提交时返回该检查点。这就是为什么许多git指南建议尽早并经常提交的原因。
菲利普

4
@orlybg至少git stash在执行某些可能要在其后撤消的操作之前运行。然后,无论哪种方式,您都可以收回存储,并在以后的某个时间提交。
莫里斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.