将旧 GIT 分支展平以掌握

Flatten old GIT branches to master

我有一个 GIT 项目,其中包含 master 分支和几个其他分支。所有这些额外的分支只包含一个提交:

          -- a      -- b -- c
         /         /    /
 -- A -- B -- C -- D -- E -- F -- G

我想将此 GIT 存储库展平,使其仅包含 master 分支,并保留其他分支的信息,如下所示:

-- A -- B -- a -- C -- D -- b -- E -- c -- F -- G

如何做到这一点?

你可以挑选(可能与 for-each-rev IIRC)

如果您知道不会有任何(新的)冲突:

git cherry-pick $(git for-each-ref -- --glob refs/heads | cut -d\  -f1)

git for-each-ref --shell --format="git cherry-pick %(refname)" refs/heads |sh