如何在合并的更改基础上重新设置当前分支的更改?


144

好的。如果我在一个分支上(例如working),并且想要合并另一个分支(例如master)中的更改,那么我git-merge masterworking分支上运行该命令,并且所有更改都被合并而无需重新建立历史记录。如果我运行git-rebase master,则将更改其中的更改以master将其放在working分支的顶部。但是,如果我想合并来自的更改,master但将更改working重新设置在最上面怎么办?我怎么做?能做到吗

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

Answers:


255

你有什么rebase倒退。git rebase master满足您的要求-在当前分支上进行更改(因为它与master有所不同)master,然后在上重放它们,然后将当前分支的头部设置为新历史的头部。它不会master当前分支的顶部重放更改。


3
@乔纳森,太酷了。这是一个棘手的话题。顺便说一句,git rebase working将移动master的更改(在working分支的点之后)移动到working分支的顶部–但这并不是一件很明智的事情master:)
霍布斯(Hobbs)

66

另一种看待它的方法是考虑git rebase master

将当前分支重新建立 master

在这里,“ master”是上游的分支,这解释了为什么,衍合过程中,ourstheirs反转


这也解释了为什么LOCAL和REMOTE相反。谢谢。
AVIDeveloper 2015年

@AVIDeveloper在LOCAL和REMOTE上,您还可以阅读stackoverflow.com/a/3052118/6309
VonC

5
@@ VonC:谢谢。是的,在花了一个下午喃喃自语“ REMOTE是我的分支。.LOCAL不是我的”之后,它全部沉没了。老实说,我宁愿看到分支名称(或简称SHA),而不是REMOTE / LOCAL /我们/他们/我的。对于git difftool可怕的左/右,我的想法是相同的。有点离题,但是对于difftool我来说,我坚持使用git-meld并喜欢像'working-dir','stash @ {0}'之类的名称。
AVIDeveloper

1
@VonC:我们做完之后,您能解释一下这是怎么回事: git checkout branch_to_update git rebase master我在git log中将master的提交放到本地分支的顶部,而不是相反?
JavaSa

1
@JavaSa这很奇怪,除非未正确完成变基?您可能需要询问一个包含更多详细信息的单独问题。
VonC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.