代码之家  ›  专栏  ›  技术社区  ›  Flamefire

Git合并为rebase/Cherry pick整个分支

  •  1
  • Flamefire  · 技术社区  · 1 年前

    我想要的是GitHub如何处理合并的Pull请求,这给了你3个选项:

    1. “创建合并提交”:即。 git checkout target && git merge source
    2. “挤压”:即。 git checkout target && git merge --squash source
    3. “回扣”

    我已经在目标分支上了,基本上想要第三个选项,大概是 git checkout source && git rebase target && git checkout target && git reset --hard source 或者,最后一步也可以是 git merge --ff-only source

    所以我想要的是 git merge --rebase source 确实如此 不是 修改源。我只想从源分支中挑选出不在目标分支中的所有提交,而不需要将它们全部列出。

    我能想到的最接近的方法是创建一个临时分支,然后删除它。

    我想 git rebase --onto A B C 可以使用,但不确定如何使用。例如。 git rebase --onto target target source 根据文件将:

    • git switch source
    • 记录 git log target..source (源中的提交不在目标中)
    • git reset --hard target
    • git cherry-pick <recorded>

    因此,它将修改源分支,这不是我想要的。
    非常接近 git rebase --onto target source [target] (如果最后一个arg已经在目标上,则可以省略),这将根据需要修改目标分支,但目标中的提交不在源中,即什么都不做。

    是否有某种方法可以应用于我的当前(即目标)分支,从另一个尚未提交的分支提交,就好像我在不实际修改源的情况下精心挑选了它们或重新确定了源的基础一样?我认为Github提供了这个选项,所以一定会有一个。当然,他们也可以使用临时的。

    0 回复  |  直到 1 年前
        1
  •  0
  •   snap    1 年前

    我想我不完全明白这个问题。

    所以,如果您有一个签出分支“target”,那么您可以重新建立来自另一个分支的所有更改的基础,假设它的名称是“source”。当然,一个先决条件是他们有一个共同的基础,例如: git merge-base head source .

    则如果源只是本地分支,则执行以下操作: git rebase source .这将从源代码中放入所有新的(更新为合并基)提交,然后从“目标”命名分支应用所有更改。

    这将需要所有的

    如果它是来自存储库的远程分支,那么请执行以下操作: git pull --rebase origin source

    这两种情况都不会触及源命名分支。

    如果这不能回答你的问题,那么请更明确地描述你不想归档的目标是什么。