Git 如何获取路径在两次不同提交之间已更改的文件的差异?

Git 如何获取路径在两次不同提交之间已更改的文件的差异?,git,github,Git,Github,我的目标是从一个分支中挑选一个旧的提交到主分支,但是由于文件的路径在主分支中发生了更改,我无法这样做 我有一个commit(比如commit a(old_branch))中的文件,其路径是“src/path1/file.py”,我有一个主分支,其中的相同文件路径现在已更改为“src/path2/file.py”。如何获取主控文件和旧提交文件之间的更改差异,以便直接将差异应用于主控文件 我知道我可以在相关文件中手动进行更改,然后提交,但我会将此作为最后一个选项 谢谢您可以使用提交:路径符号为一对文

我的目标是从一个分支中挑选一个旧的提交到主分支,但是由于文件的路径在主分支中发生了更改,我无法这样做

我有一个commit(比如commit a(old_branch))中的文件,其路径是“src/path1/file.py”,我有一个主分支,其中的相同文件路径现在已更改为“src/path2/file.py”。如何获取主控文件和旧提交文件之间的更改差异,以便直接将差异应用于主控文件

我知道我可以在相关文件中手动进行更改,然后提交,但我会将此作为最后一个选项


谢谢

您可以使用
提交:路径
符号为一对文件构建差异:

git diff -p oldcommit:src/path1/file.py newcommit:src/path2/file.py > file.patch
然后,您可以直接使用
patch
实用程序应用此修补程序:

patch src/path2/file.py file.patch
补丁
默认安装在linux系统上,可从Windows系统上的“git bash”获得


另一种方法是编辑生成的补丁中的路径,然后使用git apply应用补丁:

  • 编辑生成的修补程序
  • 修改前导块中的文件路径:

    # from :
    --- a/src/path1/file.py
    +++ b/src/path2/file.py
    
    # to :
    --- a/src/path2/file.py
    +++ b/src/path2/file.py
    
  • 用git应用修改过的补丁

    git apply file.patch
    

您可以使用
commit:path
符号为一对文件构建差异:

git diff -p oldcommit:src/path1/file.py newcommit:src/path2/file.py > file.patch
然后,您可以直接使用
patch
实用程序应用此修补程序:

patch src/path2/file.py file.patch
补丁
默认安装在linux系统上,可从Windows系统上的“git bash”获得


另一种方法是编辑生成的补丁中的路径,然后使用git apply应用补丁:

  • 编辑生成的修补程序
  • 修改前导块中的文件路径:

    # from :
    --- a/src/path1/file.py
    +++ b/src/path2/file.py
    
    # to :
    --- a/src/path2/file.py
    +++ b/src/path2/file.py
    
  • 用git应用修改过的补丁

    git apply file.patch
    

有时,
git cherry pick
可以在重命名过程中选择更改。Git在比较合并基(对于cherry pick,它是提交到pick的父级)和当前提交时,只需要将文件视为“重命名”文件。只要没有其他文件名为
src/path1/file.py
,如果
src/path2/file.py
的内容足够相似,则删除和添加可以成为重命名。默认相似性阈值为50%,但您可以使用
-X find renames=
来更改此阈值。有时
git cherry pick
可以跨重命名拾取更改。Git在比较合并基(对于cherry pick,它是提交到pick的父级)和当前提交时,只需要将文件视为“重命名”文件。只要没有其他文件名为
src/path1/file.py
,如果
src/path2/file.py
的内容足够相似,则删除和添加可以成为重命名。默认相似性阈值为50%,但您可以使用
-X find renames=
来更改此值。