從Git歷史中刪除大文件的完整解決方案

從Git歷史中刪除大文件的完整解決方案

當你意外提交了一個大文件導致無法推送到遠程倉庫時,可以按照以下步驟徹底從Git歷史中刪除這個大文件。

情況分析

首先確認你的問題屬于以下哪種情況:

  1. 大文件在最近一次提交中:相對容易處理
  2. 大文件在較早的提交中:需要重寫歷史
  3. 大文件已在遠程倉庫:需要協調團隊處理

解決方案

方案一:大文件在最近一次提交(未推送)

# 1. 從最新提交中移除文件但保留在本地
git rm --cached <大文件路徑>
# 2. 提交這個更改
git commit --amend
# 3. 確保.gitignore中添加該文件避免再次提交
echo "<大文件路徑>" >> .gitignore
git add .gitignore
git commit -m "添加.gitignore忽略大文件"

方案二:大文件在多個歷史提交中(需要重寫歷史)

# 1. 使用BFG Repo-Cleaner(推薦)
# 先下載bfg.jar
java -jar bfg.jar --delete-files <文件名> --no-blob-protection .# 或使用git filter-branch(Git內置)
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch <大文件路徑>" \
--prune-empty --tag-name-filter cat -- --all# 2. 清理本地倉庫
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now --aggressive# 3. 強制推送到遠程
git push origin --force --all
git push origin --force --tags

方案三:大文件已推送到遠程倉庫

# 1. 先按照方案二清理本地歷史
# 2. 通知團隊成員
# 3. 讓所有團隊成員執行以下操作:
git fetch origin
git reset --hard origin/<分支名>

詳細步驟說明

步驟1:識別大文件

# 查看倉庫中最大的文件
git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5# 或使用更直觀的工具
git ls-tree -r -t -l --full-name HEAD | sort -n -k 4 | tail -10

步驟2:使用BFG工具(推薦)

  1. 下載BFG工具:

    wget https://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar
    
  2. 運行清理:

    java -jar bfg-1.14.0.jar --delete-files <文件名> --no-blob-protection .
    
  3. 清理后操作:

    git reflog expire --expire=now --all
    git gc --prune=now --aggressive
    

步驟3:處理.gitignore

確保未來不會再次提交:

echo "<文件或文件模式>" >> .gitignore
git add .gitignore
git commit -m "更新.gitignore文件"

注意事項

  1. 重寫歷史的風險

    • 如果其他人已經基于這些提交工作,會導致嚴重問題
    • 只應在個人分支或協調團隊后操作
  2. 備份重要數據

    git bundle create backup.bundle --all
    
  3. 替代方案

    • 使用Git LFS管理大文件(如果確實需要版本控制)
    git lfs track "<文件模式>"
    git add .gitattributes
    
  4. 倉庫瘦身

    git repack -a -d --depth=250 --window=250
    

驗證結果

# 檢查倉庫大小
git count-objects -vH# 確認文件已從歷史中刪除
git log --all --find-object=<文件哈希>

完成這些操作后,你的倉庫應該可以正常推送到遠程了。記得通知團隊成員他們需要重新克隆倉庫或按照方案三中的步驟重置他們的本地分支。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84714.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84714.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84714.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[xiaozhi-esp32] 應用層(9種state) | 音頻編解碼層 | 雙循環架構

第三章&#xff1a;應用層 在第一章&#xff1a;開發板抽象層中&#xff0c;我們實現了硬件交互標準化&#xff1b;在第二章&#xff1a;通信協議層中&#xff0c;我們構建了云端通信橋梁。 現在需要將這些能力有機整合——這便是應用層的使命 應用層的本質 應用層是設備的…

Java 鎖升級的過程詳解

Java 鎖升級的過程詳解 Java 虛擬機(JVM)為了提高多線程并發的效率,對內置鎖(synchronized 關鍵字)的實現進行了一系列優化。這些優化體現在鎖的升級過程中,即當競爭程度從低到高變化時,鎖的狀態會從偏向鎖逐漸升級為輕量級鎖,最終升級為重量級鎖。這個過程是不可逆的…

使用vitis tcl腳本構建vitis app工程

一&#xff1a;最近重新學習了zynq系列開發&#xff0c;想著使用tcl創建工程&#xff0c;因此分享一下腳本例子 #!/bin/bashsource /tools/Xilinx/Vitis/2022.2/settings64.sh cd ../../ . ./script/project.sh cd app/script #tcl腳本只能在虛擬機桌面執行 xsct build_vitis…

電腦商城--購物車

加入購物車 1 購物車-創建數據表 1.使用use命令先選中store數據庫。 USE store; 2.在store數據庫中創建t_cart用戶數據表。 CREATE TABLE t_cart (cid INT AUTO_INCREMENT COMMENT 購物車數據id,uid INT NOT NULL COMMENT 用戶id,pid INT NOT NULL COMMENT 商品id,price BIG…

2024-2025學年度下期《網頁設計》期末模擬測試

一、 單選題 1. HTML文檔的根標簽是( ) A. <html> B. <head> C. <body> D. <!DOCTYPE> 2. 用于定義段落內容的標簽是&#xff1a;( ) A. <div> B. <p> C. <span> D. <br> 3. 網以下哪個屬性用于定義CSS內聯樣式…

搭建加解密網站遇到的問

本機向云服務器傳輸文件 用winscp 服務器在安裝 SSH 服務時自動生成密鑰對&#xff08;公鑰私鑰&#xff09; 為什么要有指紋驗證&#xff1f; 防止中間人攻擊&#xff08;Man-in-the-Middle&#xff09; 指紋驗證打破這個攻擊鏈&#xff1a; 小問題 安裝python時 ./confi…

CSS 制作學成在線網頁

1 項目結構 1.1 總結 2 網頁制作思路 3 header 區域 - 布局 3.1 通欄 3.2 logo 3.3 導航 3.4 搜索區域 3.5 用戶區域 4 banner 區域 4.1 左側側導航 4.2 右側課程表 5 精品推薦 6 推薦課程區域 參考鏈接&#xff1a; 82-準備工作-項目目錄與版心_嗶哩嗶哩_bilibili

圖靈完備之路(數電學習三分鐘)----門的多路化

上一章中我們學習了如何用與非門實現其他邏輯門&#xff0c;但上節中的輸入信號始終為2&#xff0c;但在現實中&#xff0c;輸入的信號數量是不確定的&#xff0c;所以我們需要設計多輸入的門&#xff1a; 1.三路與非門&#xff08;卡諾圖法&#xff09; 我們還是從與非門開始…

【前端】二進制文件流下載(get、post)再談一次

最近二進制文件流下載可謂是又出幺蛾子&#xff0c;翻閱以前的文章也找不到解決方案&#xff0c;感覺還是沒用完全理解&#xff0c;這次再整理一遍。 先說一個通用場景&#xff0c;就是無論get還是post在接口請求的時候設定好 headers: { Content-Type: application/json;cha…

uv功能介紹和完整使用示例總結

以下是關于 UV 工具的完整使用示例總結,結合其核心功能與典型場景,幫助用戶快速上手并高效管理 Python 項目: 一、安裝與配置 快速安裝 macOS/Linux:curl -LsSf https://astral.sh/uv/install.sh | shWindows:powershell -ExecutionPolicy ByPass -c "irm https://as…

MySQL啟動報錯“mysqld_safe Directory ‘/var/lib/mysql‘ don‘t exists“終極解決方案!從入門到高階全攻略

在MySQL的使用過程中&#xff0c;啟動報錯mysqld_safe Directory /var/lib/mysql dont exists是開發者經常遇到的問題。這個錯誤看似簡單&#xff0c;實則可能涉及目錄權限、系統配置、文件系統等多個方面。本文將結合官方文檔與實際經驗&#xff0c;從基礎到高級&#xff0c;為…

python 常見數學公式函數使用詳解

Python 數學公式與函數大全 Python 提供了豐富的數學計算支持&#xff0c;包括內置函數、標準庫&#xff08;math、cmath、numpy&#xff09;和第三方庫&#xff08;sympy、scipy&#xff09;。以下是常用數學公式和函數的分類整理&#xff1a; 1. 基本數學運算 1.1 算術運算…

阿里云服務器+寶塔面板發布網站

一、租用服務器 &#xff08;1&#xff09;、進入官網 阿里云-計算&#xff0c;為了無法計算的價值阿里云——阿里巴巴集團旗下公司&#xff0c;是全球領先的云計算及人工智能科技公司之一。提供免費試用、云服務器、云數據庫、云安全、云企業應用等云計算服務&#xff0c;以…

langchain框架中各種Agent(LLMSingleAgent ReactAgent Plan-and-Execute Agent)原理方式對比

在LangChain框架中&#xff0c;LLMSingleActionAgent與ReAct Agent及其他Agent類型在內部原理上存在顯著差異&#xff0c;主要體現在推理機制、行動策略、動態性等方面。以下結合實例進行詳細說明&#xff1a; 1. LLMSingleActionAgent的內部原理 LLMSingleActionAgent是LangC…

AI+預測3D新模型百十個定位預測+膽碼預測+去和尾2025年6月22日第116彈

從今天開始&#xff0c;咱們還是暫時基于舊的模型進行預測&#xff0c;好了&#xff0c;廢話不多說&#xff0c;按照老辦法&#xff0c;重點8-9碼定位&#xff0c;配合三膽下1或下2&#xff0c;殺1-2個和尾&#xff0c;再殺4-5個和值&#xff0c;可以做到100-300注左右。 (1)定…

電池模塊仿真 - 線性時不變降階模型

電池模塊熱設計挑戰 針對使用周期設計電池模塊存在幾個獨特的熱工程挑戰。 使用循環&#xff08;例如駕駛循環&#xff09;涉及可變的負載、速度和環境條件&#xff0c;要求電池在動態壓力下提供一致的性能。管理熱行為至關重要&#xff0c;因為波動的電流會產生熱量&#xf…

408第二季 - 組成原理 - IO方式II

繼續中斷 中斷優先級包括響應優先級和處理優先級 注意下面的&#xff0c;很多都是之前說的 這里的中斷向量的地址&#xff0c;就是下面的很粗的箭頭 一個很復雜的圖 然后記一下很復雜的東西 關中斷&#xff0c;保存斷點和中斷服務程序尋址都是之前講過的 繼續推進&#xff01;…

Spring AOP:橫切關注點的優雅解決方案

目錄 概要 和面向對象編程的區別 優點 AOP的底層原理 JDK動態代理技術 AOP七大術語 切點表達式 AOP實現方式 Spring對AOP的實現包括以下3種方式&#xff1a; 在本篇文章中&#xff0c;我們主要講解前兩種方式。 基于AspectJ的AOP注解式開發 定義目標類以及目標方法…

開源 Arkts 鴻蒙應用 開發(三)Arkts語言的介紹

文章的目的為了記錄使用Arkts 進行Harmony app 開發學習的經歷。本職為嵌入式軟件開發&#xff0c;公司安排開發app&#xff0c;臨時學習&#xff0c;完成app的開發。開發流程和要點有些記憶模糊&#xff0c;趕緊記錄&#xff0c;防止忘記。 相關鏈接&#xff1a; 開源 Arkts …

hot100 -- 16.多維動態規劃

1.不同路徑 問題&#xff1a; 一個機器人位于一個 m x n 網格的左上角 &#xff08;起始點在下圖中標記為 “Start” &#xff09;。 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角&#xff08;在下圖中標記為 “Finish” &#xff09;。 問總共有多少條…