重新基线拉取请求

你可能会发现你的拉取请求 (PR) 过时了,需要重新基线。这可能由于以下几个原因发生

  • 你在 PR 中修改的文件与已经合并的更改冲突。

  • 你的 PR 已经很旧了,自动化测试基础设施发生了重大变化。

重新基线用于创建 PR 的分支将解决这两个问题。

配置你的远程仓库

在重新基线你的 PR 之前,你需要确保配置了正确的远程仓库。这些说明适用于 GitHub 上的任何仓库,包括集合仓库。在其他平台(bitbucket、gitlab)上,相同的原则和命令适用,但语法可能不同。我们以 ansible/ansible 仓库为例。在其他仓库中,分支名称可能不同。假设你以通常的方式克隆了你的 fork,origin 远程仓库将指向你的 fork。

$ git remote -v
origin  [email protected]:YOUR_GITHUB_USERNAME/ansible.git (fetch)
origin  [email protected]:YOUR_GITHUB_USERNAME/ansible.git (push)

但是,你还需要添加一个指向上游仓库的远程仓库。

$ git remote add upstream https://github.com/ansible/ansible.git

这将留下以下远程仓库

$ git remote -v
origin  [email protected]:YOUR_GITHUB_USERNAME/ansible.git (fetch)
origin  [email protected]:YOUR_GITHUB_USERNAME/ansible.git (push)
upstream        https://github.com/ansible/ansible.git (fetch)
upstream        https://github.com/ansible/ansible.git (push)

检查你的分支状态应该显示你的 fork 与 origin 远程仓库保持同步。

$ git status
On branch YOUR_BRANCH
Your branch is up-to-date with 'origin/YOUR_BRANCH'.
nothing to commit, working tree clean

重新基线你的分支

配置好 upstream 远程仓库后,就可以重新基线 PR 的分支。

$ git pull --rebase upstream devel

这将在上游 devel 分支中所做的更改之上重新播放你分支中的更改。如果有合并冲突,系统会提示你解决冲突,然后才能继续。

重新基线后,你的分支状态会发生变化。

$ git status
On branch YOUR_BRANCH
Your branch and 'origin/YOUR_BRANCH' have diverged,
and have 4 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
nothing to commit, working tree clean

不用担心,这是重新基线后的正常现象。你应该忽略 git status 中使用 git pull 的说明。我们将在下一部分中介绍下一步操作。

更新你的拉取请求

现在你已经重新基线了你的分支,你需要将你的更改推送到 GitHub 以更新你的 PR。

由于重新基线会重写 Git 历史记录,你需要使用强制推送。

$ git push --force-with-lease

你 GitHub 上的 PR 现在已经更新了。这将自动触发对你更改的测试。在测试完成后,你应该查看 PR 的状态,看看是否需要进一步更改。

获取重新基线的帮助

如果你需要有关重新基线 PR 的任何帮助,或者你有其他与开发相关的问题,请访问 Ansible 通信指南,了解如何联系社区。

另请参见

Ansible 开发周期

有关路线图、打开 PR、Ansibullbot 以及更多内容的信息