3

这很奇怪。develop对我的本地分支和远程分支进行重新定位之间显然存在一些差异develop。以下是一些细节:

因此,假设我有一个功能分支,feat我一直在不时对其进行变基:

git pull --rebase origin develop

这工作正常。但是现在我已经完成并准备压缩我的提交,我注意到以下之间有很大的不同:

git rebase -i origin develop

git rebase -i develop

前者向我的编辑器提出了一个巨大的提交列表develop,其中没有一个是我对 的更改feat。它也将我切换到develop分支。后者只打开我的提交并打开我的编辑器,feat并没有将我切换到我的本地develop分支。

实际上是git rebase -i origin develop把我切换到我的本地develop,然后根据遥控器重新定位吗?那我应该git checkout develop; git pullgit checkout feat; git rebase -i develop吗?

4

1 回答 1

4
git rebase -i origin develop

不是用于 for 的正确语法rebase

git rebase -i develop
# or this, for the remote-tracking branch
git rebase -i origin/develop

是正确的语法。

官方的Linux Kernel Git 文档git rebase说这是通用语法(为了清楚起见省略了一些选项):

git rebase [-i] [<upstream>] [<branch>]

<upstream>分支在哪里:

<upstream>

要比较的上游分支。可以是任何有效的提交,而不仅仅是现有的分支名称。默认为当前分支的配置上游。

当你使用git rebase -i origin develop,origin是你的遥控器的名字,而不是一个分支。如果你想 rebase origin/develop,你需要使用路径分隔符/

git rebase -i origin/develop

至于你的问题:

实际上是git rebase -i origin develop将我切换到我的本地开发,然后针对远程进行重新定位?

它可能正在切换到您的 local develop,但由于语法甚至无效,我不能 100% 确定。我说的原因可能是因为rebase当你通过一个有效的上游分支和另一个分支时的行为是在对第一个分支进行变基之前检查第二个分支:

如果<branch>指定,将在执行任何其他操作之前git rebase执行自动。git checkout <branch>否则它会保留在当前分支上。

最后,如果您的 local不是 update-to-date 与您的 remote-tracking 分支git rebase -i developgit rebase -i origin/develop 可能会有所不同,例如您永远不会将更新合并到您的 local中。developorigin/developgit fetchdevelop

于 2013-09-06T22:07:13.617 回答