不使用分支进行git rebase

3
假设我没有使用分支(我正在本地主分支上工作,远程服务器的主分支为origin)。想知道这个命令的功能是什么?我的困惑在于有时候我看到人们使用这个命令成功地合并本地更改(与远程服务器主分支上的更改)而不使用分支,但我可能错了,我认为只有在你正在一个分支(master)上工作并与其他分支合并时,rebase才起作用?
git rebase -i origin/master 

2
git rebase 命令不会首先进行获取操作。git pull 方便命令执行两个操作:首先,它运行 git fetch。然后一旦成功完成获取,git pull 将运行 git mergegit rebase 中的任意一个。问题在于你必须预先选择要运行哪个(合并或变基),只有在获取之后才能确定哪个操作最佳。对于大多数人来说,大多数时间内变基更好;但是git pull 默认执行git merge。因此,我建议完全避免使用 git pull:只需坚持使用 git fetch 即可。然而,(继续) - torek
2
如果你觉得使用 git pull 比运行两个命令更方便,那么请记住 git pull --rebase 的意思是“先获取,然后变基”。你也可以设置你的配置,使得 git pull 默认执行 git rebase(但我个人还是喜欢分别进行获取和变基)。 - torek
2
是的,我通常会在拉取新提交后进行变基操作。 - torek
1
如果你想比较合并(merge)和变基(rebase),可以查看现有的许多SO问题之一(例如,https://dev59.com/BXRA5IYBdhLWcg3w2xwI 和 https://dev59.com/YWQn5IYBdhLWcg3wpomp)。 - torek
1
那个问题,正如rethab所指出的那样,是一个独立的问题。(在提问之前,您应该浏览现有的问题和答案,看看它们是否已经告诉了您足够的信息。) - torek
显示剩余7条评论
1个回答

3

origin/master是一个分支,就像master一样。它基本上跟踪远程主分支上的所有内容。

当你从master运行git fetch时,它会从远程主分支获取所有提交,并把它放到origin/master上。如果你随后运行git rebase -i origin/master,那么会发生以下情况:

  • 所有未在origin/master上的提交都被暂时存储
  • 你的主分支将更新为origin/master上的任何内容
  • 你的提交将被重新应用在更新后的master

因此,如果你先手动执行fetch,然后再执行rebase,那么这基本上就是手动执行git pull --rebase所做的操作。

顺便说一下,你也可以将提交变基到自己的分支上,例如:git rebase HEAD~2。这将让你重新排序(或以其他方式编辑)当前分支上的提交。


感谢rethab提供的出色解释并点赞。您在评论中所说的“您的提交将重新应用于更新后的主分支”的意思是我的本地分支origin/master上的提交将重新应用于本地分支master上吗? - Lin Ma
1
我在我的回答中解释了rebase:http://stackoverflow.com/questions/39794674/how-to-bring-a-pull-request-to-a-state-of-can-be-merged-automatically/39794996#39794996 - prabodhprakash
1
你的提交不会出现在origin/master上。经过我上面描述的三个步骤后,你的master分支状态将为:origin/master + 你本地在master上做的提交。 - rethab
谢谢rethab,我看了你之前的帖子,非常清晰和棒!点赞。在第二步中,当我执行git rebase -i origin/master时,Git会将最新的更改从远程主分支拉到我的本地origin/master分支上吗?然后基于最新的远程主分支更改,在我的本地主分支上应用它们?还是git rebase -i origin/master只是从我的本地origin/master分支获取提交(而不是拉取最新的远程主分支更改),并将其应用于我的本地主分支?谢谢。 - Lin Ma
1
确实。rebase 是纯本地操作。Fetch 获取。 - rethab
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接