git - 将补丁集从 Gerrit pull 入当前分支

标签 git gerrit

我正在本地功能分支上工作。当我向 Gerrit 推送提交时,会创建一个更改,其他团队成员可以 checkout 。如果有人修改了我的提交并保留了提交的 Change-Id,则会在 Gerrit 上创建一个新的补丁集。

现在我想让其他团队成员发生变化。我只想在我当前的分支中使用 Gerrit 的最新补丁集。我没有进行任何其他更改,因此无需 merge 任何内容。

Gerrit 为补丁集 2 提供了一些下载链接,例如这些 Pull、Cherry Pick 和 Checkout 命令:

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 命令都会导致 merge 错误。 checkout 命令会 check out 一个分离的头,我可以从中创建一个新分支,然后在该新分支上工作——这可行,但我并不真的想为每个补丁集创建一个新分支。

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

最佳答案

在您的情况下,您不能使用“pull”或“c​​herry-pick”选项,因为两者都会根据您的原始提交创建一个新提交。

假设 B 是你的提交,C 是你的同事:

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

如果执行“pull ”命令:
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

关于git - 将补丁集从 Gerrit pull 入当前分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51743564/

相关文章:

git - 将 Gerrit 项目迁移到不同的 Gerrit 实例

git - 如何删除 GitHub 上的推送提交?

git - JGit 获取提交的时区

git - 如何在差异期间使用 git filter.gitignore.clean 过滤两个分支

git - Gerrit 服务器如何拦截提交。寻找技术细节

java - Gerrit 注册新电子邮件 500 错误

gerrit - 如何从 Git GUI 推送提交到 Gerrit 上的代码审查?

git - gerrit setup git repo——权限被拒绝

javascript - 测试 Travis 的 fork Github 项目?

git - 在 squash rebase 之后,如何让 git 分支历史与 master 匹配?