如何使用 git filter-branch 将文件添加到特定提交?
How to add a file to a specific commit with git filter-branch?
我们需要在回购的特定过去提交中添加一些文件,我们准备重写历史,以便它影响从该提交的子分支中分离出来的所有分支。我们正在尝试为此使用 git filter-branch,使用 add,因为一旦我们将文件添加到提交中,它就不会添加到子项中,但是我们找不到正确的参数来停止它影响一些并发的发散提交。看图理解。
我们正在使用此命令针对红色提交,但该文件出现在紫色提交上 - 为什么? - 它也出现在绿色提交上,我们不希望它影响代码路径,只出现在红色提交上,然后通过所有子提交和合并继承。
git filter-branch --index-filter "cp C:/Users/asdf/Documents/IdeaProj
ects/git-crypt-tests/.gitattributes . && git add .gitattributes" 72c7e292ddd134c04285f3530afc829fd38de4
28..HEAD
我理解错了什么?
谢谢。
您似乎认为,当您将提交范围写为 A..B
时,它会包含边界。但事实并非如此。此符号是 B ^A
的缩写,即 B
之前的所有内容,但不包括 A
之前的所有内容。这将从范围中删除 "lower" 绑定 A
。解决办法就是你写A~
,意思是"the ancestor of A
":A~..B
.
此外,由于您确切地知道要将文件添加到哪些提交以及不想添加它们,您可以限制修订 walker 仅列出想要的提交:
git filter-branch --index-filter "cp C:/Users/asdf/Documents/IdeaProjects/git-crypt-tests/.gitattributes . && git add .gitattributes" -- HEAD --not 72c7e29~ ":/Fix Prestapp"
也就是说,你说你想要所有提交到 HEAD
,但在 72c7e29~
之前和消息以 Fix Prestapp
.[=22= 开头的提交之前都没有]
我们需要在回购的特定过去提交中添加一些文件,我们准备重写历史,以便它影响从该提交的子分支中分离出来的所有分支。我们正在尝试为此使用 git filter-branch,使用 add,因为一旦我们将文件添加到提交中,它就不会添加到子项中,但是我们找不到正确的参数来停止它影响一些并发的发散提交。看图理解。
我们正在使用此命令针对红色提交,但该文件出现在紫色提交上 - 为什么? - 它也出现在绿色提交上,我们不希望它影响代码路径,只出现在红色提交上,然后通过所有子提交和合并继承。
git filter-branch --index-filter "cp C:/Users/asdf/Documents/IdeaProj
ects/git-crypt-tests/.gitattributes . && git add .gitattributes" 72c7e292ddd134c04285f3530afc829fd38de4
28..HEAD
我理解错了什么?
谢谢。
您似乎认为,当您将提交范围写为 A..B
时,它会包含边界。但事实并非如此。此符号是 B ^A
的缩写,即 B
之前的所有内容,但不包括 A
之前的所有内容。这将从范围中删除 "lower" 绑定 A
。解决办法就是你写A~
,意思是"the ancestor of A
":A~..B
.
此外,由于您确切地知道要将文件添加到哪些提交以及不想添加它们,您可以限制修订 walker 仅列出想要的提交:
git filter-branch --index-filter "cp C:/Users/asdf/Documents/IdeaProjects/git-crypt-tests/.gitattributes . && git add .gitattributes" -- HEAD --not 72c7e29~ ":/Fix Prestapp"
也就是说,你说你想要所有提交到 HEAD
,但在 72c7e29~
之前和消息以 Fix Prestapp
.[=22= 开头的提交之前都没有]