簡體   English   中英

本地 git 遠程倉庫丟失主分支

[英]local git remote repo lost master branch

在查看了 SO 答案后,我找不到任何與我認為我現在的問題相近的東西。

作為 git 的新手,我按照一些 newby 的建議開始了一個新項目。

我的設置:本地 NAS 具有原始的主 git 存儲庫,首先從代碼不受 git 控制的目錄中添加代碼。 使用 TortoiseGit (TG) 我添加了基本代碼並不斷修改、編譯和提交到本地 repo,然后推送到 NAS repo。

最初,一切都按照教程所示的方式進行,但有一次我想創建一個分支來測試旨在解決特定問題的代碼,該分支持續了一段時間並成為事實上的主分支。 在某個地方,我想將它合並回 master,但似乎我做出了一些錯誤的選擇,現在我假定的 master 和我的本地 repo 都不再有任何 master 分支,只有一個名為 Branch_new 的分支。

雖然理論上我認為我可以繼續這個貼錯標簽的分支,但我更願意回到更傳統的設置。

在這個階段,保留所有歷史記錄並不是很重要,我可以簡單地通過假裝當前代碼是我的初始基礎重新開始,但作為學習更多關於 git 做事方式的一部分,我會更喜歡學習如何從混亂的事情中解脫出來。

TIA

首先,並非一切都丟失了。 默認情況下,git 僅在兩周后清理未被任何分支引用的提交(參見git help gc )。 如果兩周還沒有過去,那么您可能會恢復您的工作。
現在找到這些提交可能會有點棘手。 有不同的方法可以實現這一點,我最喜歡 reflog。 您可以通過git reflog命令或查看.git/logs/HEAD下的原始文件來訪問它,這將顯示您去過的所有位置(提交),以及使 git 切換到該位置的命令提交或分支。
找到提交后,從中重新創建一個分支(以將其從垃圾收集中保存)就像git branch <branch_name> <commit>一樣簡單。 您可以通過git log <commit>預先驗證歷史記錄,因為所有提交都指向它們的祖先,因此您將擁有到目前為止的完整歷史記錄。

至於是什么導致您遇到的混亂,如果沒有 reflog 和所有命令的歷史記錄,我無法確定,從初始化存儲庫開始。 但是,我確實發現,新遙控器的大多數問題都是由於遙控器不是裸存儲庫而發生的(這聽起來像您所描述的情況)。 您推送的遙控器需要是裸露的,即沒有工作目錄,而只有 git 元數據(無論常規克隆通常在.git/下有什么)。 那是因為推送到已簽出分支的倉庫確實會造成混亂。
當初始化一個你想作為遠程的倉庫時(所以你可以推送它),你應該讓它裸露。 閱讀更多關於git init --baregit clone --bare的內容,這些應該讓您開始正確設置遙控器。
請注意,即使回購不是裸露的,您仍然可以從中克隆。 這導致了圍繞推送到新存儲庫的大部分混亂。

暫無
暫無

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

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