代码之家  ›  专栏  ›  技术社区  ›  kapex

将补丁从gerrit拉入当前分支

  •  1
  • kapex  · 技术社区  · 6 年前

    我创建了一个本地特性分支,并将提交推送到gerrit。然后另一个团队成员拉动我的更改,并用相同的方法推动另一个提交 更改ID ,这将创建一个新的 补丁集 .

    现在,我想将本地分支更新到gerrit的最新补丁集。我没有做任何其他更改,因此不需要合并任何内容。

    Gerrit为补丁集2提供了一些下载链接,如下所示 , 樱桃摘 结帐 命令:

    git pull https://example.org/gerrit/ refs/changes/123/456789/2
    
    git fetch https://example.org/gerrit/ refs/changes/123/456789/2 && git cherry-pick FETCH_HEAD
    
    git fetch https://example.org/gerrit/ refs/changes/123/456789/2 && git checkout FETCH_HEAD
    

    但他们的工作方式不符合我的要求。pull和cherry pick命令都会导致合并错误。checkout命令签出一个分离的头,从中我可以创建一个新的分支,然后在这个新的分支上工作——这可以工作,但我不想为每个补丁集创建一个新的分支。

    是否有命令将新补丁直接加载到我当前的分支中?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Marcelo Ávila de Oliveira    6 年前

    在您的情况下,不能使用“拉”或“樱桃选择”选项,因为这两个选项都将基于您的原始提交创建一个新的提交。

    假设B是你的承诺,C是你的同事:

    A --- B <= YOUR-BRANCH
     \
      \-- C
    

    如果执行“拉”命令:

    A --- B --- D <= YOUR-BRANCH
     \         /
      \-- C --/
    

    如果执行“cherry pick”命令:

    A --- B --- D <= YOUR-BRANCH
     \
      \-- C
    

    正确的做法是执行“checkout”命令,然后执行另一个checkout以移动分支指针:

    git fetch https://GERRIT-SERVER/a/REPO refs/changes/CHANGE/PATCHSET && git checkout FETCH_HEAD
    git checkout -B YOUR-BRANCH
    

    你会得到:

    A --- B
     \
      \-- C <= YOUR-BRANCH
    
        2
  •  0
  •   kapex    6 年前

    基于中的命令 Marcelo Ávila de Oliveira's answer ,我现在使用以下等效的一行程序将当前分支重置为补丁集的状态:

    git fetch https://example.org/gerrit/ refs/changes/123/456789/2 && git reset FETCH_HEAD