Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git说本地分支在远程分支之后,但它';不是_Git_Git Push - Fatal编程技术网

Git说本地分支在远程分支之后,但它';不是

Git说本地分支在远程分支之后,但它';不是,git,git-push,Git,Git Push,情景: 我开设了一个新分支 点击它 提交它 推它 再来点 再次提交 再次尝试推送 Git回应说: 更新被拒绝,因为当前分支的尖端已过期 它的遥远的对应物。等等 我是唯一一个侵入这根树枝的人——没有其他人碰它。远程分支实际上位于本地分支的后面。我根本不需要拉 (如果我确实拉,Git会报告两者之间的冲突,并强制我将分支合并到自身中) 为什么会发生这种情况?我如何诊断/修复它 明确地说,我没有在任何地方分支,也没有其他人在进行分支: Remote: Commit A -------- Commit B

情景:

  • 我开设了一个新分支
  • 点击它
  • 提交它
  • 推它
  • 再来点
  • 再次提交
  • 再次尝试推送
  • Git回应说:

    更新被拒绝,因为当前分支的尖端已过期 它的遥远的对应物。等等

    我是唯一一个侵入这根树枝的人——没有其他人碰它。远程分支实际上位于本地分支的后面。我根本不需要拉

    (如果我确实拉,Git会报告两者之间的冲突,并强制我将分支合并到自身中)

    为什么会发生这种情况?我如何诊断/修复它

    明确地说,我没有在任何地方分支,也没有其他人在进行分支:

    Remote: Commit A -------- Commit B  
    
    Local:  Commit A -------- Commit B -------- Commit C  
    
    C是B的直延,不涉及分支。但git认为C是a的一个分支:

    Remote: Commit A -------- Commit B  
    
                      ------- Commit C  
                    /  
    Local:  Commit A -------- Commit B  
    

    不是,;这是B的直接延续。

    你可能重写了一些历史?您的本地分支与服务器上的分支不同。运行此命令以更好地了解发生的情况:

    gitk HEAD @{u}
    
    我强烈建议您尝试了解此错误的来源。要修复此问题,只需运行:

    git push -f
    
    使用
    -f
    使其成为“强制推送”,并覆盖服务器上的分支。在团队中工作时,这是非常危险的。
    但是 因为你是一个人,并且确信你所在的州是正确的
    这应该没问题。如果不是这样的话,您可能会丢失提交历史记录。

    这发生在我尝试推动开发分支时(我使用的是git flow)。有人向master推送更新。为了解决这个问题,我做了:

    git co master
    git pull
    
    它获取了这些更改。那么

    git co develop
    git pull
    
    什么都没做。尽管有错误消息,我认为development分支已经启动了。现在一切都是最新的,没有错误。

    要进行诊断,请遵循

    但要解决它,知道你是唯一一个改变它的人,请执行:
    1-备份您的项目(我只备份了git上的文件,./src文件夹)
    2-
    git pull

    3-恢复对许多“混乱”文件的备份(带有合并指示器)

    我尝试了
    git pull-s recursive-X ours
    但是没有按照我想要的方式工作,这可能是一个选项,但是首先备份


    确保差异/更改(在git gui上)为零。这是我的情况,根本没有什么可合并的,但github一直说我应该合并…

    解决方案非常简单,对我来说很有效

    试试这个:

    git pull --rebase <url>
    

    git remote-v
    git show remote origin
    (假设origin是您遇到问题的遥控器)的输出可能会有所帮助,就是这样。在第二步,我做了一个“修正最后一次提交”,然后推,然后再黑一些,然后再次尝试推。我误解了修正案的工作方式。谢谢这似乎真的很有用-但是有人能解释一下“HEAD{u}”语法吗?
    HEAD
    {u}
    都指提交。他们告诉gitk要显示哪些分支
    HEAD
    指当前签出的分支,
    @{u}
    HEAD{u}
    的缩写,表示当前签出分支的上游分支。因此,例如,
    master
    ,通常是
    origin/master
    。具有相同的场景-必须重新扫描并合并冲突。使用
    gitk
    帮助很大!如果我在本地(不是ammend)进行许多简单的提交并尝试推送,就会发生这种情况。我知道没有其他人在github上改变事情。Gitk确实显示远程与本地不同,尽管它是预期的,但它应该显示本地为比远程更新的版本,而不是远程为分叉(看起来像这样,我不知道Gitk有多少要说)
    git push -u origin master