在';git pull——重新基址';

在';git pull——重新基址';,git,Git,我正在尝试做一个“git拉动——再基础”,但我没有看到任何远程更改。 当我执行“git status”时,我看到“您的分支比“origin/master”早12次提交” 但我现在在我的“开发”分支,而不是大师 $ git branch master * dev 我的“dev”分支应该跟踪“remotes/origin/dev” 我想要的是我正在“开发”上工作,我想在远程开发上获得远程更改 但我做了“git pull--rebase”,这是如何将远程“master”更改拉到我的“dev”分支

我正在尝试做一个“git拉动——再基础”,但我没有看到任何远程更改。 当我执行“git status”时,我看到“您的分支比“origin/master”早12次提交”

但我现在在我的“开发”分支,而不是大师

$ git branch
  master
* dev
我的“dev”分支应该跟踪“remotes/origin/dev”

我想要的是我正在“开发”上工作,我想在远程开发上获得远程更改

但我做了“git pull--rebase”,这是如何将远程“master”更改拉到我的“dev”分支的

你能告诉我怎样才能从我的处境中恢复过来吗

  • 错误地删除我从远程“master”分支拉入的更改(在我执行“git-pull--rebase”之后)

  • 将远程“dev”分支上的更改拉入我的“dev”分支


  • 谢谢。

    听起来好像您的开发分支最初是基于
    origin/master
    而不是
    origin/dev
    ,或者无论如何
    dev
    已更改为跟踪
    origin/master
    。您可以通过以下方式进行检查:

    git config branch.dev.merge
    
    如果显示的是
    refs/heads/master
    而不是
    refs/heads/dev
    ,则可以使用以下命令更改
    dev
    分支的上游分支:

    git checkout dev
    git branch --set-upstream dev origin/dev
    
    那么,为了修复您的分支,我将:

  • 确保您使用的是
    git checkout dev
  • 确保
    git状态
    是干净的
  • 创建一个分支以保存您所在的位置(出于安全考虑):
    git branch dev错误地重新设置了基址
  • 使用
    git reflog
    在重新基于
    origin/master
  • dev
    重置到该点
    git Reset--hard COMMIT-BEFORE-BAD-REBASE
  • 最后,执行git-rebase-origin/dev
  • 我在重定基址时的偏好始终是分两步进行,例如:

    git fetch origin
    git rebase origin/dev
    

    。。。因为我认为这比git-pull-rebase更不容易出错。我希望这会有一些用处。

    您可以使用

    git rebase --preserve-merges --onto origin/dev start end
    
    对于由start和end指定的要移动到dev的提交范围

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

    从现在起,你们中的大多数人将获得一个新的远程分支

    git checkout -t origin/branch_name
    
    或者如果您正在将新分支推送到远程

    git push -u origin branch_name
    
    这些将设置你想要的跟踪


    希望这有帮助。

    好的。我尝试过“git branch——设置上游源代码/dev”,但它说的是错误:未知选项“设置上游”。我使用的是Git1.6.3.3Ah,好的。它值得升级,因为1.6.3是从2009年6月开始的,现在git中有很多不错的新特性。但是,您应该能够使用
    git config branch.dev.merge refs/heads/dev
    获得相同的效果(我假设
    branch.dev.merge
    之前的值与我猜的一样?)谢谢。在'git config branch.dev.merge refs/heads/dev'中,我应该使用'refs/heads/dev'?不是“refs/origin/dev”?就像你在'git branch--set upstream'命令中输入的一样?当我做'git branch-r'时,我看到的是origin/dev,而不是heads/dev。@michael:是的,我担心这会让人困惑,但是
    refs/heads/dev
    是正确的。从远程存储库的角度来看,它是ref的名称,而不是本地存储库。