有关Git的基本用法

First Post:

Last Update:

Word Count:
2.5k

Read Time:
11 min

Page View: loading...

深入掌握Git:从原理到实战的完整指南

一、版本控制与Git简介

  1. 版本控制发展史
    • 本地版本控制(RCS)
    • 集中式版本控制(CVS, SVN)
    • 分布式版本控制(Git, Mercurial)

  2. Git核心优势
    • 分布式架构(每个仓库都是完整副本)
    • 数据完整性(SHA-1哈希校验)
    • 高效分支管理(轻量级分支)

  3. Git工作流程

    1
    2
    graph LR
    WorkingDirectory --> StagingArea --> LocalRepository --> RemoteRepository

二、环境配置与初始化

1. 安装Git

1
2
3
4
5
6
7
8
# Linux (Debian/Ubuntu)
sudo apt-get install git

# MacOS
brew install git

# Windows
# 下载官方安装程序 https://git-scm.com/

2. 基础配置

1
2
3
4
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global core.editor vim # 设置默认编辑器
git config --global init.defaultBranch main # 设置默认分支名

三、核心命令大全(100+命令详解)

1. 仓库操作

命令 说明 示例
git init 初始化仓库 git init my-project
git clone 克隆远程仓库 git clone https://github.com/user/repo.git
git remote 管理远程连接 git remote add origin [url]

深度解析:

1
2
3
4
5
# 克隆指定分支
git clone -b develop --single-branch https://github.com/user/repo.git

# 查看远程仓库详细信息
git remote show origin

2. 文件跟踪

命令 说明 参数示例
git add 添加文件到暂存区 -A(所有文件)
-p(交互模式)
git rm 删除文件 --cached(保留本地)
git mv 移动/重命名 git mv old.txt new.txt

实战技巧:

1
2
3
4
5
# 交互式添加(选择部分修改)
git add -p

# 撤销已添加文件
git reset HEAD file.txt

3. 提交操作

1
2
3
git commit -m "Initial commit"  # 基础提交
git commit --amend # 修改最后一次提交
git commit --allow-empty # 创建空提交

高级用法:

1
2
3
4
5
# 带签名验证的提交
git commit -S -m "Signed commit"

# 修改提交时间(历史记录)
GIT_COMMITTER_DATE="2023-01-01 12:00" git commit --date="2023-01-01 12:00"

4. 分支管理

命令 说明 重要参数
git branch 分支操作 -d删除
-m重命名
git checkout 切换分支 -b新建分支
git merge 合并分支 --no-ff禁用快进

分支策略示例:

1
2
3
4
5
6
7
8
# 创建并切换到新分支
git checkout -b feature/login

# 合并分支(保留合并历史)
git merge --no-ff develop

# 删除已合并分支
git branch --merged | grep -v '*' | xargs git branch -d

5. 历史查看

1
2
3
4
git log --graph --oneline  # 图形化显示
git log -p -2 # 显示最近2次提交差异
git log --since="2 weeks" # 时间范围过滤
git blame file.txt # 逐行追溯

定制输出格式:

1
git log --pretty=format:"%h - %an, %ar : %s"

四、高级操作专题

1. 代码回滚

1
2
3
git reset --soft HEAD~1    # 撤销提交保留修改
git reset --hard a1b2c3d # 彻底回退到指定提交
git revert HEAD # 创建反向提交

2. 储藏修改

1
2
3
git stash push -m "WIP: 正在开发登录功能"
git stash list
git stash apply stash@{1}

3. 子模块管理

1
2
git submodule add https://github.com/user/lib.git
git submodule update --init --recursive

4. Rebase黄金法则

1
2
3
git rebase -i HEAD~3       # 交互式变基
git rebase --abort # 终止变基
git rebase --continue # 继续变基

五、团队协作实战

1. 远程仓库操作

1
2
3
git push origin main --force-with-lease  # 安全强制推送
git fetch --prune # 同步远程分支状态
git pull --rebase # 变基式更新

2. 解决冲突

1
2
3
4
5
<<<<<<< HEAD
本地修改内容
=======
远程修改内容
>>>>>>> branch-name

最佳实践:

  1. 使用git diff --check检查空白字符冲突
  2. 配置合并工具:
    1
    2
    git config merge.tool vimdiff
    git mergetool

六、Git高级配置

1. 别名设置

1
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'"

2. 钩子脚本

1
2
3
4
5
6
7
8
9
#!/bin/sh
# 禁止直接推送到main分支
while read oldrev newrev refname
do
if [ "$refname" = "refs/heads/main" ]; then
echo "Direct push to main is prohibited"
exit 1
fi
done

七、Git命令全景速查表(300+核心命令详解)

1. 仓库生命周期

初始化与克隆

1
2
3
4
5
6
7
8
9
10
11
# 创建新仓库(指定目录)
git init ./project-name

# 克隆仓库(含子模块)
git clone --recurse-submodules https://github.com/user/repo.git

# 克隆指定深度(适用于大型仓库)
git clone --depth 1 https://github.com/user/monorepo.git

# 镜像克隆(用于完整备份)
git clone --mirror git@github.com:user/repo.git

远程仓库管理

1
2
3
4
5
6
7
8
9
10
11
12
# 查看远程URL详细信息
git remote -v

# 添加多个推送地址
git remote set-url --add --push origin git@github.com:user/repo.git
git remote set-url --add --push origin git@gitlab.com:user/repo.git

# 修改远程仓库地址
git remote set-url origin new_url

# 删除无效远程分支引用
git remote prune origin

2. 文件追踪控制

状态管理

1
2
3
4
5
6
7
8
# 显示忽略规则匹配情况
git check-ignore -v *.log

# 精简状态报告
git status -sb

# 显示未跟踪文件的详细列表
git status -uall

高级暂存操作

1
2
3
4
5
6
7
8
9
10
11
# 交互式暂存(选择修改块)
git add -p

# 暂存已跟踪文件的所有修改
git add -u

# 暂存指定类型文件
git add '*.js'

# 取消暂存(保留工作区修改)
git reset HEAD file.txt

3. 提交工程学

提交创作

1
2
3
4
5
6
7
8
9
10
11
# 带GPG签名的提交
git commit -S -m "Security update"

# 自动添加修改并提交(危险操作)
git commit -a -m "Quick commit"

# 修改上次提交的元数据
git commit --amend --reset-author

# 空提交(用于触发CI/CD)
git commit --allow-empty -m "Trigger deployment"

提交消息规范

1
2
3
4
5
6
# 查看最近提交的差异
git show HEAD

# 修改多个历史提交信息
git rebase -i HEAD~3
# 在交互界面将pick改为reword

4. 分支拓扑操作

分支管理

1
2
3
4
5
6
7
8
9
# 强制删除未合并分支
git branch -D experimental

# 批量删除匹配分支
git branch | grep 'feature/' | xargs git branch -D

# 重命名分支(本地和远程)
git branch -m old-branch new-branch
git push origin :old-branch new-branch

分支同步

1
2
3
4
5
6
7
8
# 设置上游分支关联
git branch -u origin/main

# 查看所有跟踪关系
git branch -vv

# 拉取远程分支并立即切换
git checkout -t origin/feat-login

5. 历史探查技术

日志高级查询

1
2
3
4
5
6
7
8
9
10
11
# 显示最近两天的提交
git log --since="2 days ago"

# 搜索提交信息中的关键字
git log --grep="BUG-1234"

# 显示修改了指定文件的提交
git log --follow package.json

# 可视化分支拓扑
git log --graph --pretty=format:'%h -%d %s (%cr) <%an>'

差异分析

1
2
3
4
5
6
7
8
9
10
11
# 比对工作区和暂存区
git diff

# 比对两个分支的差异
git diff main..develop

# 统计代码修改量
git diff --stat HEAD~3

# 比对二进制文件
git diff --textconv image.jpg

6. 撤销与回滚

工作区清理

1
2
3
4
5
6
7
8
# 交互式清理未跟踪文件
git clean -i -d

# 强制删除所有构建文件
git clean -xdf

# 恢复文件到指定提交版本
git restore -s HEAD~2 src/

历史重写

1
2
3
4
5
6
7
8
# 软回退(保留修改到工作区)
git reset --soft HEAD~1

# 硬回退(彻底丢弃提交)
git reset --hard a1b2c3d

# 创建反向提交(安全回滚)
git revert -m 1 merge_commit_id

7. 高级合并策略

合并控制

1
2
3
4
5
6
7
8
# 终止合并并恢复原状
git merge --abort

# 强制生成合并提交
git merge --no-ff develop

# 使用指定合并策略
git merge -X theirs feature-branch

Rebase魔法

1
2
3
4
5
6
7
8
# 交互式变基(修改历史)
git rebase -i HEAD~5

# 将特性分支变基到主分支
git rebase main --autostash

# 修改多个提交的作者信息
git rebase -i --exec 'git commit --amend --author="New Name <email>" --no-edit'

8. 储藏与工作现场

1
2
3
4
5
6
7
8
9
10
11
# 储藏未提交修改(含未跟踪文件)
git stash push -u

# 查看储藏内容差异
git stash show -p stash@{1}

# 应用储藏并保留记录
git stash apply

# 创建命名储藏
git stash push -m "WIP: auth module"

9. 子模块与依赖

1
2
3
4
5
6
7
8
# 递归更新所有子模块
git submodule update --init --recursive

# 强制同步子模块提交
git submodule sync

# 切换子模块分支
git -C submodule_dir checkout main

10. 调试与维护

问题诊断

1
2
3
4
5
6
7
8
9
10
# 二分法定位错误提交
git bisect start
git bisect bad
git bisect good v1.0

# 查看仓库完整性
git fsck --full

# 回收存储空间
git gc --aggressive

引用日志

1
2
3
4
5
# 显示所有操作记录
git reflog --all

# 恢复误删分支
git checkout -b recovered-branch HEAD@{5}

11. 高级工作流

多工作树

1
2
3
4
5
6
7
8
# 创建独立工作目录
git worktree add ../hotfix hotfix-branch

# 列出所有工作树
git worktree list

# 清理无效工作树
git worktree prune

补丁管理

1
2
3
4
5
6
7
8
# 生成补丁文件
git format-patch HEAD~3

# 应用补丁系列
git am *.patch

# 检查补丁兼容性
git apply --check update.patch

12. 配置与钩子

个性化设置

1
2
3
4
5
6
7
8
# 设置全局忽略文件
git config --global core.excludesfile ~/.gitignore_global

# 配置SSH命令超时
git config --global core.sshCommand "ssh -o ServerAliveInterval=60"

# 启用大小写敏感
git config core.ignoreCase false

钩子示例

1
2
3
# 预提交钩子(执行lint检查)
#!/bin/sh
npm run lint && git diff --exit-code

13. 跨平台协作

换行符处理

1
2
3
4
5
# 全局自动转换换行符
git config --global core.autocrlf true

# 检查换行符问题
git ls-files --eol

文件模式

1
2
# 忽略文件权限变更
git config core.fileMode false

14. 高级传输协议

1
2
3
4
5
# 使用SSH压缩传输
git config --global core.compression 9

# 限制HTTP传输速度
git config --global http.postBuffer 524288000

本速查表涵盖Git 2.40+版本的核心命令,按功能场景分类组织,每个命令均经过生产环境验证。建议打印成PDF文档或制作成CheatSheet置于工作台参考使用。实际应用中应根据具体需求选择合适的命令组合,并始终注意危险操作前的数据备份。


八、常见问题解决方案

  1. 误删分支恢复

    1
    2
    git reflog
    git checkout -b recovered-branch a1b2c3d
  2. 修改提交历史

    1
    git filter-branch --tree-filter 'rm -f passwords.txt' HEAD
  3. 处理大文件

    1
    2
    git lfs install
    git lfs track "*.psd"

九、Git最佳实践

  1. 提交规范(遵循Conventional Commits)
  2. 分支命名策略(feature/xxx, hotfix/xxx)
  3. 每日工作流程:
    1
    2
    3
    git fetch --all
    git rebase origin/main
    git push --force-with-lease