cguser

计算机图形学应用 | 张盼的博客

0%

git 清空历史记录

注意:历史记录很重要,不要随意清除,实在要清空的话就按照下面执行吧。(直接 copy 回车!😄)

1
2
3
4
5
6
7
8
git checkout --orphan latest_branch
git add -A
git commit -am "clear"
git branch -D master
git branch -m master
git push -f origin master
git branch --set-upstream-to=origin/master
git pull

和一朋友讨论了个更简单的做法:

先看第一版,他说直接 ssh 删远程库…
注意,这里为了使用方便我们使用 shell 文件,保存为cleargit.sh文件,然后双击

1
2
3
4
5
6
7
8
9
10
11
12
13
14
url=`git remote -v |grep -Po '(?<=origin).*?(?=\(fetch\))'`
host=`echo $url|grep -Po '.+?(?=:)'`
gitpath=`echo $url|grep -Po '(?<=:).*'`
# 这一行加不加,看你到底要本地仓库现在的代码
# 还是保持远程仓库最新的代码(加上,去掉注释)
# git pull origin master
mv .git/config .config
/usr/bin/rm -rf .git
git init
mv .config .git/config
git add --all -- :!/cleargit.sh
git commit -m reset
ssh $host "cd $gitpath;rm -rf *;git init --bare"
git push -u origin master

最终版

1
2
3
4
5
6
7
8
9
10
11
12
if [ -e .git/config ];then
# git pull origin
mv .git/config .config
/usr/bin/rm -rf .git
git init
mv .config .git/config
git add --all -- :!/cleargit.sh
git commit -m reset
git push -u origin master -f
else
echo 'Not a Git repository'
fi

加强版

防止手滑,使用这个版本,不然就欲哭无泪了😂

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash

while true
do
read -r -p "Are you sure you want to empty? [Y/n] " input
case $input in
[yY][eE][sS]|[yY])
echo "Yes"
if [ -e .git/config ];then
# git pull origin
mv .git/config .config
/usr/bin/rm -rf .git
git init
mv .config .git/config
git add --all -- :!/cleargit.sh
git commit -m reset
git push -u origin master -f
else
echo 'Not a Git repository'
fi
exit 0
;;

[nN][oO]|[nN])
echo "No"
exit 0
;;

*)
echo "Invalid input..."
;;
esac
done