簡體   English   中英

如何從 git config 中的跟蹤分支重新初始化頭?

[英]How can I reinitialize heads from tracking branches in git config?

如果我跑,

$ git branch -t 86 upstream/86
Branch '86' set up to track remote branch '86' from 'upstream'.

我可以看到發生了兩件事

  • 一個條目被添加到.git/config

     [branch "86"] remote = upstream merge = refs/heads/86
  • 為對應的分支創建一個 ref 文件,./. ./.git/refs/heads/86

如果我刪除這個文件,. .git/config . .git/config ./.git/refs/heads/86 .git/config ./.git/refs/heads/86 .git/config ./.git/refs/heads/86.git/config中剩余的條目嗎? 有沒有我可以運行的命令來重新創建所有的頭(目錄中的文件)? 或者我必須重新運行我最初運行的所有命令來創建它們?

如果您檢查了該分支,則git reset --soft origin/86將執行( --soft僅執行HEAD更新,默認重置--mixed還會重新加載索引條目;-- --hard還會重置工作樹)。

如果你不這樣做(或者不管怎樣,真的,不管怎樣,這都有效),現在是核心命令時間: git update-ref refs/heads/86 origin/86

編輯:要批量執行此操作,您可以從配置條目生成更新命令, git update-ref有一個--stdin參數和一個用於進行批量更新的小命令解釋器。

我正在使用 ansible 為 git 配置文件提供遠程跟蹤信息,這是唯一一種由於 git config 和遠程引用之間的同步問題而將內容放入配置文件不足的情況。 所以我想從 .gitconfig 重新創建遠程引用。

那應該是你的引導段落。

假設您使用的是標准 refspecs +refs/heads/*:refs/remotes/$remote/*合理的,假設一切都來自origin合理性稍低,但我會將其推廣到多個遙控器或自定義refspecs 作為讀者的練習:

git config --get-regexp ^branch\..*\..merge \
| awk -F'[. /]' '{print "update refs/heads/"$2" origin/"$NF}' \
| git update-ref --stdin

要實際創建遠程引用,您必須運行git fetch ,如果您沒有對象,則通過git ls-remote並手動創建引用將無濟於事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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