Git報(bào)錯(cuò):fatal:refusing?to?merge?unrelated?histories問題解決過程
最近我在同步一個(gè)深度學(xué)習(xí)課程代碼庫(kù)時(shí),因?yàn)檎`刪了本地的 .git 文件夾,遭遇了一個(gè)經(jīng)典的 Git 報(bào)錯(cuò)。
本文將復(fù)盤這次錯(cuò)誤的解決過程。
1. 事故現(xiàn)場(chǎng):誤刪 .git 引發(fā)的問題
事情的起因是我不小心刪除了項(xiàng)目根目錄下的 .git 文件夾。為了挽救,我直接在當(dāng)前目錄執(zhí)行了 git init 重新初始化了一個(gè)倉(cāng)庫(kù),并嘗試?yán)∵h(yuǎn)程代碼。
然而,當(dāng)我執(zhí)行 git pull upstream master 時(shí),Git 拋出了一個(gè)致命錯(cuò)誤:
fatal: refusing to merge unrelated histories
這是什么意思?
Git 認(rèn)為我本地的代碼歷史和遠(yuǎn)程倉(cāng)庫(kù)的歷史完全不是一回事。
確實(shí),當(dāng)我執(zhí)行 git init 時(shí),我創(chuàng)建了一個(gè)全新的、沒有歷史的倉(cāng)庫(kù),而遠(yuǎn)程倉(cāng)庫(kù)已經(jīng)有了很多提交記錄。
在 Git 眼里,這是兩個(gè)平行宇宙的項(xiàng)目。
2. 解決方案與反思
雖然可以通過添加 --allow-unrelated-histories 參數(shù)強(qiáng)制合并來解決這個(gè)問題,但這往往會(huì)導(dǎo)致大量的沖突,且邏輯上并不嚴(yán)謹(jǐn)。
3.如何正確同步 Fork 的代碼?
可以參考我的另一篇文章:Git同步上游代碼
最徹底的修復(fù)方案是“重新克隆”:
- 備份:先把本地修改過的代碼文件備份出來。
- 重克隆:重新執(zhí)行
git clone,獲取一份干凈的、帶有完整歷史記錄的項(xiàng)目。 - 恢復(fù):將備份的代碼覆蓋回去。
這一步操作讓我意識(shí)到,保持本地 Git 歷史記錄的完整性是多么重要。
4.總結(jié)
通過這次“誤刪 .git”的小插曲,我深刻理解了 Git 的提交歷史(History)機(jī)制以及遠(yuǎn)程分支管理的重要性。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Websocket的用法及常見應(yīng)用場(chǎng)景
本文詳細(xì)介紹了WebSocket的基本概念、特點(diǎn)、與HTTP的區(qū)別、常見應(yīng)用場(chǎng)景、實(shí)例以及心跳機(jī)制,WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的協(xié)議,適用于實(shí)時(shí)數(shù)據(jù)傳輸場(chǎng)景,如實(shí)時(shí)聊天、實(shí)時(shí)協(xié)作、實(shí)時(shí)數(shù)據(jù)推送等2025-12-12
詳解Metrics應(yīng)用監(jiān)控指標(biāo)的使用說明
這篇文章主要為大家詳細(xì)的介紹了Metrics應(yīng)用監(jiān)控指標(biāo)的使用說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02
VScode設(shè)置語言為中文以及解決中文注釋亂碼問題
VSCode默認(rèn)是英文語言環(huán)境,習(xí)慣了用中文,下面這篇文章主要給大家介紹了關(guān)于VScode設(shè)置語言為中文以及解決中文注釋亂碼問題的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12
fiddler抓包小技巧之自動(dòng)保存抓包數(shù)據(jù)的實(shí)現(xiàn)方法分析【可根據(jù)需求過濾】
這篇文章主要介紹了fiddler抓包小技巧之自動(dòng)保存抓包數(shù)據(jù)的實(shí)現(xiàn)方法,較為詳細(xì)的分析了fiddler自動(dòng)保存抓包數(shù)據(jù)及根據(jù)需求過濾相關(guān)操作技巧,需要的朋友可以參考下2020-01-01

