git rebase - 反对发展和原产地/发展的差异?

时间:2013-09-06 20:33:55

标签: git rebase

这很奇怪。对我的本地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吗?

1 个答案:

答案 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 developgit rebase -i origin/develop 可能会有所不同 如果您的本地develop未更新至今您的远程跟踪分支origin/develop,就像您git fetch一样,永远不会将更新合并到您的本地develop

相关问题