# 常用命令
# 配置
$ git config --global user.name "[name]" # 设置昵称
$ git config --global user.email "[email]" # 设置邮箱
# 仓库
$ git init # 创建本地仓库
$ git init --bare # 创建本地仓库 无工作区
$ git clone [url] # 克隆远程仓库
$ git remote -v # 查询远程仓库信息
$ git remote add origin [url] # 关联远程仓库
$ git remote rm origin # 取关远程仓库
# 提交
$ git status # 查看工作区状态
$ git add [filepath] # 添加文件至暂存区
$ git add -A # 添加所有文件暂存区
$ git commit -m "" # 提交文件至版本库
$ git commit --allow-empty-message # 提交文件至版本库不带信息
$ git checkout -- [filepath] # 恢复暂存区文件
$ git reset --hard [filepath] # 恢复分支文件
$ git reset --hard HEAD^ # 退回版本
# 分支
$ git branch [branchname] # 创建分支
$ git checkout [branchname] # 切换分支
$ git checkout -b [branchname] # 创建或切换分支
$ git switch [branchname] # 切换分支
$ git switch -c [branchname] # 创建或切换分支
$ git fetch # 拉取分支
$ git merge [branchname] # 合并分支
$ git pull # 拉取并合并分支
$ git rebase [branchname] # 整理合并分支
# 缓存
$ git stash list # 查询缓存列表
$ git stash # 压入缓存
$ git stash save "" # 压入缓存并注解
$ git stash pop # 弹出缓存
$ git stash apply [stashname] # 拷出指定缓存
$ git stash drop [stashname] # 删除指定缓存
$ git stash clear # 清空缓存
$ git stash show # 对比顶部缓存与当前目录
$ git stash show [stashname] # 对比指定缓存与当前目录
# 日志
$ git log # 查询日志
$ git reflog # 查看修改日志
# 标签
$ git tag <tagname> # 添加轻量标签
$ git tag <tagname> <hash> # 添加轻量标签根据Hash
$ git tag -a <anotatedname> -m <text> # 添加附注标签
$ git tag # 列出所有标签
$ git tag -d <tagname> # 删除标签
$ git show <tagname> # 查看标签信息
$ git push <remote> <tagname> # 推送标签
$ git push <remote> --tags # 推送所有标签
$ git push <remote> --delete <tagname> # 删除远程标签
# 目录说明
# 目录
/.git/HEAD # 本地仓库的HEAD指向
/.git/FETCH_HEAD # 远程仓库分支的HEAD指向
/.git/ORIG_HEAD # 本地仓库的前一个HEAD指向
/.git/config # 配置信息
/.git/logs/ # 操作日志
/.git/objects/ # 文件对象
/.git/refs/ # 分支引用
/.git/hooks/ # hooks的shell脚本
# .gitignore
| # | 注释 |
| * | 通配多个字符 |
| ? | 通配单个字符 |
| [] | 通配包含字符 |
| *.txt | 忽略.txt结尾的文件 |
| !.txt | 不忽略.txt结尾的文件 |
| /dir | 忽略目录/dir/ |
| dir/ | 忽略目录*/dir/ |
| dir/*.txt | 忽略目录/dir/中.txt结尾的文件 |
# 常用技巧
# 生成 SSH Key
$ ssh-keygen -t rsa -C "[email]"
# 日志图形输出
$ git log --graph --pretty=oneline --abbrev-commit
# 删除提交记录
git reset --hard commit_hash
git push origin HEAD --force
# 合并分支参数
$ git merge
$ git merge --no-ff # 合并最后一个节点
$ git merge –squash # 合并压缩节点

# 创建空分支
git checkout --orphan [branch_name]
# 重命名分支
$ git branch -m [old_name] [new_name]
$ git push origin [new_name]
$ git push --delete origin [old_name]
# 分支管理

# 查找大文件
$ git count-objects -v # 查询空间
$ git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -3 # 查询最大的三个文件
$ git rev-list --objects --all | grep [hash] # 根据Hash查询具体文件
$ git filter-branch --force --index-filter "git rm --cached --ignore-unmatch '[filepath]'" --prune-empty --tag-name-filter cat -- --all # 移除文件引用
$ git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
$ git reflog expire --expire=now --all
$ git gc --prune=now
# 添加多个远程仓库
$ git remote add mirror [url] # 添加不同仓库
$ git remote set-url --add origin [url] # 添加同仓库不同多域名
# 删除远程仓库提交
$ git reset --hard HEAD~1
# git bash 乱码
$ winpty git -h # 以winpty运行
版权协议

This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.