Git: 如何合并除commit之外的分支?

Git: How to merge a branch except a commit?

我们有一个 PR 一切正常,除了 1 次提交,是否可以合并除特定提交之外的所有内容?

如果你想跳过的提交是分支中的最后一个提交,你可以只合并它的父提交。

branch ...   A --- B --- C
            /       \
master ... O   ...   git merge branch^

如果不是,您可以 git cherry-pick 除了错误的提交之外的每个提交。一个快捷方式是使用 git rebase -i 并删除不需要的行。

branch ...   A --- B --- C
            /
master ... O ...

$ git rebase -i master branch
(inside editor)
pick 0123456789 A  (delete this line)
pick 3456789abc B
pick 6789abcdef C
(save and exit)

branch ...        B' --- C'
                 /
master ... O ...

您也可以合并然后还原提交。

$ git merge branch
$ git revert A

branch ...   A --- B --- C
            /             \
master ... O      ...      merge --- ∀

或者在分支中恢复然后合并。

$ git checkout branch
$ git revert A
$ git checkout master
$ git merge branch

branch ...   A --- B --- C --- ∀
            /                   \
master ... O         ...         merge

您可以合并工作树中的分支,并在提交前还原不需要的提交。

git merge --no-commit branch
git revert --no-commitunwanted_commit
git commit -m "Merged branch (except unwanted_commit)"