假设我没有使用分支(我正在本地主分支上工作,远程服务器的主分支为origin)。想知道这个命令的功能是什么?我的困惑在于有时候我看到人们使用这个命令成功地合并本地更改(与远程服务器主分支上的更改)而不使用分支,但我可能错了,我认为只有在你正在一个分支(master)上工作并与其他分支合并时,rebase才起作用?
git rebase -i origin/master
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
。这将让你重新排序(或以其他方式编辑)当前分支上的提交。
origin/master
上。经过我上面描述的三个步骤后,你的master
分支状态将为:origin/master
+ 你本地在master
上做的提交。 - rethabgit rebase -i origin/master
时,Git会将最新的更改从远程主分支拉到我的本地origin/master分支上吗?然后基于最新的远程主分支更改,在我的本地主分支上应用它们?还是git rebase -i origin/master
只是从我的本地origin/master分支获取提交(而不是拉取最新的远程主分支更改),并将其应用于我的本地主分支?谢谢。 - Lin Ma
git rebase
命令不会首先进行获取操作。git pull
方便命令执行两个操作:首先,它运行git fetch
。然后一旦成功完成获取,git pull
将运行git merge
或git rebase
中的任意一个。问题在于你必须预先选择要运行哪个(合并或变基),只有在获取之后才能确定哪个操作最佳。对于大多数人来说,大多数时间内变基更好;但是git pull
默认执行git merge
。因此,我建议完全避免使用git pull
:只需坚持使用git fetch
即可。然而,(继续) - torekgit pull
比运行两个命令更方便,那么请记住git pull --rebase
的意思是“先获取,然后变基”。你也可以设置你的配置,使得git pull
默认执行git rebase
(但我个人还是喜欢分别进行获取和变基)。 - torek