将更新应用到历史上的 git 补丁时正确的工作流程是什么

What is the right workflow when applying an update to a git patch back in history

我已经向 Gerrit 服务器提交了一系列补丁以供审查,它们都在同一个项目中按时间顺序排列。 现在其他人已将更新推送到序列中的第一个补丁之一,我想将其从 gerrit 中拉下来进行测试。 这样做的正确步骤是什么? 我知道我可以 git reset --hard 回到补丁之前,然后 cherry-pick 或 repo 一个一个地下载每个补丁。由于它只是一个真正改变的补丁,所以我觉得有点矫枉过正。 有更好的方法吗?

在您的历史记录中找到某人更新的提交的提交哈希,并签出该哈希,例如

$ git checkout 1358ffb  # use your own hash here

然后在那里创建一个分支并结帐

$ git checkout -b new_branch

由于有人用另一个覆盖了您的提交,我们需要替换它。重置为提交的父项。

$ git reset --hard HEAD^

现在您可以在这里从 gerrit 中挑选 'update commit'。请注意,此命令只是一个示例,您需要使用自己的详细信息和 url 等。基本上只需从 gerrit web UI.[=16 复制粘贴 cherry-pick url =]

$ git fetch ssh://kimusan@example.com:29418/project-name refs/changes/04/104/1 && git cherry-pick FETCH_HEAD

现在我们需要将其他提交变基到此。 Checkout master(或树顶部的任何内容)并将其重新定位到 new_branch

$ git checkout master
$ git rebase new_branch

Git 现在会将您在刚刚更新的提交之后所做的所有提交放回其上。如果需要

,您现在可以删除new_branch
$ git branch -d new_branch