文章目錄
背景
清除 git 所有歷史提交記錄方案
清除 git 所有記錄的 bat 批處理腳本
背景
以前開發(fā)中未制定赚哗、遵循 git 管理項(xiàng)目標(biāo)準(zhǔn)辑奈,隨意(不規(guī)范)的提交 嚴(yán)重“污染了”提交歷史,使開發(fā)主線 “臟亂”;
基于以前的倉(cāng)庫(kù)重新開發(fā)残揉,這樣可保留以前的配置等文件,但是需要?jiǎng)h除全部的歷史記錄、tag符喝、分支等;
由于自己或其他方面特殊需求,需要保留倉(cāng)庫(kù)的部分屬性(創(chuàng)建時(shí)間甜孤,說明协饲,主頁(yè)等)畏腕,但需要清除歷史記錄,使其為“新庫(kù)”茉稠。
基于以上3方面的需求描馅,需要提供一個(gè) 在不刪除原倉(cāng)庫(kù)的前提下,清除原倉(cāng)庫(kù)的所有歷史提交記錄(包含:分支而线、tag) 解決方案铭污。
清除 git 所有歷史提交記錄方案
1.創(chuàng)建新分支
語(yǔ)法:git checkout --orphan <new_branch>
例句:git checkout --orphan latest_branch
使用 --orphan 選項(xiàng),可創(chuàng)建1個(gè)"清潔"分支(無任何的提交歷史膀篮,但是當(dāng)前分支的內(nèi)容一應(yīng)俱全况凉。但嚴(yán)格意義上說,這樣創(chuàng)建的分支還不是一個(gè)真正的分支各拷,因?yàn)镠EAD指向的引用中沒有commit值刁绒,只有在進(jìn)行一次提交后,它才算得上真正的分支烤黍。
注意:
新的分支名可以隨意命名知市,但不能和以前的分支名沖突。這兒特別強(qiáng)調(diào)是因?yàn)楹芏嗳肆?xí)慣默認(rèn)將分支名創(chuàng)建為 master
.
本文以 latest_branch
作為新分支名速蕊,這個(gè)名稱沒有任何特殊含義嫂丙,你可自定義,只要保證和以后的使用一致即可规哲。
2.添加所有文件
git add .
# 或 git add -A
3.commit代碼
git commit -m "自定義提交說明"
4.刪除原來的主分支(master)
git branch -D master
一般倉(cāng)庫(kù)默認(rèn)的主分支為 master 分支跟啤,如果原來的主分支不是 master, 用實(shí)際的主分支名代替。
5.把當(dāng)前分支重命名為master
git branch -m master
6.最后把代碼推送到遠(yuǎn)程倉(cāng)庫(kù)
注意: 有些倉(cāng)庫(kù)有 master 分支保護(hù)唉锌,不允許強(qiáng)制 push隅肥,需要在遠(yuǎn)程倉(cāng)庫(kù)項(xiàng)目里暫時(shí)把項(xiàng)目保護(hù)關(guān)掉才能推送。
git push -f origin master
注意: 推送前 需要使用 git remote -v 查看關(guān)聯(lián)的遠(yuǎn)程倉(cāng)庫(kù)的信息(主要是遠(yuǎn)程庫(kù)的別名)袄简。雖然遠(yuǎn)程庫(kù)的別名默認(rèn)是 origin ,但你可能設(shè)置過其他的別名(而非 origin).
推送前腥放,有的情況需要設(shè)置:git branch --set-upstream-to=origin/master master
。
7.從遠(yuǎn)程庫(kù)拉取更新代碼(測(cè)試)
git pull
如果別人pull不下來可以敲
git pull -r
8.確定清除歷史記錄的結(jié)果
# 1.查看提交日志
git log --pretty=oneline
# 2.查看分支信息
# 列出所有本地分支
$ git branch
# 列出所有遠(yuǎn)程分支
$ git branch -r
# 列出所有本地分支和遠(yuǎn)程分支
# $ git branch -a
# 3.查看 tag 信息
# 查看本地標(biāo)簽
git tag
# 查看遠(yuǎn)程標(biāo)簽
git ls-remote --tags
可登錄遠(yuǎn)程倉(cāng)庫(kù)再次確認(rèn)绿语。
清除 git 所有記錄的 bat 批處理腳本
這兒將上面的步驟封裝為 bat 批處腳本(針對(duì)windows)秃症,雙擊即可運(yùn)行。
文件名:fetch_push_clear_all_history.bat
將文本內(nèi)容保存為 UTF-8
格式吕粹,文件最好放在 git 倉(cāng)庫(kù)外种柑。如果放在 git 倉(cāng)庫(kù)內(nèi),需要將此文件在 .gitignore
中過濾匹耕。
chcp 65001
@echo off
set /p gd=輸入要清除歷史提交信息的倉(cāng)庫(kù)目錄的絕對(duì)路徑:
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 "查看新倉(cāng)庫(kù)信息:"
git log --pretty=oneline
git branch -a
git tag
git ls-remote --tags
pause
popd
exit