我有一个由同事创建的 .diff 文件,并想将其中列出的更改应用于我本地的完全相同的代码库分支。我没有访问该同事电脑或用于生成此 diff 文件的分支的权限。
显然,我可以逐行重新键入每个更改,但我宁愿不让系统受到人为错误的影响。怎样是最简单的方法?
显然,我可以逐行重新键入每个更改,但我宁愿不让系统受到人为错误的影响。怎样是最简单的方法?
将差异文件复制到仓库的根目录,然后执行:
git apply yourcoworkers.diff
关于apply
命令的更多信息可以在其手册页中找到。
顺便说一句:通过使用发送者的git format-patch
命令,然后在接收者处使用git am
命令的组合,可以更好地通过文件交换整个提交,因为它还传输了作者信息和提交消息。
如果补丁应用失败,并且生成差异的提交实际上在您的存储库中,则可以使用apply
命令的-3
选项尝试合并更改。
它还可通过Unix管道按如下方式工作:
git diff d892531 815a3b5 | git apply
git reset --hard
命令将你的工作目录恢复到最后一次提交。如果你已经提交了,就需要附加要返回的版本号。 - Philippgit stash
命令。这样无论如何,您都可以恢复您的存储,并在以后的某个时间点提交更改。 - maurice看起来你也可以使用 patch 命令。将差异放在存储库的根目录中,并从命令行运行 patch
。
patch -i yourcoworkers.diff
或者patch -p0 -i yourcoworkers.diff
如果他们在创建差异时没有使用 --no-prefix
,则您可能需要删除前导文件夹结构。
如果是这样,那么您可以使用以下命令来删除不适用的文件夹部分:
patch -p1 -i yourcoworkers.diff
-p(n)表示要删除文件夹结构的部分数量。
有关创建和应用补丁的更多信息,请参见此处。
您还可以使用
git apply yourcoworkers.diff --stat
检查默认情况下是否会应用任何更改。如果补丁未正确应用(文件夹结构不同),可能会显示0个受影响的文件。