如何在合并的更改之上重新定义当前分支的更改?

Jon*_*vis 131 git merge rebase git-rebase

好的.如果我在一个分支上(比方说working),并且我希望合并来自另一个分支的更改(比方说master),那么我git-merge masterworking分支上运行命令,并且更改将合并而不会重新定义历史记录.如果我运行git-rebase master,那么更改master将被重新放置在我的working分支的顶部.但是,如果我想合并更改master但是将我的更改working重新组合在一起,该怎么办?我怎么做?可以吗?

我可以git-rebase working在我的master分支上运行以将我的更改放在master分支的顶部,但我希望能够在我的working分支中执行此操作,而我不知道如何.我能想到的最接近的是创建一个新的分支master,然后working在其上更改rebase 的变化,但之后我会有一个新的分支而不是改变working分支.

hob*_*bbs 235

你有rebase倒退的东西.git rebase master你需要做什么 - 在当前分支上进行更改(因为它与master的分歧)并在它们之上重放它们master,然后将当前分支的头部设置为新历史的头部.它不会重播master当前分支之上的更改.

  • @Jonathan很酷.这是一个棘手的话题.顺便说一下,`git rebase working`会将`master`的更改(在`working`分支之后)移动到`working`分支的顶部 - 但这不是一件非常明智的事情.主人`:) (3认同)

Von*_*onC 62

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

重订当前分支之上 master

在这里,' master'是上游分支,这解释了为什么,在变形期间,ours并且theirs被逆转.

  • @@ VonC:谢谢.是的,在花了一个下午对自己喃喃自语"REMOTE是我的分支...... LOCAL不是我的",它都沉没了.老实说,我更喜欢看到分支名称(或缩写SHA)而不是REMOTE/LOCAL /我们/他们/我的.关于`git difftool`可怕的左/右,我的想法是一样的.有点偏离主题,但对于`difftool`我坚持使用git-meld并享受'working-dir','stash @ {0}'这样的名字,如此. (5认同)

小智 5

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

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

另一种方法可以让您将远程分支(例如,origin/master)的更改重新设置为本地分支,而无需在本地更新远程分支:git rebase origin/master