我有一个分支feature/10/
,其中包含一个正在开发中的新项目,包含许多文件,分支foo.py
中的一个脚本已经变成了它自己的切向边项目它不应该在feature/10/
分支中,而应该进入feature/11/
分支,然后完成然后再回到主分区。 foo.py
取决于master中的文件,但不会与feature/10/
中的任何新文件交互或依赖它们。
有没有办法让我创建这个新分支,复制到foo.py
但没有别的东西并保留foo.py
的git历史记录?
我显然可以创建一个新分支并手动复制粘贴文件,但这感觉它违背了git的精神,因为它切断了foo.py
从它的修订历史中的未来发展。
答案 0 :(得分:0)
(你实际上并没有用反斜杠命名你的分支,是吗?我会假设正斜杠。)
git filter-branch可以做到这一点。
git filter-branch $(git merge-base feature/10 feature/11)..feature/11 \
--index-filter '
BASE=$(git merge-base feature/10 feature/11)
# Save the current state of foo.py
FOO=$(git ls-files --stage -- foo.py)
read -r mode object stage file <<<${FOO}
# Set the entire tree back to the base state
git read-tree ${BASE}^{tree}
# Add the current foo.py to the tree
git update-index --cacheinfo "${mode},${object},foo.py"
' \
--prune-empty
注意,这将重写feature/11
分支。您可以在重写之前找到版本original/feature/11
。