我应该在 gerrit 中挑选或签出一个提交以在它之上工作吗?

Should I cherry pick or checkout a commit to work on top of it in the gerrit?

我的一个同事提交了一个代码,它在 Gerrit 中,但在 master 中没有。我想在此基础上工作。

我应该创建一个本地分支并挑选他的提交并在其上工作,还是应该签出他的代码并创建一个本地分支并在其上工作。

哪种方法正确?

如有任何帮助,我们将不胜感激

获取并检查他的提交,我称之为无名分支(类似于 refs/changes/xx/yyyxx/1 的引用),然后对其进行处理。它是分离的 HEAD 状态还是创建本地分支都没有关系。提交后,推送到 refs/for/<branch>。你的承诺和他的意愿是相关的。

更新:

如果您不关心历史,可以挑选他的提交然后在其上进行处理,因为最终修订版的文件内容在两种方式中都是相同的。区别在于分支历史。如果你检查他的然后在它上面工作,历史将是线性的。至少你们两个提交的部分是线性的。如果你挑选他的然后在它上面工作,你会看到两个分支合并了。一个是你本地的分行,一个是他本地的分行。他们是分歧的。在你的分支上精心挑选的提交是多余的。将来某天有人看到历史,他可能会一头雾水,问为什么你们都对同一个chunk进行修改。

此外,由于您使用的是 Gerrit,因此可能存在让您烦恼的潜在风险。当您挑选他的提交时,将创建一个新的提交。这两个提交具有相同的提交消息,包括 Change-Id。你的同事已经推送了他的,如果他已经是 submitted/merged,你的同事将被 Gerrit 阻止,因为在这种情况下,Gerrit 不允许将具有相同 Change-Id 的第二次提交推送到同一个分支.如果他的仍然开放,那么你的将修改他的作为第二个补丁集。但恐怕你的 Gerrit 也禁止修改其他人的承诺。即使它允许你修改他的提交,也不是预期的。无论如何,它要么失败,要么行为不当。据我所知,这非常令人沮丧,尤其是当其他人催促您尽快完成它时。

执行以下操作:

1) 在 Gerrit 上找你的同事更改

2) 单击下载 > 结帐 > "Copy to clipboard" 按钮

3) 在本地存储库中执行复制的命令

git fetch https://USER@GERRIT-SERVER/a/REPO-FULL-PATH refs/changes/CHANGE-NUMBER/CHANGE-PATCHSET && git checkout FETCH_HEAD

4) 创建本地分支机构来管理您的工作

git checkout -b LOCAL-BRANCH

5) 进行更改

6) 添加并提交您的更改

git add .
git commit

7) 推送到 Gerrit 进行审核

git push origin HEAD:refs/for/master

注意:您的更改取决于您同事的更改。如果 he/she 推送一个新的补丁集(例如修复一些审查问题),您需要将您的更改重新定位到新的补丁集。如果 he/she 放弃更改,则需要放弃您的更改或根据 master 进行返工。避免基于未决更改工作,如果可能的话,总是喜欢基于合并的更改工作。