Reputation: 418
The refs/pull/*/head
refers to head of the PR but what about the refs/pull/*/merge
, I am not finding any git commits which are shown as part of /merge
in commit history. What does this /merge
exactly mean for a PR and when PR has multiple commits to it, when PR is open, When PR is closed etc
$ git ls-remote
From git@<repo url>
01c8cd97857c21cfc5d413bd64e3c0e8cc8fd03d HEAD
37b88346a9edb426f676d080be502a1d4349c499 refs/heads/PR1
6fda26f078c00adf518ec620e94f54daa85bb894 refs/heads/PR1-1
bd88e471db4127f066b3b2f1d699b8296ca62f6d refs/heads/PR5
25b5eec47ca186a778c93439cd81e8a4125b5d6f refs/heads/PR6
58a82cf11218991f8f544a14ef6c57d3963690ee refs/heads/PR7
a5831973e1a4561527551a8bc8a9d5f9436f004b refs/heads/Pr2
01c8cd97857c21cfc5d413bd64e3c0e8cc8fd03d refs/heads/develop
442c0bc7f8b3872660d48cbd42690be677314b94 refs/heads/master
37b88346a9edb426f676d080be502a1d4349c499 refs/pull/1/head
2db24e8a6a53ce006694c4c5db1886df44620372 refs/pull/1/merge
a5831973e1a4561527551a8bc8a9d5f9436f004b refs/pull/2/head
4ea1814dda65e2ca8572fbbc5da9cc8141391ab8 refs/pull/2/merge
6fda26f078c00adf518ec620e94f54daa85bb894 refs/pull/3/head
b6cde57523fc73ce08dd7e588eeb606c3f047136 refs/pull/3/merge
442c0bc7f8b3872660d48cbd42690be677314b94 refs/pull/4/head
58a82cf11218991f8f544a14ef6c57d3963690ee refs/pull/5/head
e4a82d455b8b8e81b70dfbf4f6d79a1fb5158cbb refs/pull/5/merge
bd88e471db4127f066b3b2f1d699b8296ca62f6d refs/pull/6/head
e8825e286aa9c36c04046c5d4ac85c9d7a4ebf5c refs/pull/6/merge
25b5eec47ca186a778c93439cd81e8a4125b5d6f refs/pull/7/head
ed262d8c4766b037207f3113b634c777b3a0af37 refs/pull/7/merge
for ex.
25b5eec47ca186a778c93439cd81e8a4125b5d6f refs/pull/7/head
ed262d8c4766b037207f3113b634c777b3a0af37 refs/pull/7/merge/
what is the significance of ed262d8c4766b037207f3113b634c777b3a0af37 refs/pull/7/merge/
and this commit id ed262d8c4766b037207f3113b634c777b3a0af37
is not found anywhere
Upvotes: 36
Views: 24928
Reputation: 59923
The refs/pull/<number>/merge
is a reference created by GitHub to keep track of what would happen if a pull request was merged. It references the merge commit between refs/pull/<number>/head
and the destination branch (e.g. master
).
You can think of it as a "future" commit. GitHub (as well as other Git-based collaboration platforms) use this technique to determine whether the pull request would successfully merge with all the checks passing and no merge conflicts.
Atlassian has a good explanation of the reasoning behind this server-side implementation detail here:
When you view a pull request, you’re seeing what the resultant merge commit will actually look like. We do this by actually creating a merge commit behind the scenes, and showing you the difference between it and the tip of the target branch.
They're obviously talking about Bitbucket, but the same applies to GitHub.
Upvotes: 54