Git常用操作

把某些目录或文件加入忽略规则发现并未生效,原因是.gitignore只能忽略那些原来没有被追踪的文件,如果某

些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未

被追踪状态),然后再提交:

1
2
3
git rm -r --cached .
git add .
git commit -m 'update .gitignore'

使用场景:一不小心把 node_modules 目录加入git仓库了,导致仓库很大

核弹级操作,注意备份

1
git filter-repo --invert-paths --path node_modules
1
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}')"

将不需要的文件从历史记录的所有 tree 中移除

1
git filter-repo --invert-paths --path app/build

重新关联远程仓库

1
git remote add origin 项目地址
1
git push origin --all --force

在很多情况,我们由于疏忽会将一些敏感信息误传到Github上面去。 尽管我们可以使用git rm将包含敏感信息文件删除掉,然后重新提交上传,文件就不会在 GitHub 中的文件列表显示。 但是这并不能完全将敏感信息文件从 GitHub 中完全删除,commit history仍然会有敏感信息的文件的残留,我们仍然可以从 GitHub 中的commit history中访问到文件。

如果想要将敏感信息文件完全删除。不仅需要将文件从 GitHub 中的文件列表中删除,同时还需要将文件从 GitHub 的commit history中的 文件相关信息删除。

删除commit history文件相关信息,主要有两种方法:

  • filter-branch
  • BFG

本文只探讨filter-branch的使用

使用 git 自带的git filter-branch命令来实现。

此命令会将当前存在的文件也删除,注意备份。

1
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' --prune-empty --tag-name-filter cat -- --all

git filter-branch 已不再推荐使用,推荐使用 git filter-repo

1
git filter-repo --invert-paths --path PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA

上传覆盖 GitHub 的commit history

1
git push origin --force --all # (--all 作用于所有分支)

PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA 是你需要删除的敏感信息文件名

例如:

1
2
3
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch test/zhangsan.txt' --prune-empty --tag-name-filter cat -- --all
--
git filter-repo --invert-paths --path test/zhangsan.txt

以上命令就会删除test/zhangsan.txt

先cd到根目录,执行git config --global credential.helper store命令

1
# git config --global credential.helper store

执行之后会在.gitconfig文件中多加红色字体项

1
2
3
4
5
[user]
	email = 1624717079@qq.com
	name = bwcx
[credential]
	helper = store

之后cd到项目目录,执行git pull命令,会提示输入账号密码。输完这一次以后就不再需要,并且会在根目录生成一个.git-credentials文件

1
2
# git pull
# cat .git-credentials

之后pull/push代码都不再需要输入账号密码了~

如果这个时候,还是提示需要输入账号,那就要进项目的根目录,.git 目录的 config里 找到

1
2
[remote "origin"]
	url = http://192.168.1.10/test/test.git

修改这里的url

相关内容