Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.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 分支/变更未合并,尽管Gerrit声称,它是_Git_Version Control_Gerrit - Fatal编程技术网

Git 分支/变更未合并,尽管Gerrit声称,它是

Git 分支/变更未合并,尽管Gerrit声称,它是,git,version-control,gerrit,Git,Version Control,Gerrit,每次,我在Gerrit中看到我的更改的merged状态,并且我做了git pull origin,我可以清楚地看到,我的更改/分支实际上还没有合并到master中 请检查我的Gerrit的工作流程,并告诉我,我做错了什么或我遗漏了什么: 在本地创建并签出分支 git签出-b77废话 做魔术和评论所有的变化 git提交-am“更改为77 blah” 使用UI创建同一分支,并将其修订设置为HEAD(此选项) 将更改(该特定分支)推送到Gerrit,并使用适当的引用: git checkout 77

每次,我在Gerrit中看到我的更改的
merged
状态,并且我做了
git pull origin
,我可以清楚地看到,我的更改/分支实际上还没有合并到master中

请检查我的Gerrit的工作流程,并告诉我,我做错了什么或我遗漏了什么:

  • 在本地创建并签出分支

    git签出-b77废话

  • 做魔术和评论所有的变化

    git提交-am“更改为77 blah”

  • 使用UI创建同一分支,并将其修订设置为
    HEAD
    (此选项)

  • 将更改(该特定分支)推送到Gerrit,并使用适当的引用:

    git checkout 77 blah

    git推送原点磁头:refs/for/77 blah

  • 访问Gerrit给我的URL,查看我的更改或等待其他人查看

  • 再次访问更改的URL,确保
    Status=Merged

  • 从Gerrit获取最新更改:

    git签出主机

    git拉入原点

  • 最后一个命令的结果以
    已经是最新的
    结束,这(如果我不笨的话)意味着我的主控是最新的。在正常的吉特回购中,这一点是正确的。我的
    master
    分支将是最新的,我最新的(
    77 blah
    )分支已经合并到它了

    在Gerrit上,我正在刷新我的网页,我目前正在使用该网页(当我在
    master
    )时,却发现在该特定分支中引入的所有更改都已消失,并且在创建最新分支之前,整个网站处于状态。Gerrit只声称我的
    主机是最新的

    我可以通过执行git branch-d 77 blah
    并得到结果来确认:

    error: The branch '77-blah' is not fully merged.
    If you are sure you want to delete it, run 'git branch -D 77-blah'.
    
    实际上,我必须在本地手动合并我最新的分支。我错过了什么

    什么意思(用Gerrit的话说)变更被合并了,而实际上根本没有合并?

    • 创建本地分支:
      git签出-b77 blah origin/master
    • 同时创建远程分支:
      git push origin 77 blah
      或通过Gerrit UI
    • 施展魔法,实现它
    • 确保本地分支是最新的-
      git pull
      (我建议
      git pull--rebase
    • 推送更改-
      git推送原点77 blah:refs/for77 blah
    • 将更改提交到远程分支
    • 如果需要,将77 blah中的更改合并到主分支,这一步在您的工作流中是不正确的-
      git checkout master
      ,使用
      git pull
      更新所有本地分支,而不是
      git pull origin
      ,因为这将由git作为
      git pull origin/master
      解决,在那里还没有新的更改。因此,将77 blah合并到master-
      git merge origin/77 blah
    • 将更改直接推送到远程主机
      git推送到源主机

    在您的两个类似问题中,一个共同的主题似乎是,您认为应该将本地主题分支推到Gerrit中同名的分支,并且提交更改(即,使更改显示为合并)意味着Gerrit应该将更改合并到
    master
    。这是不正确的

    当您推到
    refs/for/whatever
    并稍后提交该更改时,提交将在分支
    whatever
    上结束。不是
    master
    。如果希望更改在
    master
    中结束,则应推送到
    refs/for/master
    。因此,Git声称
    master
    是最新的是正确的(该分支不受您提交的
    77 blah
    更改的影响),Gerrit声称您的更改已被合并也是正确的(更改已合并为
    77 blah


    本地主题分支与服务器上维护的分支无关。在他们之间建立一种1:1的关系是很不寻常的,也很不可取的。事实上,在Gerrit服务器上创建分支(即拥有
    refs/heads/*
    的推送权限)通常是大多数用户无法执行的特权操作。他们可以做的是推送到
    refs/for/*
    上传他们的更改以供审查。他们当然可以在本地创建他们想要的任何分支。

    让我检查一下。“将更改提交到远程分支”是指审查UI中的更改并提交(因此Gerrit将“合并”它,无论对它意味着什么)?是的,我的意思是-它将把更改合并到相应的远程分支-而不是远程masterSo,你说,我可以创建任意多的本地分支,但始终使用
    refs/for/master
    推送,并且始终只推送主分支,而不创建任何远程分支?但是,如果我这样做的话,我会遇到依赖性的问题,我会有。有人告诉我,使用分支解决了这个问题,因为一个分支放弃的更改不会影响另一个分支的更改。你在这里的陈述怎么样?生活的问题是:是否在杰里特分支?:]如果您为每个独立的更改启动一个新的主题分支,那么最终不会产生任何内部提交依赖项。如果您仔细想想,当您推送一个或多个提交以供审阅时,实际上是在对存储库进行分支。只是您的分支是隐式的、短暂的,并且没有任何附加名称的用处。即使每次更改我都使用每个主题分支,我仍然只需要推送
    master
    分支(使用
    --all
    参数?),并且始终使用
    refs/for/master
    ?我做对了吗?为什么要使用
    --all
    选项?由于通常会推送当前签出的分支,
    git push origin HEAD:refs/for/master
    是一种很好的模式。我仍然不明白!我确实做到了,就像你告诉我的:创建本地分支(但不创建cor)