这很奇怪。对我的本地develop
分支和远程develop
分支进行重新定位之间显然存在一些差异。以下是一些细节:
所以,假设我有一个功能分支feat
,我一直在不断改变:
git pull --rebase origin develop
这很好用。但是现在我已经完成并准备压缩我的提交,我注意到:
之间存在很大差异git rebase -i origin develop
和
git rebase -i develop
前者使用来自develop
的 HUGE 提交列表显示我的编辑器,其中没有一个是feat
上的更改。它还会将我切换到develop
分支。后者只使用feat
上的提交调出我的编辑器,并且不会将我切换到我的本地develop
分支。
git rebase -i origin develop
实际上是否将我切换到我的本地develop
,然后对远程设备进行重新定位?我应该先git checkout develop; git pull
,然后git checkout feat; git rebase -i develop
吗?
答案 0 :(得分:4)
git rebase -i origin develop
不是用于rebase
的正确语法。
git rebase -i develop
# or this, for the remote-tracking branch
git rebase -i origin/develop
是正确的语法。
official Linux Kernel Git documentation for git rebase
表示这是一般语法(为清晰起见省略了一些选项):
git rebase [-i] [<upstream>] [<branch>]
其中<upstream>
是分支:
<upstream>
上游分支进行比较。可以是任何有效的提交,而不仅仅是现有的分支名称。默认为当前分支的已配置上游。
当您使用git rebase -i origin develop
时,origin
是您的遥控器的名称,而不是分支。如果您想要对origin/develop
进行折扣,则需要使用路径分隔符/
:
git rebase -i origin/develop
关于你的问题:
git rebase -i origin develop
实际上是否将我切换到我的本地开发,然后重新对抗遥控器?
它可能会切换到您的本地develop
,但由于语法甚至无效,我不是百分百肯定。我说的原因可能是因为rebase
在传递有效的上游分支时的行为而另一个分支是在对第一个分支进行重新定位之前检出第二个分支:
如果指定了
<branch>
,git rebase
将在执行任何其他操作之前执行自动git checkout <branch>
。否则它将保留在当前分支上。
最后,git rebase -i develop
和git rebase -i origin/develop
可能会有所不同 如果您的本地develop
未更新至今您的远程跟踪分支origin/develop
,就像您git fetch
一样,永远不会将更新合并到您的本地develop
。