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

问题描述 投票:0回答:1

我想要的是 GitHub 如何处理合并 Pull 请求的灵感,它为你提供了 3 个选项:

  1. “创建合并提交”:即
    git co target && git merge source
  2. “壁球”:即
    git co target && git merge --squash source
  3. “重新设定基准”

我已经在目标分支上,基本上想要第三个选项,类似于

git co source && git rebase target && git co 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]
(如果已经在目标上,可以省略最后一个参数),它将根据需要修改目标分支,但提交在目标中而不是在源中,即什么都没有。

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

git merge rebase
1个回答
0
投票

我想我没有完全明白这个问题。

因此,如果您有签出分支“目标”,那么您可以重新设置另一个分支的所有更改,假设它的名称是“源”。当然,先决条件是他们有一个共同的基础,例如找到它:

git merge-base head source

那么如果源只是本地分支,请执行以下操作:

git rebase source
。这将从源中放入所有新的(较新的合并基础)提交,然后应用“目标”命名分支中的所有更改。

这将需要所有

如果它是来自存储库源的远程分支,则执行以下操作:

git pull --rebase origin source

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

如果这不能回答您的问题,请更明确地描述您不想存档的目标。

© www.soinside.com 2019 - 2024. All rights reserved.