git 常用命令
1. 新建远程仓库
- 在 github.com 上新建 repository :xxxx , 链接为:https://github.com/shenbo/xxxx.git
- 本地新建文件夹:xxxx
1
2
3
4
5
6
7cd ~/xxxx
git init
git add .
git commit -m "first commit"
git remote add origin https://github.com/shenbo/xxxx.git
git push -u origin master
2. 远程仓库操作
- 检出仓库:
git clone https://github.com/shenbo/xxxx.git
- 拉取仓库:
git pull [remoteName] [localBranchName]
- 推送仓库:
git push [remoteName] [localBranchName]
- 显示日志:
git log -1 --stat
# 显示最近一次commit的更改统计概述
3. 放弃本地修改,强制更新
1 | git fetch --all |
3. 暂存本地修改
1 | # 暂存 |
4. 配置SSH
4.1 生成 ssh key
- 打开git bash,设置用户名,并生成
ssh-key
。1
2
3
4
5
6
7
8git config --global user.name "shenbo"
git config --global user.email "[email protected]"
ssh-keygen -t rsa -b 4096 -C "[email protected]"
eval $(ssh-agent -s) # start the ssh-agent in the background
ssh-add ~/.ssh/id_rsa # add SSH private key to the ssh-agent
ls ~/.ssh # lists the files in your .ssh directory
现在github推荐使用新的 Ed25519 加密算法
https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
1 | git config --global user.name "shenbo" |
4.2 将 ssh 公钥添加到远程服务器
如果是连接远程服务器,可使用 ssh-copy-id
命令。
1 | ssh-copy-id -i ~.ssh/id_ed25519.pub [email protected] |
4.3 将 ssh 公钥添加 github.com
复制
~/.ssh/id_ed25519.pub
在 github.com 个人设置页面,点击新建或添加 SSH key,将
id_ed25519.pub
内容复制进去。测试 git 客户端与 github 是否连接成功。
1
ssh -T [email protected]
如果连接报错
ssh: connect to host github.com port 22: Connection > refused
, 打开/新建~/.ssh/config
,修改内容如下,重新测试。
1 | Host github.com |
5. 永久删除文件(包括历史记录)
5.1 删除文件命令:
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
5.2 删除文件夹命令:
1
2
3git filter-branch --force --index-filter \
'git rm --cached -r --ignore-unmatch PATH-TO-YOUR-FLODER-WITH-SENSITIVE-DATA' \
--prune-empty --tag-name-filter cat -- --all5.3 把文件或文件夹添加到.gitignore文件里:
1
2
3echo "YOUR-FILE-WITH-SENSITIVE-DATA" >> .gitignore
git add .gitignore
git commit -m "Add YOUR-FILE-WITH-SENSITIVE-DATA to .gitignore"5.4 然后以强制覆盖的方式推送repo, 命令如下:
1
2git push origin master --force
git push origin master --force --tags5.5 清理和回收空间:
1
2
3git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now5.6 另外,可以通过 rev-list 命令来找到仓库记录中的大文件:
1
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"