將 GitHub PR 號碼做成 git ref

發佈於:

每次要合併別人的 PR 時,都覺得要開 Web UI 把 branch 名拷貝下來實在是很麻煩。稍微搜尋一下就找到一則鄉野文件,能讓人只用 git 指令就完事。基本上是個能直接在 git 倉儲中對照至 github PR 編號的方法。

GitHub 端看來一直有提供如 refs/pull/42/head 這種特殊的 ref,對應到 PR #42 最新進度。基本上只要加一點設定,就能讓 git 一直把這些特定的節點儲存在本地端倉儲。

先找到專案倉儲中 .git/config 中的這一段("origin" 對應到某個 github 專案):

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*

普通剛 git clone 下來之後,這段裡只會有一列 fetch,若再多加上一列,改成:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

則之後每次 git fetch 後, origin/pr/42 這隻 branch 會對應到 PR #42 最新的進度。

有了這步之後,要合併別人的 PR 就不必開 Web UI 去找 branch 名,只要知道號碼就可以:

git merge origin/pr/42

不知為何,找不太到 github 官方文件中對於此事的描述。附帶一提 gitlab 那邊也有支援類似的機制,但在 gitlab 不叫 "Pull Reqeust" 而是 "Merge Request"。設定為:

fetch = +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*