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