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

标签 git

我有一个稍微过时的实验分支,由于时间限制而被搁置。我需要将其拾取并将其移动到项目的 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

请注意每条语句中^的数量

这假设您想要扩展范围master^^^^..master并且它是线性历史或者您不介意丢失 merge 。它还假设您希望为每次受影响的文件保留相同的提交消息。

关于git - 将分支分解为单个文件提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11502064/

相关文章:

xcode - 无法推送已推送到 Bitbucket 的最近对 Github 的提交

git - "git push -d remote branch"和 "git push remote :branch"有什么区别

git - 如何反转 git log --author=me? (不使用 Perl)

git - github 或 bitbucket 上的私有(private)存储库是否可以安全地存储密码?

git - Git checkout 工作原理说明

git - 字幕创建的版本控制

ruby-on-rails - 无法加载从 GitHub 获取的 Rails 应用; rake,rails 服务器不工作

Git + GitHub + Dropbox

git merge pull 分支困惑

git - 为什么我收到消息 "fatal: This operation must be run in a work tree?"