[英]How can I track a reference with a branch in git?
我想在請求更新時使用 git 在本地跟蹤 Github 拉取請求(例如:添加了更多提交)。 Github 有一種方法,您可以通過查看只讀 refs/pull/ 來處理到達您的存儲庫的拉取請求。
換句話說,如果有人向我的倉庫提交拉取請求,我可以在本地檢索該請求:
git fetch upstream pull/123/head:123
git checkout 123
當有人然后更新該拉取請求時,問題就出現了。 我不知道如何更新本地分支,因為 git pull 無法更新我的本地副本:
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=<remote>/<branch> 123
我試過了:
git branch --set-upstream-to=upstream/refs/pull/123/head 123
git branch --set-upstream-to=upstream/refs/pull/123 123
git merge --ff-only refs/pull/123/head
merge: refs/pull/123/head - not something we can merge
我有同樣的問題,我想我會分享我是如何解決它的。
使用--set-upstream-to
的想法不起作用,導致遠程引用似乎不是分支。 這聽起來很奇怪,但我認為這與 ref 遠程存儲的位置有關(分支在 refs/heads 中,但拉取請求在 refs/pull 中)。
但是,您可以在 git 配置中為您的遙控器添加一個 refspec 到您的提取規則
fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
您甚至可以添加一個 git 別名,在您的 gitconfig 中向您的 refspecs 添加一個 pr 編號(並且可能是一個別名以在您完成后將其刪除)。 您可以在origin
之后使用任何您想要的東西,但這是一個常見的選擇。
這樣,當您執行git fetch origin
,git 也會更新 pr 的 ref。 差不多完成了:
git checkout -b pr/${prnum} --track origin/pr/${prnum}
完畢! 現在您的本地分支 pr/123 跟蹤 remotes/origin/pr/123。 后者是僅在您的本地存儲庫中有效的名稱,但每次執行 git fetch 時(包括執行 git pull 時),它都會與拉取請求分支保持同步。
注意:不太舊的 git 版本也應該允許將上面的 checkout 命令替換為
git checkout pr/123
這將創建分支pr/123
,並正確設置 ref remotes/origin/pr/123
的跟蹤。
git fetch origin pull/123/head:123
如果這項工作,這意味着你是從遠程origin
獲取,而不是遠程upstream
。
為了鏈接此 fetch 創建的 123 個本地分支,您需要:
git branch --set-upstream-to=origin/pull/123 123
如果有人更新了那個 PR,請檢查該 PR 是否不是 rebase。
如果是,則需要獲取 PR 分支並重置本地分支。
git fetch
git reset --hard 123 origin/pull/123
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.