2012-07-16 54 views
2

我有一个稍微过时的实验分支,由于时间限制而被推到一边。我需要捡起它并将其移动到项目的头部。将分支分解为单个文件提交

现在的问题是,分支中的补丁实际上有很多大量的冲突,所以我想将分支中的提交分成单个文件提交,所以我可以更容易地将它们应用一个一。

是否有一些自动命令,这会为我做,或者我需要手动执行此操作?

回答

2

你可以做到这一点:

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的数量,它是线性的历史,或者你不介意失去合并。它还假定您想要为每次受影响的文件保留相同的提交消息。

1

我不认为有一个命令可以做到这一点,但编写脚本来完成它应该相当容易。它只需要使用git diff来输出已更改文件的列表,如果为空则退出。否则,从列表中选择顶层文件并使用git add进行分级,提交并重复。

相关问题