您如何在合并的更改之上重新调整当前分支的更改?

Posted

技术标签:

【中文标题】您如何在合并的更改之上重新调整当前分支的更改?【英文标题】:How do you rebase the current branch's changes on top of changes being merged in? 【发布时间】:2011-11-09 23:24:01 【问题描述】:

好的。如果我在一个分支上(比如working),并且我想合并来自另一个分支的更改(比如master),那么我在working 分支上运行命令git-merge master,然后更改会被合并,而不会重新调整历史记录。如果我运行git-rebase master,那么master 中的更改将重新定位到我的working 分支的顶部。但是,如果我想合并来自master 的更改,但将我在working 中的更改重新设置为最重要怎么办?我怎么做?能做到吗?

我可以在 master 分支上运行 git-rebase working 以将我的更改放在 master 分支的顶部,但我希望能够在我的 working 分支中执行此操作,但我没有想法如何。我能想到的最接近的做法是从master 创建一个新分支,然后在此基础上重新调整working 的更改,但随后我将拥有一个新分支而不是更改working 分支。

【问题讨论】:

【参考方案1】:

在 master 之上重新调整当前更改时,您可以:

    下拉最新master:git pull <remote_name> master 签出您想要变基更改的分支:git checkout <branch_name> 执行变基:git rebase master

另一种路径是:git rebase origin/master

【讨论】:

【参考方案2】:

另一种看待它的方式是将git rebase master视为:

将当前分支 基于 master

这里,'master' 是 upstream 分支,这解释了为什么在变基期间,ours and theirs are reversed。

【讨论】:

这也解释了为什么 LOCAL 和 REMOTE 是相反的。谢谢。 @AVIDeveloper on LOCAL 和 REMOTE,你也可以阅读***.com/a/3052118/6309 @@VonC:谢谢。是的,在花了一个下午对自己喃喃自语“REMOTE 是我的分支.. LOCAL 不是我的”之后,这一切都沉没了。老实说,我宁愿看到分支名称(或缩写。SHA)而不是 REMOTE/LOCAL/我们的/他们的/我的。对于git difftool 可怕的左/右,我的想法是一样的。有点跑题了,但对于difftool,我坚持使用 git-meld 并喜欢 'working-dir'、'stash@0' 等名称。 @VonC:你能解释一下我们这样做之后是怎么回事:git checkout branch_to_update git rebase master我在 git log 中记录了本地分支顶部的 master 提交,而不是相反? @JavaSa 这很奇怪,除非 rebase 没有正确完成?您可能需要提出一个单独的问题,其中包含更多详细信息。【参考方案3】:

你已经得到了 rebase 向后做的事情。 git rebase master 做你所要求的——接受当前分支上的更改(因为它与主分支不同)并在 master 之上重放它们,然后将当前分支的头部设置为新分支的头部历史。它不会在当前分支的顶部重放来自master 的更改。

【讨论】:

@Jonathan 很酷。这是一个有点棘手的话题。顺便说一句,git rebase working 会将master 的更改(在working 分支之后)移动到working 分支之上——但这对master 来说并不是一件非常明智的事情:)

以上是关于您如何在合并的更改之上重新调整当前分支的更改?的主要内容,如果未能解决你的问题,请参考以下文章

如何将本地未提交的更改合并到另一个 Git 分支?

您如何合并已恢复的提交?

git合并分支后还能在旧分支推送吗

如何在没有实际合并的情况下测试合并

如何在不实际合并的情况下测试合并

如何在不合并先前分支的更改的情况下合并分支