徹底清除git所有歷史提交記錄使其為“新”庫

文章目錄

背景
清除 git 所有歷史提交記錄方案
清除 git 所有記錄的 bat 批處理腳本

背景

以前開發(fā)中未制定、遵循 git 管理項目標準,隨意(不規(guī)范)的提交 嚴重“污染了”提交歷史,使開發(fā)主線 “臟亂”;
基于以前的倉庫重新開發(fā),這樣可保留以前的配置等文件,但是需要刪除全部的歷史記錄、tag、分支等;
由于自己或其他方面特殊需求,需要保留倉庫的部分屬性(創(chuàng)建時間,說明,主頁等),但需要清除歷史記錄,使其為“新庫”。
基于以上3方面的需求,需要提供一個 在不刪除原倉庫的前提下,清除原倉庫的所有歷史提交記錄(包含:分支、tag) 解決方案。

清除 git 所有歷史提交記錄方案

1.創(chuàng)建新分支

語法:git checkout --orphan <new_branch>
例句:git checkout --orphan latest_branch

使用 --orphan 選項,可創(chuàng)建1個"清潔"分支(無任何的提交歷史,但是當前分支的內(nèi)容一應(yīng)俱全。但嚴格意義上說,這樣創(chuàng)建的分支還不是一個真正的分支,因為HEAD指向的引用中沒有commit值,只有在進行一次提交后,它才算得上真正的分支。

注意:

新的分支名可以隨意命名,但不能和以前的分支名沖突。這兒特別強調(diào)是因為很多人習(xí)慣默認將分支名創(chuàng)建為 master.
本文以 latest_branch 作為新分支名,這個名稱沒有任何特殊含義,你可自定義,只要保證和以后的使用一致即可。

2.添加所有文件

git add .
# 或 git add -A

3.commit代碼

git commit -m "自定義提交說明"

4.刪除原來的主分支(master)

git branch -D master

一般倉庫默認的主分支為 master 分支,如果原來的主分支不是 master, 用實際的主分支名代替。

5.把當前分支重命名為master

 git branch -m master

6.最后把代碼推送到遠程倉庫

注意: 有些倉庫有 master 分支保護,不允許強制 push,需要在遠程倉庫項目里暫時把項目保護關(guān)掉才能推送。

git push -f origin master

注意: 推送前 需要使用 git remote -v 查看關(guān)聯(lián)的遠程倉庫的信息(主要是遠程庫的別名)。雖然遠程庫的別名默認是 origin ,但你可能設(shè)置過其他的別名(而非 origin).

推送前,有的情況需要設(shè)置:git branch --set-upstream-to=origin/master master。

7.從遠程庫拉取更新代碼(測試)

git pull

如果別人pull不下來可以敲

git pull -r

8.確定清除歷史記錄的結(jié)果

# 1.查看提交日志
git log --pretty=oneline

# 2.查看分支信息
# 列出所有本地分支
$ git branch
# 列出所有遠程分支
$ git branch -r
# 列出所有本地分支和遠程分支
# $ git branch -a

# 3.查看 tag 信息
# 查看本地標簽
git tag
# 查看遠程標簽
git ls-remote --tags

可登錄遠程倉庫再次確認。

清除 git 所有記錄的 bat 批處理腳本

這兒將上面的步驟封裝為 bat 批處腳本(針對windows),雙擊即可運行。
文件名:fetch_push_clear_all_history.bat
將文本內(nèi)容保存為 UTF-8 格式,文件最好放在 git 倉庫外。如果放在 git 倉庫內(nèi),需要將此文件在 .gitignore中過濾。

chcp 65001
@echo off
set /p gd=輸入要清除歷史提交信息的倉庫目錄的絕對路徑:
echo 待處理的路徑:%gd%
set /p gm=輸入提交說明:
pushd
cd /d %gd%
git checkout --orphan latest_branch
git add -A
git commit -am "%gm%"
git branch -D master
git branch -m master
git push -f origin master
git pull
echo "已清除全部的歷史記錄!"
echo "查看新倉庫信息:"
git log --pretty=oneline
git branch -a
git tag
git ls-remote --tags
pause
popd
exit

抄襲此篇文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容