在执行 'git pull --rebase' 后无法看到远程更改

6
我正在尝试执行“git pull --rebase”,但我没有看到任何远程更改。 当我执行“git status”时,我看到“您的分支领先于'origin / master' 12个提交。” 但是我当前在我的“dev”分支上,而不是在主分支上。
$ git branch
  master
* dev

我的“dev”分支应该跟踪“remotes/origin/dev”。
我只是想在“dev”上工作,并获取远程“dev”的更改。
但是我执行了“git pull --rebase”,它以某种方式将远程“master”更改拉到我的“dev”分支上。
请告诉我如何从我的情况中恢复?
1. 误操作地从远程“master”分支中移除我拉取的更改(在执行“git pull --rebase”之后)。 2. 将远程“dev”分支上的更改合并到我的“dev”分支上。
谢谢。
2个回答

5

看起来你的dev分支最初是基于origin/master而不是origin/dev,或者不知何故dev已经被更改为跟踪origin/master。你可以使用以下命令进行检查:

git config branch.dev.merge

如果显示的是refs/heads/master而不是refs/heads/dev,您可以使用以下命令更改dev分支的上游分支: ```git git branch --set-upstream-to=origin/dev upstream/master ```
git checkout dev
git branch --set-upstream dev origin/dev

接下来,为了修复你的分支,我会:

  1. 确保你在dev分支上,使用git checkout dev
  2. 确保git status干净
  3. 创建一个分支来保存你之前的状态(以便安全起见):git branch dev-wrongly-rebased
  4. 使用git reflog找到在你重新基于origin/master之前的提交
  5. dev重置为该点git reset --hard COMMIT-BEFORE-BAD-REBASE
  6. 最后,执行git rebase origin/dev

在重新基于时,我的偏好是分两步进行,例如:

git fetch origin
git rebase origin/dev

我认为这种方法比git pull --rebase更加可靠,因此建议使用。希望这对你有所帮助。


好的。我尝试过'git branch --set-upstream origin/dev',但它显示错误:未知选项`set-upstream'。我正在使用git 1.6.3.3。 - michael
啊,好的。升级是值得的,因为1.6.3版本是从2009年6月发布的,而现在git有许多新功能。然而,您可以使用"git config branch.dev.merge refs/heads/dev"来达到相同的效果。 - Mark Longair
(我假设之前的 branch.dev.merge 值和我猜测的一样吗?) - Mark Longair
谢谢。在“git config branch.dev.merge refs/heads/dev”中,我应该使用“refs/heads/dev”,而不是像您在“git branch --set-upstream”命令中输入的“refs/origin/dev”吗?当我执行“git branch -r”时,我看到的是“origin/dev”,而不是“heads/dev”。 - michael
@michael:是的,这很令人困惑,但 refs/heads/dev 是正确的。从远程存储库的角度来看,这是 ref 的名称,而不是本地存储库的名称。 - Mark Longair
显示剩余2条评论

0

您可以使用以下命令将提交移动到正确的远程分支上:

git rebase --preserve-merges --onto origin/dev start end

将指定起始和结束的一系列提交移动到dev分支。

然后,正确设置跟踪。如果您愿意,可以编辑.git/config文件并比较每个分支的跟踪设置,以确保一致的行为。

从现在开始,如果您获取了一个新的远程分支

git checkout -t origin/branch_name

或者,如果您正在将新分支推送到远程

git push -u origin branch_name

这些将按照您的要求设置跟踪。
希望对您有所帮助。

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