PowerShell 使用 Git 进行版本管理完整指南

适用环境:Windows 10/11、PowerShell 5/7、Git for Windows、GitHub / Gitee / GitLab / Azure DevOps 等 Git 平台。
目标:把 PowerShell 里使用 Git 做版本管理的常见场景全部整理成可复制、可自查、可排错的命令清单。


快速索引

按场景查命令

我想做什么 常用命令
检查 Git 是否安装 git --versionwhere.exe git
设置用户名和邮箱 git config --global user.namegit config --global user.email
查看 Git 配置 git config --list --show-origin
初始化仓库 git init
克隆远程仓库 git clone <url>
查看工作区状态 git statusgit status -sb
查看文件改动 git diffgit diff --staged
添加暂存 git add .git add <file>git add -p
提交版本 git commit -m "message"
查看提交历史 git log --oneline --graph --decorate --all
创建和切换分支 git switch -c <branch>git switch <branch>
合并分支 git merge <branch>
变基整理提交 git rebase <branch>git rebase -i HEAD~3
拉取远程更新 git pullgit fetch
推送到远程 git pushgit push -u origin <branch>
解决冲突 git status、编辑冲突文件、git addgit commit
临时保存工作区 git stash push -m "message"git stash pop
撤销未提交修改 git restore <file>git restore .
取消暂存 git restore --staged <file>
回退提交 git revert <hash>git reset --soft/--mixed/--hard
找回误删提交 git refloggit reset --hard <hash>
删除本地分支 git branch -d <branch>git branch -D <branch>
删除远程分支 git push origin --delete <branch>
管理标签版本 git taggit tag -a v1.0.0 -m "release"
忽略文件 .gitignoregit rm --cached <file>
大文件管理 git lfs trackgit lfs install
子模块管理 git submodule addgit submodule update --init --recursive
清理未跟踪文件 git clean -fdgit clean -fdx
排查谁改了某行 git blame <file>
二分定位问题提交 git bisect start

分类目录


0. PowerShell 使用约定

0.1 命令提示符

文中命令默认在 PowerShell 执行,不需要输入前面的说明文字。

1
PS C:\Project> git status              # PowerShell 里的示例提示符

0.2 占位符说明

1
2
3
4
5
<repo-url>                              # 仓库地址,例如 git@github.com:user/repo.git
<branch> # 分支名,例如 main、dev、feature/login
<file> # 文件路径,例如 .\src\App.cs
<hash> # 提交哈希,例如 a1b2c3d
<tag> # 标签名,例如 v1.0.0

0.3 PowerShell 路径写法

1
2
3
4
5
cd C:\Projects                          # 进入目录
cd .\MyProject # 进入当前目录下的 MyProject
cd .. # 返回上一级目录
pwd # 查看当前目录
ls # 查看当前目录文件

0.4 带空格路径必须加引号

1
2
cd "C:\Users\YourName\Desktop\My Project"   # 路径有空格时必须加引号
git add "Assets/My Script.cs" # Git 路径里有空格也要加引号

0.5 PowerShell 常用辅助命令

1
2
3
4
5
Get-Location                            # 等同 pwd,查看当前路径
Set-Location C:\Projects # 等同 cd,切换目录
Get-ChildItem # 等同 ls,列出文件
Get-Command git # 查看 git 命令来源
where.exe git # 查看系统里所有 git.exe 路径

0.6 不建议在 PowerShell 里直接照抄 Linux 写法

1
2
rm -rf .\folder                         # 不推荐:PowerShell 的 rm 不是 Linux rm
Remove-Item .\folder -Recurse -Force # 推荐:PowerShell 原生命令,递归强制删除

1. 安装与环境检查

1.1 检查 Git 版本

1
2
3
git --version                           # 查看 Git 是否安装,以及当前版本
where.exe git # 查看 git.exe 位于哪个目录
Get-Command git # 查看 PowerShell 解析到的 git 命令

1.2 使用 winget 安装 Git

1
2
3
winget search Git.Git                   # 搜索 Git 安装包
winget install --id Git.Git -e # 安装 Git for Windows
git --version # 安装后重新打开 PowerShell 再检查

1.3 升级 Git

1
2
winget upgrade --id Git.Git -e          # 使用 winget 升级 Git
git update-git-for-windows # Git for Windows 自带升级命令

1.4 检查当前目录是否是 Git 仓库

1
2
git rev-parse --is-inside-work-tree     # 输出 true 表示当前在 Git 仓库内
git rev-parse --show-toplevel # 输出仓库根目录路径

1.5 进入仓库根目录

1
cd (git rev-parse --show-toplevel)      # 从子目录直接回到仓库根目录

2. Git 基础配置

2.1 配置用户名和邮箱

1
2
3
4
git config --global user.name "YourName"        # 设置全局提交用户名
git config --global user.email "you@example.com" # 设置全局提交邮箱
git config user.name # 查看当前仓库最终生效的用户名
git config user.email # 查看当前仓库最终生效的邮箱

2.2 只给当前仓库设置用户名和邮箱

1
2
git config user.name "CompanyName"              # 仅当前仓库生效
git config user.email "company@example.com" # 仅当前仓库生效

2.3 查看所有配置来源

1
2
3
4
git config --list                                # 查看合并后的配置
git config --list --show-origin # 查看每条配置来自哪个文件
git config --global --edit # 编辑全局配置文件
git config --local --edit # 编辑当前仓库配置文件

2.4 设置默认分支名

1
git config --global init.defaultBranch main      # 新仓库默认分支使用 main

2.5 设置默认编辑器

1
2
git config --global core.editor "notepad"        # 使用记事本编辑提交信息
git config --global core.editor "code --wait" # 使用 VS Code 编辑提交信息

2.6 设置换行符策略

1
2
3
git config --global core.autocrlf true           # Windows 常用:签出 CRLF,提交 LF
git config --global core.safecrlf warn # 换行符可疑时给出警告
git config --global core.eol lf # 需要统一 LF 时可设置

建议项目根目录配 .gitattributes,比单纯依赖个人配置更稳定:

1
2
3
4
5
6
* text=auto                                      # 自动规范文本文件换行
*.cs text eol=lf # C# 文件提交时统一 LF
*.shader text eol=lf # Shader 文件提交时统一 LF
*.png binary # 图片按二进制处理
*.jpg binary # 图片按二进制处理
*.zip binary # 压缩包按二进制处理

2.7 设置彩色输出和命令别名

1
2
3
4
5
6
git config --global color.ui auto                # 自动开启彩色输出
git config --global alias.st "status -sb" # git st 等于 git status -sb
git config --global alias.co "checkout" # 老项目常用 checkout 别名
git config --global alias.sw "switch" # git sw 等于 git switch
git config --global alias.br "branch -vv" # git br 查看分支详情
git config --global alias.lg "log --oneline --graph --decorate --all" # 图形历史

2.8 设置默认拉取策略

1
2
3
git config --global pull.rebase false            # pull 时默认 merge,适合新手和普通协作
git config --global pull.rebase true # pull 时默认 rebase,提交历史更直
git config --global pull.ff only # 只允许快进合并,不能快进就失败

只想简单稳定,建议先用:

1
git config --global pull.rebase false            # 默认用 merge 处理远程更新

2.9 设置推送策略

1
2
git config --global push.default simple          # 只推送当前分支到同名上游分支
git config --global push.autoSetupRemote true # 新分支第一次 push 自动设置 upstream

3. 新建仓库与克隆仓库

3.1 初始化一个新仓库

1
2
3
4
mkdir MyProject                                  # 新建项目目录
cd MyProject # 进入项目目录
git init # 初始化 Git 仓库
git status # 查看当前状态

3.2 第一次提交

1
2
3
New-Item README.md                               # 创建 README.md
git add README.md # 添加到暂存区
git commit -m "初始化项目" # 创建第一次提交

3.3 克隆远程仓库

1
2
3
git clone https://github.com/user/repo.git       # 使用 HTTPS 克隆
git clone git@github.com:user/repo.git # 使用 SSH 克隆
git clone <repo-url> MyRepo # 克隆到指定目录 MyRepo

3.4 克隆指定分支

1
2
git clone -b dev <repo-url>                      # 克隆 dev 分支
git clone --single-branch -b dev <repo-url> # 只克隆 dev 单分支

3.5 浅克隆

1
2
git clone --depth 1 <repo-url>                   # 只拉最近一次提交,速度快但历史不完整
git fetch --unshallow # 把浅克隆补成完整历史

3.6 克隆后第一件事

1
2
3
4
cd .\repo                                        # 进入仓库目录
git status -sb # 查看当前分支和状态
git remote -v # 查看远程地址
git branch -vv # 查看本地分支和上游分支

4. 工作区、暂存区与提交

4.1 Git 三个常用区域

区域 含义 常用命令
工作区 你正在编辑的文件 git statusgit diff
暂存区 准备提交的改动 git addgit diff --staged
本地仓库 已经生成的提交记录 git commitgit log

4.2 查看当前状态

1
2
git status                                      # 查看详细状态
git status -sb # 简洁状态,适合日常使用

常见状态含义:

1
2
3
4
5
6
?? file.txt                                     # 未跟踪的新文件
M file.txt # 工作区有修改,但未暂存
M file.txt # 已暂存,等待提交
MM file.txt # 暂存后又继续修改
A file.txt # 新文件已暂存
D file.txt # 文件删除已暂存

4.3 添加文件到暂存区

1
2
3
4
5
6
git add .                                      # 添加当前目录全部改动
git add -A # 添加整个仓库全部改动,包括删除
git add <file> # 只添加指定文件
git add .\src\ # 添加 src 目录下所有改动
git add *.cs # 添加当前目录下所有 .cs 文件
git add -p # 交互式选择部分改动暂存

4.4 提交改动

1
2
3
4
git commit -m "修复登录按钮点击失效"             # 提交暂存区改动
git commit # 打开编辑器编写多行提交信息
git commit --amend # 修改上一次提交信息或内容
git commit --amend --no-edit # 把新暂存内容合并进上次提交,提交信息不变

4.5 修改上一次提交

1
2
git add <file>                                 # 先暂存漏掉的文件
git commit --amend --no-edit # 合并进上一次提交

如果上一次提交已经推送到公共分支,不建议随便 amend;必须改时需要强推,见后文。

4.6 空提交

1
git commit --allow-empty -m "触发 CI 构建"       # 不改文件也创建一个提交

4.7 提交信息建议

1
2
3
4
5
6
7
feat: 新增登录页面
fix: 修复角色移动卡顿
docs: 更新使用文档
style: 调整格式,不改变逻辑
refactor: 重构代码
test: 增加测试
chore: 调整构建脚本或配置

5. 查看历史、差异与文件状态

5.1 查看提交历史

1
2
3
4
5
6
git log                                        # 查看完整提交历史
git log --oneline # 每个提交显示一行
git log --oneline --graph --decorate --all # 图形化查看所有分支历史
git log -5 --oneline # 只看最近 5 条提交
git log --author="YourName" # 只看某作者提交
git log --since="2026-01-01" # 查看指定日期之后的提交

5.2 查看某个文件历史

1
2
3
git log -- <file>                              # 查看文件相关提交
git log --follow -- <file> # 文件改名后继续追踪历史
git log -p -- <file> # 查看文件每次提交的具体差异

5.3 查看工作区差异

1
2
3
4
5
git diff                                       # 查看未暂存改动
git diff --staged # 查看已暂存改动
git diff HEAD # 查看工作区和暂存区相对 HEAD 的全部改动
git diff -- <file> # 只看某个文件未暂存改动
git diff --stat # 只看改动统计

5.4 比较两个提交

1
2
3
4
git diff <hash1> <hash2>                       # 比较两个提交差异
git diff <branch1> <branch2> # 比较两个分支差异
git diff main..dev # 查看 dev 相对 main 的差异
git diff --name-only main..dev # 只列出变化文件名

5.5 查看某次提交内容

1
2
3
git show <hash>                                # 查看提交详情和差异
git show --stat <hash> # 查看提交统计
git show --name-only <hash> # 只看提交改了哪些文件

5.6 查看某个文件在某次提交的内容

1
2
git show <hash>:path/to/file.cs                # 查看历史版本中文件内容
git show HEAD~1:path/to/file.cs # 查看上一个提交里的文件内容

5.7 查询某行是谁改的

1
2
git blame <file>                               # 查看每一行对应的提交和作者
git blame -L 20,40 <file> # 只看第 20 到 40 行

6. 分支管理

6.1 查看分支

1
2
3
4
git branch                                     # 查看本地分支
git branch -a # 查看本地和远程分支
git branch -r # 只看远程分支
git branch -vv # 查看本地分支对应的上游分支

6.2 创建分支

1
2
git switch -c feature/login                    # 创建并切换到 feature/login
git branch feature/login # 只创建分支,不切换

6.3 切换分支

1
2
3
git switch main                                # 切换到 main
git switch dev # 切换到 dev
git checkout main # 老写法,也能切换分支

6.4 从指定分支创建新分支

1
2
3
git switch main                                # 先切到 main
git pull # 更新 main
git switch -c feature/login # 从最新 main 创建功能分支

6.5 重命名分支

1
2
git branch -m old-name new-name                # 重命名指定分支
git branch -m new-name # 重命名当前分支

6.6 删除本地分支

1
2
git branch -d feature/login                    # 安全删除,未合并会拒绝
git branch -D feature/login # 强制删除,未合并也删除

6.7 删除远程分支

1
git push origin --delete feature/login         # 删除远程 feature/login 分支

6.8 清理本地失效远程分支记录

1
2
git fetch --prune                              # 删除本地已失效的远程分支引用
git remote prune origin # 清理 origin 上已不存在的远程分支引用

6.9 查看分支从哪里分出来

1
2
git merge-base main feature/login              # 找 main 和 feature/login 的共同祖先
git log --oneline --graph --decorate --all # 用图形历史人工判断

7. 合并、变基与提交整理

7.1 merge 合并

1
2
3
git switch main                                # 切到目标分支
git pull # 更新目标分支
git merge feature/login # 把 feature/login 合并进 main

适合场景:

  • 团队公共分支
  • 不想改写提交历史
  • 希望保留真实分支合并记录

7.2 fast-forward 快进合并

1
git merge --ff-only feature/login              # 只允许快进,不能快进就失败

7.3 no-ff 合并

1
git merge --no-ff feature/login -m "合并登录功能" # 强制生成一次合并提交

适合功能分支合并,希望历史里保留“一个功能整体”。

7.4 rebase 变基

1
2
3
git switch feature/login                       # 切到功能分支
git fetch origin # 获取远程最新状态
git rebase origin/main # 把当前分支改到最新 main 后面

适合场景:

  • 自己的功能分支
  • 还没推送给别人共同使用
  • 想让提交历史更直

7.5 rebase 过程中继续、跳过、终止

1
2
3
4
5
git status                                     # 查看 rebase 当前状态
git add <file> # 解决冲突后暂存文件
git rebase --continue # 继续 rebase
git rebase --skip # 跳过当前提交
git rebase --abort # 取消 rebase,回到开始前

7.6 交互式 rebase 整理最近几次提交

1
git rebase -i HEAD~3                           # 整理最近 3 次提交

常见操作:

1
2
3
4
5
pick     # 保留提交
reword # 修改提交信息
squash # 合并到上一个提交,并编辑提交信息
fixup # 合并到上一个提交,丢弃当前提交信息
drop # 删除提交

7.7 合并和变基怎么选

场景 推荐
公共主分支合并功能 merge --no-ff 或平台 PR 合并
自己分支同步 main rebase origin/main
新手日常 pull git pull 默认 merge
历史必须保持线性 rebasepull --rebase
不确定是否有人基于你的分支开发 不要 rebase 已推送历史

8. 远程仓库、拉取与推送

8.1 查看远程仓库

1
2
3
git remote                                    # 查看远程名称
git remote -v # 查看远程 fetch/push 地址
git remote show origin # 查看 origin 详情

8.2 添加远程仓库

1
2
git remote add origin git@github.com:user/repo.git # 添加 SSH 远程地址
git remote add origin https://github.com/user/repo.git # 添加 HTTPS 远程地址

8.3 修改远程地址

1
2
git remote set-url origin git@github.com:user/repo.git # 修改 origin 地址
git remote -v # 确认地址是否改对

8.4 拉取远程更新

1
2
3
git fetch origin                              # 只获取远程更新,不自动合并
git pull # 获取并合并当前分支的上游更新
git pull --rebase # 获取并 rebase 到远程更新之后

8.5 第一次推送新分支

1
2
git push -u origin feature/login              # 推送并建立上游关系
git branch -vv # 查看上游是否设置成功

设置过 upstream 后,以后只需要:

1
2
git push                                      # 推送当前分支
git pull # 拉取当前分支

8.6 推送所有分支和标签

1
2
git push --all origin                         # 推送所有本地分支
git push --tags # 推送所有本地标签

8.7 强制推送

1
2
git push --force-with-lease                   # 相对安全的强推,远程被别人更新时会失败
git push --force # 强制覆盖远程,不推荐

强推适合:

  • 自己的功能分支 rebase 后
  • amend 已推送提交后
  • 清理个人分支提交历史

不适合:

  • mainmasterdev 这种公共分支
  • 不确定别人是否基于该分支继续开发

8.8 查看本地和远程差多少

1
2
3
git status -sb                                # 显示 ahead/behind
git log --oneline origin/main..HEAD # 本地比远程多的提交
git log --oneline HEAD..origin/main # 远程比本地多的提交

8.9 本地分支关联远程分支

1
2
git branch --set-upstream-to=origin/main main # 让本地 main 跟踪 origin/main
git push -u origin <branch> # 推送时顺便建立跟踪关系

9. 冲突处理

9.1 冲突通常什么时候出现

  • git merge <branch>
  • git rebase <branch>
  • git pull 自动合并时
  • git stash pop 恢复改动时
  • 多人修改同一个文件同一段内容时

9.2 查看冲突文件

1
2
git status                                    # 查看哪些文件冲突
git diff # 查看冲突内容

9.3 冲突标记长这样

1
2
3
4
5
<<<<<<< HEAD
当前分支的内容
=======
要合入分支的内容
>>>>>>> feature/login

处理方式:

1
2
3
保留当前分支内容                       # 删除另一边和冲突标记
保留对方分支内容 # 删除当前边和冲突标记
两边内容合并 # 手工整理成最终想要的结果

9.4 merge 冲突解决流程

1
2
3
4
git status                                    # 找到冲突文件
notepad .\path\to\file.cs # 打开文件手动解决冲突
git add .\path\to\file.cs # 标记冲突已解决
git commit # 完成 merge 提交

9.5 rebase 冲突解决流程

1
2
3
4
git status                                    # 查看当前冲突
notepad .\path\to\file.cs # 手动解决冲突
git add .\path\to\file.cs # 暂存解决后的文件
git rebase --continue # 继续 rebase

9.6 放弃本次合并或变基

1
2
git merge --abort                             # 放弃 merge,回到 merge 前
git rebase --abort # 放弃 rebase,回到 rebase 前

9.7 冲突时直接使用某一边

1
2
3
git checkout --ours <file>                    # 使用当前分支版本
git checkout --theirs <file> # 使用对方分支版本
git add <file> # 标记已解决

注意:rebase 时 ours/theirs 的直觉可能反过来,执行前用 git statusgit diff 确认。

9.8 使用 VS Code 处理冲突

1
2
3
4
5
code .                                        # 用 VS Code 打开当前仓库
git status # 解决后回到 PowerShell 确认状态
git add . # 暂存解决后的文件
git commit # merge 时提交
git rebase --continue # rebase 时继续

10. 撤销、回退与恢复

10.1 取消暂存,但保留文件修改

1
2
git restore --staged <file>                   # 把文件从暂存区拿出来
git restore --staged . # 取消全部暂存

10.2 丢弃未暂存修改

1
2
git restore <file>                            # 丢弃指定文件工作区修改
git restore . # 丢弃当前目录全部工作区修改

10.3 恢复已删除文件

1
2
git restore <file>                            # 文件被删但未提交时,恢复文件
git checkout HEAD -- <file> # 老写法,从 HEAD 恢复文件

10.4 从历史提交恢复某个文件

1
2
git restore --source=<hash> -- <file>         # 从指定提交恢复文件到工作区
git checkout <hash> -- <file> # 老写法,恢复指定提交里的文件

10.5 撤销某次提交,保留历史

1
2
3
git revert <hash>                             # 生成一个反向提交,撤销指定提交
git revert HEAD # 撤销最近一次提交
git revert --no-commit <hash> # 只把反向改动放进工作区,先不提交

适合公共分支,因为不会改写历史。

10.6 reset 三种模式

1
2
3
git reset --soft HEAD~1                       # 撤销提交,改动保留在暂存区
git reset --mixed HEAD~1 # 撤销提交,改动保留在工作区,默认模式
git reset --hard HEAD~1 # 撤销提交,并丢弃改动

10.7 回到某个提交

1
git reset --hard <hash>                       # 当前分支强制回到指定提交

高危:--hard 会丢弃未保存改动。执行前建议:

1
2
3
git status                                    # 确认有没有未提交改动
git stash push -m "reset 前备份" # 不确定就先 stash
git log --oneline -5 # 确认目标提交

10.8 找回误删提交

1
2
git reflog                                    # 查看 HEAD 历史移动记录
git reset --hard <hash> # 回到 reflog 里看到的目标提交

10.9 删除未跟踪文件

1
2
3
git clean -n                                  # 预览会删除哪些未跟踪文件
git clean -fd # 删除未跟踪文件和目录
git clean -fdx # 连 .gitignore 忽略文件也删除,高危

11. Stash 临时保存

11.1 临时保存当前改动

1
2
3
4
git stash                                     # 保存已跟踪文件的改动
git stash push -m "临时保存登录页面修改" # 带说明保存
git stash -u # 保存已跟踪文件和未跟踪新文件
git stash -a # 保存全部,包括 ignored 文件

11.2 查看 stash

1
2
3
git stash list                                # 查看所有 stash
git stash show # 查看最近 stash 的文件统计
git stash show -p stash@{0} # 查看指定 stash 的具体差异

PowerShell 里 stash@{0} 建议加引号:

1
git stash show -p "stash@{0}"                 # 避免 PowerShell 解析花括号导致问题

11.3 恢复 stash

1
2
3
git stash pop                                 # 恢复最近 stash,并从列表删除
git stash apply # 恢复最近 stash,但保留 stash 记录
git stash apply "stash@{1}" # 恢复指定 stash

11.4 删除 stash

1
2
git stash drop "stash@{0}"                    # 删除指定 stash
git stash clear # 删除全部 stash,高危

11.5 从 stash 创建分支

1
git stash branch fix/login "stash@{0}"        # 基于 stash 创建新分支并应用改动

12. 标签与版本发布

12.1 查看标签

1
2
3
git tag                                       # 查看所有标签
git tag -l "v1.*" # 按规则筛选标签
git show v1.0.0 # 查看标签对应内容

12.2 创建标签

1
2
3
git tag v1.0.0                                # 创建轻量标签
git tag -a v1.0.0 -m "发布 v1.0.0" # 创建带说明的标签
git tag -a v1.0.0 <hash> -m "补打标签" # 给历史提交打标签

12.3 推送标签

1
2
git push origin v1.0.0                        # 推送指定标签
git push --tags # 推送所有标签

12.4 删除标签

1
2
git tag -d v1.0.0                             # 删除本地标签
git push origin --delete v1.0.0 # 删除远程标签

12.5 常见版本号

1
2
3
4
v1.0.0                                        # 正式版本
v1.1.0 # 新功能版本
v1.1.1 # 修复版本
v2.0.0-beta.1 # 测试版本

13. .gitignore 与文件跟踪

13.1 创建 .gitignore

1
2
3
4
New-Item .gitignore                           # 创建 .gitignore 文件
notepad .gitignore # 打开编辑
git add .gitignore # 暂存忽略规则
git commit -m "添加忽略规则" # 提交忽略规则

13.2 Windows 常见忽略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Windows
Thumbs.db
Desktop.ini

# VS Code
.vscode/

# Rider / JetBrains
.idea/

# Build
bin/
obj/
dist/
build/

# Logs
*.log

13.3 Unity 常见忽略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Ll]ibrary/
[Tt]emp/
[Oo]bj/
[Bb]uild/
[Bb]uilds/
[Ll]ogs/
[Uu]ser[Ss]ettings/
MemoryCaptures/

*.csproj
*.sln
*.user
*.pidb
*.booproj
*.svd
*.pdb
*.mdb

13.4 已经被 Git 跟踪的文件,加入 .gitignore 不会自动取消跟踪

1
2
3
4
git rm --cached <file>                        # 取消跟踪文件,但保留本地文件
git rm -r --cached .\Library # 取消跟踪目录,但保留本地目录
git add .gitignore # 暂存忽略规则
git commit -m "停止跟踪无关文件" # 提交变更

13.5 检查某文件为什么被忽略

1
git check-ignore -v <file>                    # 显示命中了哪条 ignore 规则

13.6 强制添加被忽略文件

1
git add -f <file>                             # 强制添加被 .gitignore 忽略的文件

14. SSH、HTTPS 与凭证管理

14.1 查看远程地址使用的是 SSH 还是 HTTPS

1
git remote -v                                 # git@ 开头是 SSH,https:// 开头是 HTTPS

14.2 HTTPS 地址

1
2
git remote set-url origin https://github.com/user/repo.git # 改成 HTTPS
git push # 推送时可能要求登录或使用 Token

14.3 SSH 地址

1
2
3
git remote set-url origin git@github.com:user/repo.git # 改成 SSH
ssh -T git@github.com # 测试 GitHub SSH 连通性
git push # SSH 配好后一般不再输密码

SSH 的详细配置可以看:Git Push&Pull 使用 SSH(含 443 端口)配置

14.4 生成 SSH 密钥

1
2
ssh-keygen -t ed25519 -C "you@example.com"    # 生成 ed25519 密钥
Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub" # 打印公钥内容

.pub 公钥添加到 GitHub / Gitee / GitLab 的 SSH Keys 页面。

14.5 启动 ssh-agent

1
2
3
4
5
Get-Service ssh-agent                         # 查看 ssh-agent 服务状态
Set-Service -Name ssh-agent -StartupType Automatic # 设置开机自启
Start-Service ssh-agent # 启动 ssh-agent
ssh-add "$env:USERPROFILE\.ssh\id_ed25519" # 添加私钥
ssh-add -l # 查看已加载的密钥

14.6 端口 22 不通时走 GitHub 443

编辑 SSH 配置:

1
notepad "$env:USERPROFILE\.ssh\config"        # 打开 SSH 配置文件

写入:

1
2
3
4
5
Host github.com
HostName ssh.github.com
Port 443
User git
IdentityFile ~/.ssh/id_ed25519

测试:

1
ssh -T git@github.com                         # 应按 config 走 443

14.7 清理 Git 代理

1
2
3
4
5
git config --global --unset http.proxy        # 删除全局 HTTP 代理
git config --global --unset https.proxy # 删除全局 HTTPS 代理
git config --unset http.proxy # 删除当前仓库 HTTP 代理
git config --unset https.proxy # 删除当前仓库 HTTPS 代理
git config --list --show-origin | Select-String proxy # 查看是否还有代理配置

14.8 配置 Git 代理

1
2
git config --global http.proxy http://127.0.0.1:7890  # 设置 HTTP 代理
git config --global https.proxy http://127.0.0.1:7890 # 设置 HTTPS 代理

只给 GitHub 设置代理:

1
git config --global http.https://github.com.proxy http://127.0.0.1:7890 # 仅 GitHub 生效

14.9 清理 Windows 凭据

1
2
cmdkey /list                                  # 查看 Windows 凭据
cmdkey /delete:git:https://github.com # 删除 GitHub HTTPS 凭据

也可以在 Windows 凭据管理器里删除:

1
控制面板 -> 凭据管理器 -> Windows 凭据 -> 删除 github.com / git 相关凭据

15. 多账号、多远程与换仓库地址

15.1 多远程仓库

1
2
3
4
5
git remote add origin git@github.com:user/repo.git     # 主远程
git remote add gitee git@gitee.com:user/repo.git # 备用远程
git remote -v # 查看所有远程
git push origin main # 推送到 GitHub
git push gitee main # 推送到 Gitee

15.2 一个本地仓库推送到两个平台

1
2
3
4
git remote set-url --add --push origin git@github.com:user/repo.git # 添加 push 地址
git remote set-url --add --push origin git@gitee.com:user/repo.git # 再添加一个 push 地址
git remote -v # 查看 fetch/push 地址
git push origin main # 一次推送到多个 push 地址

15.3 修改仓库地址

1
2
git remote set-url origin <new-repo-url>           # 修改 origin 地址
git remote -v # 确认新地址

15.4 删除远程

1
git remote remove gitee                            # 删除名为 gitee 的远程

15.5 多账号 SSH 配置示例

1
2
3
4
5
6
7
8
9
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal

Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work

远程地址对应改成:

1
2
git remote set-url origin git@github-personal:user/repo.git # 使用个人账号密钥
git remote set-url origin git@github-work:company/repo.git # 使用工作账号密钥

15.6 当前仓库使用单独用户名邮箱

1
2
3
git config user.name "WorkName"                    # 当前仓库用户名
git config user.email "work@example.com" # 当前仓库邮箱
git config --local --list # 查看当前仓库局部配置

16. 团队协作常用流程

16.1 最常见功能分支流程

1
2
3
4
5
6
7
8
9
10
git switch main                                    # 切到主分支
git pull # 拉最新代码
git switch -c feature/login # 创建功能分支

# 修改代码

git status -sb # 查看改动
git add . # 暂存改动
git commit -m "新增登录功能" # 提交
git push -u origin feature/login # 推送功能分支

然后在 GitHub / GitLab / Gitee 上创建 Pull Request / Merge Request。

16.2 功能分支同步主分支更新

1
2
3
4
git switch feature/login                           # 切回功能分支
git fetch origin # 获取远程更新
git rebase origin/main # 把功能分支放到最新 main 后面
git push --force-with-lease # rebase 后需要安全强推

如果不想 rebase:

1
2
3
git switch feature/login                           # 切回功能分支
git pull origin main # 把 main 合并进当前分支
git push # 推送合并后的分支

16.3 合并功能分支到 main

1
2
3
4
git switch main                                    # 切到 main
git pull # 更新 main
git merge --no-ff feature/login -m "合并登录功能" # 合并功能分支
git push # 推送 main

16.4 修 bug 流程

1
2
3
4
5
6
7
8
9
git switch main                                    # 切到 main
git pull # 更新 main
git switch -c fix/login-null # 创建修复分支

# 修改 bug

git add . # 暂存修复
git commit -m "修复登录空引用" # 提交修复
git push -u origin fix/login-null # 推送修复分支

16.5 紧急热修复流程

1
2
3
4
5
6
7
8
9
10
11
git switch main                                    # 切到生产分支
git pull # 拉最新生产代码
git switch -c hotfix/crash-on-start # 创建热修复分支

# 修复问题

git add . # 暂存修复
git commit -m "修复启动崩溃" # 提交
git tag -a v1.0.1 -m "发布 v1.0.1" # 打标签
git push -u origin hotfix/crash-on-start # 推送分支
git push origin v1.0.1 # 推送标签

16.6 每天开始写代码前

1
2
3
4
5
git status -sb                                     # 确认本地有没有未提交改动
git switch main # 切到主分支
git pull # 拉最新代码
git switch feature/your-task # 切回自己的任务分支
git rebase main # 同步最新 main

16.7 每天下班前

1
2
3
4
git status -sb                                     # 看看改了什么
git add . # 暂存改动
git commit -m "保存今日开发进度" # 提交进度
git push # 推送远程,避免本机丢失

17. Git LFS 大文件管理

17.1 安装和启用 LFS

1
2
git lfs version                                    # 检查是否安装 Git LFS
git lfs install # 启用 Git LFS

17.2 跟踪大文件类型

1
2
3
4
5
6
git lfs track "*.psd"                              # 用 LFS 管理 PSD
git lfs track "*.fbx" # 用 LFS 管理 FBX
git lfs track "*.zip" # 用 LFS 管理 ZIP
git lfs track "*.mp4" # 用 LFS 管理 MP4
git add .gitattributes # LFS 规则会写入 .gitattributes
git commit -m "配置 Git LFS" # 提交 LFS 规则

17.3 查看 LFS 文件

1
2
git lfs ls-files                                   # 查看当前仓库 LFS 文件
git lfs status # 查看 LFS 状态

17.4 拉取 LFS 文件

1
2
git lfs pull                                       # 拉取当前分支需要的 LFS 文件
git lfs fetch --all # 获取所有 LFS 对象

17.5 取消某类型 LFS 跟踪

1
2
3
git lfs untrack "*.zip"                            # 取消 zip 的 LFS 跟踪规则
git add .gitattributes # 暂存规则变化
git commit -m "取消 zip LFS 跟踪" # 提交规则变化

注意:取消跟踪规则不等于自动把历史 LFS 文件转回普通 Git 文件。


18. 子模块 Submodule

18.1 添加子模块

1
2
git submodule add <repo-url> libs/MyLib            # 添加子模块到 libs/MyLib
git commit -m "添加 MyLib 子模块" # 提交 .gitmodules 和子模块引用

18.2 克隆带子模块的仓库

1
git clone --recurse-submodules <repo-url>          # 克隆时一起拉子模块

如果已经普通克隆:

1
git submodule update --init --recursive            # 初始化并更新所有子模块

18.3 更新子模块

1
2
3
4
git submodule update --remote --recursive          # 拉取子模块远程最新提交
git status # 父仓库会显示子模块引用变化
git add libs/MyLib # 暂存新的子模块指针
git commit -m "更新 MyLib 子模块" # 提交子模块版本变化

18.4 进入子模块单独操作

1
2
3
4
5
6
cd .\libs\MyLib                                    # 进入子模块目录
git status # 子模块本身也是 Git 仓库
git switch main # 切换子模块分支
git pull # 更新子模块代码
cd ..\.. # 回到父仓库
git add libs/MyLib # 父仓库记录子模块新提交

18.5 删除子模块

1
2
3
4
git submodule deinit -f libs/MyLib                 # 取消注册子模块
git rm -f libs/MyLib # 从仓库移除子模块目录
Remove-Item -Recurse -Force .git\modules\libs\MyLib # 删除内部模块缓存
git commit -m "删除 MyLib 子模块" # 提交删除

19. Worktree 多工作区

19.1 什么时候用 worktree

  • 想同时打开两个分支
  • 不想来回 stash
  • 一个分支在跑构建,另一个分支继续改 bug
  • 同一个仓库多个任务并行处理

19.2 新建一个工作区

1
2
git worktree add ..\MyProject-dev dev              # 把 dev 分支签出到旁边目录
git worktree add -b fix/login ..\MyProject-fix main # 从 main 新建 fix/login 工作区

19.3 查看工作区

1
git worktree list                                  # 查看所有 worktree

19.4 删除工作区

1
2
git worktree remove ..\MyProject-dev               # 删除 worktree 目录和记录
git worktree prune # 清理已经不存在的 worktree 记录

20. Cherry-pick、Patch 与临时复制提交

20.1 cherry-pick 一个提交

1
2
git switch dev                                     # 切到目标分支
git cherry-pick <hash> # 把某个提交复制到当前分支

20.2 cherry-pick 多个提交

1
2
git cherry-pick <hash1> <hash2>                    # 按顺序复制多个提交
git cherry-pick <old>^..<new> # 复制一段连续提交

20.3 cherry-pick 冲突处理

1
2
3
4
5
git status                                         # 查看冲突
notepad <file> # 解决冲突
git add <file> # 标记解决
git cherry-pick --continue # 继续 cherry-pick
git cherry-pick --abort # 放弃 cherry-pick

20.4 生成 patch

1
2
git format-patch -1 <hash>                         # 把一个提交生成 patch 文件
git format-patch main..feature/login # 把一段提交生成 patch 文件

20.5 应用 patch

1
2
git apply .\0001-some-change.patch                 # 只应用改动,不生成提交
git am .\0001-some-change.patch # 应用 patch 并生成提交

20.6 导出未提交改动为 patch

1
2
git diff > changes.patch                           # 导出未暂存改动
git diff --staged > staged.patch # 导出已暂存改动

20.7 PowerShell 里应用补丁时注意编码

1
git apply .\changes.patch                          # 优先让 Git 直接处理 patch

如果 patch 由 PowerShell 重定向生成后编码异常,建议用 Git Bash 或 VS Code 重新保存为 UTF-8。


21. Bisect 定位问题提交

21.1 开始二分

1
2
3
git bisect start                                   # 开始二分
git bisect bad # 当前版本有问题
git bisect good <hash> # 指定一个确定没问题的历史提交

Git 会自动切到中间提交,让你测试。

21.2 标记好坏

1
2
git bisect good                                    # 当前提交没问题
git bisect bad # 当前提交有问题

重复测试,直到 Git 找出第一个坏提交。

21.3 结束二分

1
git bisect reset                                   # 回到二分前的分支状态

21.4 用脚本自动二分

1
2
3
4
git bisect start                                   # 开始二分
git bisect bad # 当前坏
git bisect good <hash> # 历史某版本好
git bisect run .\test.ps1 # 用脚本自动判断好坏,退出码 0 表示好

22. PowerShell 常用脚本与别名

22.1 查看 PowerShell 配置文件路径

1
2
3
4
$PROFILE                                          # 查看当前用户 PowerShell 配置文件路径
Test-Path $PROFILE # 检查配置文件是否存在
New-Item -ItemType File -Path $PROFILE -Force # 不存在就创建
notepad $PROFILE # 打开配置文件

22.2 常用 Git 函数

把下面内容写入 $PROFILE

1
2
3
4
5
6
7
8
9
function gs { git status -sb }                    # 快速查看状态
function gl { git log --oneline --graph --decorate --all } # 图形历史
function ga { git add @args } # git add 的短命令
function gcmsg { git commit -m $args[0] } # gcmsg "提交信息"
function gp { git push } # 推送当前分支
function gpl { git pull } # 拉取当前分支
function gb { git branch -vv } # 查看分支
function gsw { git switch @args } # 切换分支
function gnew { git switch -c $args[0] } # 新建并切换分支

重新加载:

1
2
. $PROFILE                                        # 重新加载 PowerShell 配置
gs # 测试别名函数

22.3 一键提交并推送脚本

1
2
3
4
5
6
7
8
param(
[string]$Message = "更新内容"
)

git status -sb # 提交前先显示状态
git add -A # 暂存全部改动
git commit -m $Message # 使用参数作为提交信息
git push # 推送当前分支

保存为 git-save.ps1 后执行:

1
.\git-save.ps1 -Message "更新 Git 文档"           # 一键 add、commit、push

22.4 批量拉取多个仓库

1
2
3
4
5
6
7
Get-ChildItem C:\Projects -Directory | ForEach-Object {
if (Test-Path "$($_.FullName)\.git") {
Set-Location $_.FullName
Write-Host "Pull $($_.Name)" -ForegroundColor Cyan
git pull
}
}

22.5 显示当前分支名

1
git branch --show-current                         # 输出当前分支名

23. Windows 常见问题排查

23.1 git 不是内部或外部命令

1
2
git --version                                     # 如果报错,说明 Git 不在 PATH
where.exe git # 查找 git.exe

处理:

1
2
重新安装 Git for Windows,并勾选 Git from the command line
或把 Git 安装目录里的 cmd 路径加入 PATH

常见路径:

1
C:\Program Files\Git\cmd

23.2 中文路径或文件名乱码

1
2
git config --global core.quotepath false          # Git 状态里正常显示中文路径
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 # 当前 PowerShell 输出 UTF-8

PowerShell 7 对 UTF-8 支持更好,中文项目建议优先使用 PowerShell 7。

23.3 文件名大小写问题

1
2
3
4
git config core.ignorecase                        # 查看当前仓库是否忽略大小写
git mv oldname.cs temp.cs # 先改成临时名
git mv temp.cs NewName.cs # 再改成目标大小写
git commit -m "修正文件名大小写" # 提交大小写变化

23.4 换行符反复变化

1
2
3
4
git config --global core.autocrlf true            # Windows 常用策略
git add --renormalize . # 按当前规则重新规范化文件
git status -sb # 查看哪些文件受影响
git commit -m "规范化换行符" # 提交换行符规范化

23.5 Permission denied (publickey)

1
2
3
4
ssh -T git@github.com                             # 测试 SSH 登录
ssh-add -l # 查看 agent 里是否加载密钥
Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub" # 确认公钥内容
git remote -v # 确认远程地址是不是 SSH

检查项:

  • 公钥是否添加到平台账号
  • 当前远程地址是否是 git@github.com:user/repo.git
  • 私钥是否加载到 ssh-agent
  • 多账号时是否命中了正确 Host

23.6 fatal: remote origin already exists

1
2
git remote -v                                     # 查看已有 origin
git remote set-url origin <repo-url> # 已存在就修改地址

23.7 fatal: refusing to merge unrelated histories

1
git pull origin main --allow-unrelated-histories  # 允许合并无共同历史的仓库

常见原因:本地 git init 后提交过,远程也有 README 初始化提交。

23.8 Your branch is ahead of origin/main

1
2
3
git status -sb                                    # 查看 ahead 数量
git log --oneline origin/main..HEAD # 查看本地多出的提交
git push # 推送本地提交

23.9 Your branch is behind origin/main

1
2
git status -sb                                    # 查看 behind 状态
git pull # 拉取远程提交

23.10 Your branch and origin/main have diverged

1
2
git status -sb                                    # 查看分叉状态
git pull # 用 merge 合并远程更新

或者:

1
git pull --rebase                                 # 用 rebase 整理到远程之后

23.11 推送被拒绝

1
2
git pull                                          # 先拉取远程更新
git push # 再推送

如果你的分支 rebase 过:

1
git push --force-with-lease                       # 安全强推个人分支

23.12 LF will be replaced by CRLF

1
git config --global core.autocrlf true            # Windows 正常提示

如果项目要求统一 LF,使用 .gitattributes 控制。

23.13 detached HEAD

1
2
git status                                        # 查看是否处于 detached HEAD
git switch main # 回到 main

如果在 detached HEAD 里改了代码并想保留:

1
2
3
git switch -c save-detached-work                  # 创建分支保存当前状态
git add . # 暂存改动
git commit -m "保存 detached HEAD 修改" # 提交

23.14 文件太大无法推送

1
2
3
4
5
6
git lfs install                                   # 启用 LFS
git lfs track "*.zip" # 用 LFS 跟踪大文件类型
git add .gitattributes # 暂存 LFS 规则
git add <big-file> # 添加大文件
git commit -m "使用 LFS 管理大文件" # 提交
git push # 推送

如果大文件已经进入历史,需要用历史清理工具处理,不能只靠 .gitignore 解决。

23.15 index.lock 锁文件

1
Remove-Item .git\index.lock                       # 确认没有 Git 进程运行后删除锁文件

先确认没有正在运行的 Git 命令、编辑器提交窗口或 IDE Git 操作。

23.16 当前目录不是 Git 仓库

1
2
3
4
git status                                        # 如果提示 not a git repository
pwd # 查看当前路径
ls # 看看是否在项目目录
cd C:\Projects\YourRepo # 切到正确仓库目录

23.17 误提交敏感信息

1
git revert <hash>                                 # 公共分支先用 revert 撤销

如果已经推送了密码、Token、私钥:

  • 立刻去平台后台作废泄露的 Token / 密钥
  • 从历史中清理敏感文件
  • 强推清理后的历史
  • 通知团队重新拉取或重克隆

24. 高频工作流速查

24.1 第一次把本地项目推到 GitHub

1
2
3
4
5
6
7
cd C:\Projects\MyProject                          # 进入项目
git init # 初始化仓库
git add . # 暂存全部文件
git commit -m "初始化项目" # 第一次提交
git branch -M main # 主分支改名为 main
git remote add origin git@github.com:user/repo.git # 添加远程仓库
git push -u origin main # 第一次推送并绑定上游

24.2 每次正常提交

1
2
3
4
5
6
git status -sb                                    # 看改了什么
git diff # 看未暂存差异
git add . # 暂存
git diff --staged # 看将要提交的差异
git commit -m "说明这次改了什么" # 提交
git push # 推送

24.3 拉别人最新代码

1
2
git status -sb                                    # 先确认自己没有未提交改动
git pull # 拉取并合并远程更新

如果本地有未提交改动:

1
2
3
git stash push -m "pull 前临时保存"               # 先保存
git pull # 拉取更新
git stash pop # 恢复自己的改动

24.4 新开功能分支

1
2
3
git switch main                                   # 切到主分支
git pull # 更新主分支
git switch -c feature/new-ui # 创建新功能分支

24.5 分支写完推上去

1
2
3
4
git status -sb                                    # 查看状态
git add . # 暂存全部改动
git commit -m "新增 UI 面板" # 提交
git push -u origin feature/new-ui # 推送新分支

24.6 合并 main 到自己的分支

1
2
3
git switch feature/new-ui                         # 切到自己的分支
git fetch origin # 获取远程最新
git merge origin/main # 合并 main

24.7 rebase main 到自己的分支

1
2
3
4
git switch feature/new-ui                         # 切到自己的分支
git fetch origin # 获取远程最新
git rebase origin/main # 变基到最新 main
git push --force-with-lease # rebase 后安全强推

24.8 撤销刚刚的 commit,但保留改动

1
git reset --soft HEAD~1                           # 撤销提交,改动仍在暂存区

24.9 撤销刚刚的 commit,改动回到工作区

1
git reset HEAD~1                                  # 撤销提交,改动保留在工作区

24.10 完全丢弃刚刚的 commit 和改动

1
git reset --hard HEAD~1                           # 高危:提交和改动都丢弃

24.11 只想撤销某个文件

1
2
git restore <file>                                # 丢弃某文件未暂存修改
git restore --staged <file> # 取消某文件暂存

24.12 从远程强制同步本地 main

1
2
3
4
git fetch origin                                  # 获取远程状态
git switch main # 切到 main
git reset --hard origin/main # 本地 main 强制对齐远程 main
git clean -fd # 删除未跟踪文件

高危:会丢弃本地 main 上未推送提交和未跟踪文件,执行前先 git status -sb

24.13 修改最后一次提交信息

1
2
git commit --amend -m "新的提交信息"              # 修改最近一次提交信息
git push --force-with-lease # 如果已经推送过,需要安全强推

24.14 找回误删分支

1
2
git reflog                                        # 找到删除前分支指向的提交
git switch -c recovered-branch <hash> # 用该提交重新创建分支

24.15 查看最近改过哪些文件

1
2
3
git diff --name-only                              # 未暂存改动文件
git diff --staged --name-only # 已暂存改动文件
git show --name-only --oneline HEAD # 最近一次提交改动文件

24.16 查看某个文件两版差异

1
2
git diff HEAD~1 HEAD -- <file>                    # 查看某文件最近一次提交前后差异
git diff main feature/new-ui -- <file> # 查看两个分支里某文件差异

24.17 临时切分支但当前有改动

1
2
3
git stash push -m "切分支前保存"                  # 临时保存当前改动
git switch other-branch # 切换分支
git stash pop # 需要时恢复改动

24.18 查看远程是否可推送

1
2
3
git remote -v                                     # 查看远程地址
ssh -T git@github.com # SSH 仓库测试连通性
git ls-remote origin # 测试能否读取远程引用

24.19 提交前自查清单

1
2
3
4
git status -sb                                    # 是否只包含本次要提交的文件
git diff # 未暂存内容是否正确
git diff --staged # 暂存内容是否正确
git log --oneline -5 # 最近提交历史是否正常

提交前确认:

  • 没有误提交密码、Token、私钥、账号配置
  • 没有误提交 bin/obj/Library/、日志、缓存
  • 提交信息能看懂本次改了什么
  • 分支名和目标远程正确
  • 团队公共分支不要随意 reset --hard 后强推

常用命令总表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
git status -sb                                    # 简洁查看仓库状态
git add . # 暂存全部改动
git commit -m "提交说明" # 提交改动
git pull # 拉取远程更新
git push # 推送到远程
git log --oneline --graph --decorate --all # 查看分支历史图
git switch -c feature/name # 新建并切换分支
git switch main # 切换到 main
git merge feature/name # 合并分支
git rebase origin/main # 变基到远程 main
git stash push -m "说明" # 临时保存改动
git stash pop # 恢复最近 stash
git restore <file> # 撤销文件修改
git restore --staged <file> # 取消暂存
git revert <hash> # 安全撤销某次提交
git reset --soft HEAD~1 # 撤销提交但保留暂存
git reset --hard HEAD~1 # 高危:撤销提交且丢弃改动
git reflog # 找回误操作前的位置
git clean -n # 预览未跟踪文件清理
git clean -fd # 删除未跟踪文件和目录

最后建议

  • 新手优先掌握:statusaddcommitpullpushswitchmergerestore
  • 回滚公共分支优先用 git revert,少用 reset --hard
  • 强推优先用 git push --force-with-lease,不要直接 --force
  • 每次执行删除、清理、强制回退前,先用 git status -sbgit log --oneline -5 看一眼。
  • 团队协作时,一个任务一个分支,提交信息写清楚,解决冲突后再推送。