我有一个稍微过时的实验分支,由于时间限制而被推到一边。我需要捡起它并将其移动到项目的头部。将分支分解为单个文件提交
现在的问题是,分支中的补丁实际上有很多大量的冲突,所以我想将分支中的提交分成单个文件提交,所以我可以更容易地将它们应用一个一。
是否有一些自动命令,这会为我做,或者我需要手动执行此操作?
我有一个稍微过时的实验分支,由于时间限制而被推到一边。我需要捡起它并将其移动到项目的头部。将分支分解为单个文件提交
现在的问题是,分支中的补丁实际上有很多大量的冲突,所以我想将分支中的提交分成单个文件提交,所以我可以更容易地将它们应用一个一。
是否有一些自动命令,这会为我做,或者我需要手动执行此操作?
你可以做到这一点:
git checkout -b experiment master^^^^
git rev-list master^^^..master |
while read rev;
do
git diff --name-only $rev^..$rev |
while read file;
do
git checkout $rev -- $file;
git add $file;
git commit -C $rev;
done;
done
请注意,每个语句
这个假定您要扩大范围master^^^^..master
^S的数量,它是线性的历史,或者你不介意失去合并。它还假定您想要为每次受影响的文件保留相同的提交消息。
我不认为有一个命令可以做到这一点,但编写脚本来完成它应该相当容易。它只需要使用git diff
来输出已更改文件的列表,如果为空则退出。否则,从列表中选择顶层文件并使用git add
进行分级,提交并重复。