我有一个稍微过时的实验分支,由于时间限制,它被搁置了。我需要拿起它并将其移至项目的 HEAD。
现在的问题是分支中的补丁实际上有点大并且有大量的冲突,所以我想将分支中的提交分解为单个文件提交,这样我可以更轻松地一一应用它们。
是否有一些自动命令可以为我执行此操作,还是我需要手动执行此操作?
我有一个稍微过时的实验分支,由于时间限制,它被搁置了。我需要拿起它并将其移至项目的 HEAD。
现在的问题是分支中的补丁实际上有点大并且有大量的冲突,所以我想将分支中的提交分解为单个文件提交,这样我可以更轻松地一一应用它们。
是否有一些自动命令可以为我执行此操作,还是我需要手动执行此操作?
你可以这样做:
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
请注意每个语句中的 ^s 数量
这假设您想要扩大范围master^^^^..master
并且它是线性历史,或者您不介意丢失合并。它还假设您希望每次都为受影响的文件保留相同的提交消息。
我不相信已经有命令可以执行此操作,但是编写脚本来执行此操作应该相当容易。它只需要用于git diff
输出更改文件的列表,如果为空则退出。否则,从列表中选择顶部文件并使用git add
、提交并重复进行暂存。