Git 常用命令技术笔记
1. 基础配置
1.1 用户信息配置
# 配置用户名和邮箱
git config --global user.name 'user_name'
git config --global user.email 'user_email'
# 查看全局配置
git config --global --list
1.2 SSL 配置
# 配置 SSL 证书路径
git config --global http.sslCAInfo /XXXX/XXX/XXX.crt
# 禁用 SSL 验证(不推荐用于生产环境)
git config --global http.sslVerify "false"
# 克隆时跳过 SSL 验证
git -c http.sslVerify=false clone 'repository-url.git'
git config http.sslVerify "false"
1.3 凭证存储
# 存储凭证,避免重复输入密码
git config --global credential.helper store
1.4 代理配置
# 设置代理
git config --global http.proxy http://<账号>:<密码>@<主机>:<端口>
git config --global https.proxy https://<账号>:<密码>@<主机>:<端口>
# 查看代理配置
git config --global --get http.proxy
git config --global --get https.proxy
# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy
2. 远程仓库管理
2.1 添加远程仓库
# 添加新的远程仓库
git remote add <remote-name> <remote-url>
# 示例:添加 origin 远程仓库
git remote add origin https://github.com/username/repo.git
# 查看远程仓库
git remote -v
2.2 切换到新远程仓库
# 添加新远程仓库并切换
git remote add new <url>
git fetch new
git checkout --track new/main
2.3 更改远程仓库
# 重命名远程仓库
git remote rename origin old
# 添加新的 origin
git remote add origin 'repository-url.git'
# 配置分支的远程仓库
git config branch.master.remote origin
2.4 删除远程分支
# 删除单个远程分支
git push -d <repo> <branch>
# 删除多个远程分支
git push origin --delete branch1 branch2 branch3
# 清理本地已删除的远程分支引用
git remote prune origin
# 或者
git fetch -p
3. 分支管理
3.1 查看分支信息
# 查看所有分支及其上游分支
git branch -vv
# 查看当前分支的上游分支
git rev-parse --abbrev-ref --symbolic-full-name @{u}
# 简洁查看
git status -sb
3.2 设置上游分支
# 为当前分支设置上游分支
git branch --set-upstream-to=<remote>/<branch>
# 简写形式
git branch -u origin/main
# 为指定分支设置上游分支
git branch -u origin/main feature-branch
# 推送时同时设置上游分支
git push -u origin main
# 取消上游分支追踪
git branch --unset-upstream
3.3 删除分支
# 删除单个本地分支
git branch -d branch-name
# 强制删除本地分支
git branch -D branch-name
# 删除多个本地分支
git branch -d branch1 branch2 branch3
git branch -D branch1 branch2 branch3
# 删除除当前分支和 main/master 外的所有分支
git branch | grep -v "main\|master\|^\*" | xargs git branch -D
# 删除所有已合并的分支
git branch --merged | grep -v "\*\|main\|master" | xargs git branch -d
3.4 重命名分支
# 重命名本地分支
git branch -m [old_branch_name] new_name
# 删除远程旧分支
git push <repo> -d old_branch_name
# 推送新分支并设置上游
git push <repo> -u new_name
4. 拉取与合并
4.1 理解 git pull
# git pull 等价于 fetch + merge
git pull
# 等同于
git fetch origin
git merge origin/<branch-name>
4.2 手动执行 fetch 和 merge
# 基本用法
git fetch origin
git merge origin/main
# 在合并前查看将要合并的内容
git fetch origin
git log HEAD..origin/main # 查看新的提交
git merge origin/main # 确认后再合并
# 获取所有远程仓库的更新
git fetch --all
git merge origin/main
4.3 使用 rebase 代替 merge
# 模拟 git pull --rebase
git fetch origin
git rebase origin/<branch-name>
# 示例
git fetch origin
git rebase origin/main
4.4 使用上游分支简化操作
# 如果已设置上游分支,可以使用
git fetch
git merge '@{u}' # @{u} 代表当前分支的上游分支
# 或使用 rebase
git fetch
git rebase '@{u}'
优势说明:
- 分步执行 fetch 和 merge 可以在合并前检查变更
- 使用 rebase 可以保持线性的提交历史
- 手动操作提供了更多的控制权和灵活性
5. 日志查看
5.1 自定义日志别名
# 配置美化的日志显示别名
git config --global alias.hist "log --color --graph --pretty=format:'%Cred%h%Creset - %Cgreen(%ci)%Creset %s %C(bold blue)<%an>%Creset%C(yellow)%d%Creset' --abbrev-commit"
# 使用
git hist
5.2 按条件查看日志
# 按作者和时间范围查看日志
git log --author='author_name' --before='yyyy-mm-dd hh:mm:ss' --after='yyyy-mm-dd hh:mm:ss' --first-parent
# 查看文件的完整历史(包括重命名)
git log --follow -- 'filepath'
# 查看文件特定行的历史
git log -L 'startline','endline':'filepath'
# 查看所有合并提交
git log --pretty=format:%H --merges --first-parent
# 查看合并提交的详细信息
git log -p --merges --first-parent
# 查看某个提交之后的所有合并
git log --reverse --merges 'commit-id'..HEAD
# 查看某个提交首次被合并的位置
git log --merges 'commit-id'..HEAD --ancestry-path --pretty=format:'%H %ct' | tail -1
# 查看统计信息
git log --stat
5.3 查看提交差异
# 查看当前分支有但某分支没有的提交
git cherry -v 'certain-branch'
# 查看特定提交的统计信息
git show 'commit-id' --pretty=format:%aI --numstat
# 查看两个提交间文件的差异
git diff 'from'..'to' -- 'filepath'
# 列出所有改变的文件
git diff --name-only 'COMMIT_HASH' HEAD
# 计算代码行数变化
git diff --stat
# 设置 diff 上下文行数
git diff --unified=<n>
# 查看与基础分支的差异
git diff --merge-base bsp/develop master -- '**/*.c'
6. 提交管理
6.1 撤销操作
# 撤销提交但保留更改
git revert 'commit-id' --no-merge
# 恢复别名(清理工作区并重置)
git config --global alias.recover '!git clean -df && git reset HEAD --hard'
6.2 Rebase 操作
# 重新基于目标提交
git rebase --onto 'target_commit-ish' 'start_commit-ish(exclude)' 'end_commit-ish(include)'
# 退出 rebase
git rebase --quit
6.3 补丁管理
# 生成最近 4 个提交的补丁文件
git format-patch -4 HEAD
# 应用补丁
git am *.patch
6.4 回滚文件
# 将文件回滚到指定提交的状态
git checkout 'COMMIT_HASH' -- 'FILE_PATH'
7. 标签管理
# 创建轻量级标签
git tag 'tag-name' 'commit-ish'
# 创建带注释的标签
git tag -a 'annotated-tag-name' -m 'tag message'
# 推送标签到远程
git push <repo> <tag-name>
8. Git LFS 问题处理
# 跳过 smudge 以加快克隆速度
git lfs install --skip-smudge
# 克隆仓库
git clone ...
# 批量下载二进制文件
git lfs pull
# 恢复 smudge
git lfs install --force
9. 其他实用命令
9.1 安全目录配置
# 允许 root 用户操作其他用户拥有的仓库
git config --system --add safe.directory /path/to/dir
9.2 实用别名
# 更新分支别名示例
git config --global alias.updbr '!git checkout master && git branch -D feature/code_association_rule_mining && git pull --ff-only && git checkout feature/code_association_rule_mining'
10. 最佳实践建议
- 定期使用
git fetch -p清理已删除的远程分支引用 - 使用
-u参数在首次推送时设置上游分支,简化后续操作 - 使用别名提高常用命令的执行效率
- 谨慎使用
-D强制删除,确保不会丢失未合并的工作 - 在生产环境避免禁用 SSL 验证,仅在必要时临时使用
- 使用
--follow追踪文件重命名后的完整历史 - 善用
git log的各种参数进行精确的历史查询 - 在合并前先 fetch 并检查,使用
git log HEAD..origin/<branch>查看即将合并的内容 - 根据需求选择 merge 或 rebase,rebase 可保持线性历史,但不要在公共分支上使用
- 理解 git pull 的本质,在关键操作时分步执行 fetch 和 merge/rebase 以获得更好的控制
以上是常用的 Git 命令整理,涵盖了日常开发中的大部分场景。建议根据实际需求选择合适的命令,并通过别名优化工作流程。

浙公网安备 33010602011771号