您如何在合并的更改之上重新调整当前分支的更改?
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
来说并不是一件非常明智的事情:)以上是关于您如何在合并的更改之上重新调整当前分支的更改?的主要内容,如果未能解决你的问题,请参考以下文章