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. 最佳实践建议

  1. 定期使用 git fetch -p 清理已删除的远程分支引用
  2. 使用 -u 参数在首次推送时设置上游分支,简化后续操作
  3. 使用别名提高常用命令的执行效率
  4. 谨慎使用 -D 强制删除,确保不会丢失未合并的工作
  5. 在生产环境避免禁用 SSL 验证,仅在必要时临时使用
  6. 使用 --follow 追踪文件重命名后的完整历史
  7. 善用 git log 的各种参数进行精确的历史查询
  8. 在合并前先 fetch 并检查,使用 git log HEAD..origin/<branch> 查看即将合并的内容
  9. 根据需求选择 merge 或 rebase,rebase 可保持线性历史,但不要在公共分支上使用
  10. 理解 git pull 的本质,在关键操作时分步执行 fetch 和 merge/rebase 以获得更好的控制

以上是常用的 Git 命令整理,涵盖了日常开发中的大部分场景。建议根据实际需求选择合适的命令,并通过别名优化工作流程。

posted @ 2023-10-07 16:53  LexLuc  阅读(46)  评论(0)    收藏  举报