将分支分解为单个文件提交

时间:2012-07-16 09:58:21

标签: git

我有一个稍微过时的实验分支,由于时间限制而被推到一边。我需要把它拿起并移到项目的HEAD。

现在问题是分支中的补丁实际上有大量的冲突,所以我想将分支中的提交分解为单个文件提交,这样我就可以更容易地逐个应用它们

是否有一些自动命令可以为我执行此操作,还是需要手动执行此操作?

2 个答案:

答案 0 :(得分: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并且它是线性历史记录,或者您不介意丢失合并。它还假设您希望每次为受影响的文件保留相同的提交消息。

答案 1 :(得分:1)

我不相信有一个命令可以执行此操作,但编写脚本应该相当容易。它只需要使用git diff输出已更改文件的列表,如果为空则退出。否则,从列表中选择顶级文件并使用git add进行暂存,提交并重复。