簡體   English   中英

如何使用 git 中的分支跟蹤引用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM