Asb*_*erg 8 git patch file-rename git-patch file-move
我想将两个文件从一个存储库移动到另一个存储库.这些文件最初添加为:
/src/init/Price.cs
/tests/init/PriceTests.cs
这两个文件后来被重命名为:
/src/init/PriceValue.cs
/tests/init/PriceValueTests.cs
然后转到:
/src/moved/PriceValue.cs
/tests/moved/PriceValueTests.cs
我试图通过这种描述为这些文件创建一组补丁,但我不确定如何传递文件存在的六种不同路径.
我设法找到影响PriceValue.cs
(跨重命名和移动)的所有提交ID ,但将这些ID传递给Git失败,并显示以下错误消息:
$ git format-patch -o /tmp/pricevaluepatches $(git log --all dfeeb 6966b 9f882 …)
-bash: /usr/local/bin/git: Argument list too long
Run Code Online (Sandbox Code Playgroud)
那么,我如何为此创建一组补丁,它只包含对所提到文件的更改,但是在一个重命名和每个文件的一次移动中包含它?
您可以获取一些特定文件的补丁,但不能早于提交sha1
使用
git format-patch sha1 -- file1 file2 ...
Run Code Online (Sandbox Code Playgroud)
任何文件都可以是旧文件(在重命名之前)或现有文件.
如果你想要提交所有提交,sha1
你可以使用
git format-patch --root sha1 -- file1 file2 ...
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下,所有提交到HEAD
你的六个文件的now():
git format-patch --root HEAD -- /src/init/Price.cs /src/init/PriceValue.cs /src/moved/PriceValue.cs /src/init/PriceTests.cs /src/init/PriceValueTests.cs /src/moved/PriceValueTests.cs
Run Code Online (Sandbox Code Playgroud)
嗯......假设我想保持补丁文件的原样,我要做的就是将补丁文件应用到一个分支上,这样我就可以在正确的分支上挑选它。
因此,假设我的 master 分支上有一个名为 /tests/moved/PriceValueTests.cs 的文件,并且我想在其上应用名为 /tests/init/PriceTests.cs 的补丁。假设我不想破解补丁文件,我会做的是:
这样 git 就可以跟踪名称更改并能够成功应用它。我已经这样做过很多次了,而且 git 的文件重命名算法往往是正确的。