为什么对 master 的更改没有出现在我的 GitHub 合并头中?
Why are changes to master not appearing in my GitHub merge heads?
我正在解决 TeamCity 构建 GitHub 拉取请求的问题,如 this blog post 中所述,我正在尝试在本地复制结帐行为。
这是我要执行的步骤顺序:
// in /projects/semver_demo/master
git checkout master
echo "Hello World!" > master.txt
git add .
git commit -m "edited master.txt"
git push
git branch foo
echo "Hello World!" > foo.txt
git add foo.txt
git push
现在我转到 GitHub,从分支 foo
打开 pull request #123。然后在我在不同文件夹中检出的单独回购中,我正在检查我认为是当前 merge head 的拉取请求 #123:
// in /projects/semver_demo/merged
git fetch origin refs/pull/123/merge:pr123
git checkout pr123
好的,到目前为止一切顺利 - 我在包含我的功能的分支上。现在,我要回到我的工作文件夹,模拟对 master 进行一些更改,据我所知,当我再次获取合并头时应该会出现这些更改。
// in /projects/semver_demo/master
git checkout master
echo "Hello again!" >> master.txt
git add master.txt
git commit -m "Added another line to master.txt"
git push
现在,切换回我的 feature_branch 文件夹并删除并重新获取合并头:
// in /projects/semver_demo/merged
git checkout master
git branch -D pr123
git fetch origin refs/pull/123/merge:pr123
git checkout pr123
执行此操作时,我希望在 merged/master.txt
中看到新的 "Hello again!" 消息,但我没有 - 我看到的是与现有版本相同的 master.txt
创建分支时。
我的理解是,合并头相当于将当前的主分支(或上游分支)合并到功能分支的当前 HEAD 中——但这不是我所看到的。我是否错过了一些微妙的步骤来告诉 Git 到 "re-merge" 合并头?还是我完全误解了 merge heads 的目的?
编辑: 经过更多调查,将更改推送到 foo
确实会导致合并头反映对 master
的最新更改...但将更改推送到 master
不会。我现在想知道这种行为是否是设计使然?
我已经通过 GitHub 支持验证合并头仅在将更改推送到头分支时更新;它们不会更新以反映对基本分支的更改 - 因此,如果您基于拉取请求合并头构建预发布包,请始终在构建包之前立即将更改推送到 PR 分支。如果您正在使用 VCS 触发器来开始您的包构建,这无论如何都应该发生,所以我认为这是在现实生活中实际上不会经常发生的那些模糊的边缘案例之一。
在 http://www.dylanbeattie.net/2017/01/semantic-versioning-with-powershell_26.html
上有更详细的说明,以及它如何影响我们正在使用的 GitHubFlow 工作流程
我正在解决 TeamCity 构建 GitHub 拉取请求的问题,如 this blog post 中所述,我正在尝试在本地复制结帐行为。
这是我要执行的步骤顺序:
// in /projects/semver_demo/master
git checkout master
echo "Hello World!" > master.txt
git add .
git commit -m "edited master.txt"
git push
git branch foo
echo "Hello World!" > foo.txt
git add foo.txt
git push
现在我转到 GitHub,从分支 foo
打开 pull request #123。然后在我在不同文件夹中检出的单独回购中,我正在检查我认为是当前 merge head 的拉取请求 #123:
// in /projects/semver_demo/merged
git fetch origin refs/pull/123/merge:pr123
git checkout pr123
好的,到目前为止一切顺利 - 我在包含我的功能的分支上。现在,我要回到我的工作文件夹,模拟对 master 进行一些更改,据我所知,当我再次获取合并头时应该会出现这些更改。
// in /projects/semver_demo/master
git checkout master
echo "Hello again!" >> master.txt
git add master.txt
git commit -m "Added another line to master.txt"
git push
现在,切换回我的 feature_branch 文件夹并删除并重新获取合并头:
// in /projects/semver_demo/merged
git checkout master
git branch -D pr123
git fetch origin refs/pull/123/merge:pr123
git checkout pr123
执行此操作时,我希望在 merged/master.txt
中看到新的 "Hello again!" 消息,但我没有 - 我看到的是与现有版本相同的 master.txt
创建分支时。
我的理解是,合并头相当于将当前的主分支(或上游分支)合并到功能分支的当前 HEAD 中——但这不是我所看到的。我是否错过了一些微妙的步骤来告诉 Git 到 "re-merge" 合并头?还是我完全误解了 merge heads 的目的?
编辑: 经过更多调查,将更改推送到 foo
确实会导致合并头反映对 master
的最新更改...但将更改推送到 master
不会。我现在想知道这种行为是否是设计使然?
我已经通过 GitHub 支持验证合并头仅在将更改推送到头分支时更新;它们不会更新以反映对基本分支的更改 - 因此,如果您基于拉取请求合并头构建预发布包,请始终在构建包之前立即将更改推送到 PR 分支。如果您正在使用 VCS 触发器来开始您的包构建,这无论如何都应该发生,所以我认为这是在现实生活中实际上不会经常发生的那些模糊的边缘案例之一。
在 http://www.dylanbeattie.net/2017/01/semantic-versioning-with-powershell_26.html
上有更详细的说明,以及它如何影响我们正在使用的 GitHubFlow 工作流程