Skip to content

Git 常见高频命令操作手册 & 中小企业开发工作流程

适用场景: 日常开发、团队协作、中小企业软件工程实践
覆盖平台: GitHub / Gitee / GitLab
编写日期: 2026-06-27
目标: 从零开始掌握 Git 高频命令,并建立可落地的团队开发规范


目录

  1. Git 基础配置
  2. Git 高频命令速查
  3. 分支管理
  4. 撤销与回退
  5. 标签管理
  6. Stash 暂存
  7. 多远程仓库管理(GitHub / Gitee / GitLab)
  8. 中小企业 Git 工作流程
  9. 日常开发实战流程
  10. 常见问题与解决方案
  11. 命令速查表

一、Git 基础配置

1.1 安装与验证

bash
# Ubuntu/Debian
sudo apt update && sudo apt install -y git

# CentOS/RHEL
sudo yum install -y git
# 或
sudo dnf install -y git

# macOS
brew install git

# 验证安装
git --version
# 预期输出:git version 2.43.0 或更高

1.2 全局配置

bash
# 配置用户名和邮箱(必须,会记录到提交历史中)
git config --global user.name "Your Name"
git config --global user.email "your.email@company.com"

# 配置默认编辑器(可选)
git config --global core.editor "vim"
# 或 VS Code
git config --global core.editor "code --wait"

# 配置默认分支名称为 main
git config --global init.defaultBranch main

# 配置换行符处理(跨平台团队建议)
git config --global core.autocrlf input   # Linux/Mac
git config --global core.autocrlf true    # Windows

# 配置别名(提高效率)
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
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' --abbrev-commit"
git config --global alias.last "log -1 HEAD"
git config --global alias.unstage "reset HEAD --"
git config --global alias.visual "!gitk"

# 查看所有配置
git config --list
git config --global --list

# 查看单个配置
git config user.name

1.3 SSH 密钥配置(连接远程仓库)

bash
# 生成 SSH 密钥(Ed25519 算法,推荐)
ssh-keygen -t ed25519 -C "your.email@company.com" -f ~/.ssh/id_ed25519

# 或传统 RSA(兼容旧系统)
ssh-keygen -t rsa -b 4096 -C "your.email@company.com" -f ~/.ssh/id_rsa

# 启动 ssh-agent
eval "$(ssh-agent -s)"

# 添加私钥到 ssh-agent
ssh-add ~/.ssh/id_ed25519

# 复制公钥到剪贴板(用于粘贴到 GitHub/Gitee/GitLab)
cat ~/.ssh/id_ed25519.pub
# 或在 macOS: pbcopy < ~/.ssh/id_ed25519.pub
# 或在 WSL: clip.exe < ~/.ssh/id_ed25519.pub

# 测试连接
cd ~/.ssh
ssh -T git@github.com
# 预期输出:Hi username! You've successfully authenticated...

ssh -T git@gitee.com
# 预期输出:Hi username! You've successfully authenticated...

ssh -T git@gitlab.com
# 预期输出:Welcome to GitLab, @username!

1.4 多平台 SSH 配置(同时管理多个账号)

bash
# 编辑 SSH 配置文件
vim ~/.ssh/config
text
# GitHub 账号
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes

# Gitee 账号
Host gitee.com
    HostName gitee.com
    User git
    IdentityFile ~/.ssh/id_ed25519_gitee
    IdentitiesOnly yes

# GitLab 公司私有部署
Host gitlab.company.com
    HostName gitlab.company.com
    User git
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_gitlab
    IdentitiesOnly yes
bash
# 设置权限
chmod 600 ~/.ssh/config
chmod 600 ~/.ssh/id_*
chmod 644 ~/.ssh/id_*.pub

二、Git 高频命令速查

2.1 仓库初始化与克隆

bash
# 初始化本地仓库
git init
git init project-name

# 克隆远程仓库
git clone https://github.com/user/repo.git
git clone git@github.com:user/repo.git

# 克隆指定分支
git clone -b develop git@github.com:user/repo.git

# 克隆到指定目录
git clone git@github.com:user/repo.git my-project

# 克隆只包含最近历史(浅克隆,节省空间)
git clone --depth 1 git@github.com:user/repo.git

2.2 日常提交循环

bash
# 查看工作区状态
git status
git status -s          # 简洁模式

# 查看文件修改内容
git diff               # 查看未暂存的修改
git diff --staged      # 查看已暂存但未提交的修改(--cached 同义)
git diff HEAD          # 查看工作区与最新提交的差异

# 添加文件到暂存区
git add filename.txt              # 添加单个文件
git add dir/                      # 添加整个目录
git add *.js                      # 添加匹配的文件
git add .                         # 添加当前目录所有修改(不包括删除)
git add -A                        # 添加所有修改(包括新增、修改、删除)
git add -u                        # 添加修改和删除,不包括新增

# 提交更改
git commit -m "feat: add login page"
git commit -m "feat: add login page" -m "Detailed description..."

# 暂存并一步提交(仅对已跟踪文件)
git commit -am "fix: resolve null pointer"

# 修改最后一次提交(未推送时)
git commit --amend -m "feat: add login page with validation"
# 或保持提交信息不变,只添加遗漏文件
git add forgotten-file.js
git commit --amend --no-edit

2.3 查看历史与状态

bash
# 查看提交历史
git log
git log --oneline                    # 一行显示
git log --oneline --graph            # 图形化分支历史
git log --oneline --all --graph      # 显示所有分支图形
git log -n 5                         # 最近 5 条
git log --since="2 weeks ago"        # 最近两周
git log --author="zhangsan"          # 按作者过滤
git log --grep="feat:"               # 按提交信息过滤
git log -- filename.txt              # 查看某文件的修改历史
git log -p -- filename.txt           # 查看某文件的详细修改内容

# 查看某行代码的修改历史(追责)
git blame filename.txt
git blame -L 10,20 filename.txt      # 只看 10-20 行

# 查看提交详情
git show HEAD                        # 查看最新提交
git show abc1234                     # 查看指定提交

# 查看引用日志(所有操作记录,用于恢复)
git reflog

2.4 远程操作

bash
# 查看远程仓库
git remote -v

# 添加远程仓库
git remote add origin git@github.com:user/repo.git

# 修改远程仓库地址
git remote set-url origin git@github.com:user/repo.git

# 删除远程仓库关联
git remote remove origin

# 重命名远程仓库
git remote rename origin upstream

# 获取远程更新(不合并)
git fetch origin
git fetch --all

# 拉取并合并
git pull origin main
git pull origin main --rebase         # 使用 rebase 方式拉取(推荐)

# 推送
git push origin main
git push -u origin main              # 首次推送并设置上游分支

# 推送所有分支
git push --all origin

# 强制推送(谨慎使用!)
git push origin main --force
# 安全的强制推送(推荐)
git push origin main --force-with-lease

# 删除远程分支
git push origin --delete feature/old
git push origin :feature/old         # 旧语法

# 推送标签到远程
git push origin v1.0.0
git push origin --tags               # 推送所有标签

三、分支管理

3.1 分支基础操作

bash
# 查看分支
git branch                           # 本地分支
git branch -a                        # 所有分支(含远程)
git branch -r                        # 仅远程分支
git branch -vv                       # 显示上游分支关系

# 创建分支
git branch feature/login             # 创建分支,不切换
git checkout -b feature/login        # 创建并切换(旧语法)
git switch -c feature/login          # 创建并切换(Git 2.23+ 推荐)

# 切换分支
git checkout main
git switch main                      # 推荐(Git 2.23+)

# 基于远程分支创建本地分支
git checkout -b feature/login origin/feature/login
git switch -c feature/login origin/feature/login

# 重命名分支
git branch -m old-name new-name      # 重命名当前分支
git branch -M new-name               # 强制重命名

# 删除分支
git branch -d feature/login          # 删除已合并的分支
git branch -D feature/login          # 强制删除(未合并也删)

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

3.2 合并与变基

bash
# 合并分支(Fast-forward 或合并提交)
git checkout main
git merge feature/login

# 禁用 Fast-forward,强制生成合并提交(保留分支历史)
git merge --no-ff feature/login

# 变基(整理提交历史,使其线性)
git checkout feature/login
git rebase main
# 变基后需要强制推送(如果已推送到远程)
git push origin feature/login --force-with-lease

# 交互式变基(整理提交)
git rebase -i HEAD~3                 # 整理最近 3 个提交
# 在编辑器中:
#   pick   = 保留提交
#   reword = 保留但修改提交信息
#   squash = 合并到上一个提交
#   fixup  = 合并到上一个提交,丢弃信息
#   drop   = 删除提交

# 交互式 rebase 常用场景:压缩多个提交为一个
git rebase -i HEAD~3
# 将第二个、第三个 pick 改为 squash 或 fixup

# 变基冲突解决后继续
git rebase --continue
git rebase --abort                   # 放弃变基

3.3 分支比较

bash
# 比较分支差异
git diff main feature/login          # 查看 feature/login 相对于 main 的改动
git diff main...feature/login        # 查看两个分支分叉后的改动

# 查看某分支独有的提交
git log main..feature/login          # feature/login 有但 main 没有的提交

四、撤销与回退

4.1 工作区撤销(未 add)

bash
# 撤销单个文件的修改(危险:会丢失工作区修改)
git checkout -- filename.txt
git restore filename.txt             # Git 2.23+ 推荐

# 撤销所有未暂存的修改
git checkout -- .
git restore .                        # 推荐

4.2 暂存区撤销(已 add 未 commit)

bash
# 将文件从暂存区移回工作区(保留修改)
git reset HEAD filename.txt
git restore --staged filename.txt    # 推荐

# 撤销所有暂存
git reset HEAD
git restore --staged .               # 推荐

4.3 提交回退(已 commit)

bash
# 软回退:保留工作区和暂存区,只回退 HEAD(用于重新提交)
git reset --soft HEAD~1

# 混合回退:保留工作区,清空暂存区(默认)
git reset --mixed HEAD~1

# 硬回退:丢弃所有修改(危险!)
git reset --hard HEAD~1

# 回退到指定版本
git reset --hard abc1234

# 查看所有操作记录(用于恢复)
git reflog
# 找到回退前的 commit hash,然后恢复
git reset --hard abc1234@{1}

4.4 反向提交(安全回退已推送的代码)

bash
# 创建一个新的提交,撤销某次提交的修改(推荐用于已推送的代码)
git revert HEAD                      # 撤销最后一次提交
git revert abc1234                   # 撤销指定提交
# 这会生成一个新的提交,历史记录完整保留

五、标签管理

bash
# 查看标签
git tag
git tag -l "v1.*"                    # 按模式过滤

# 创建轻量标签
git tag v1.0.0

# 创建附注标签(推荐,含作者、日期、信息)
git tag -a v1.0.0 -m "Release version 1.0.0"

# 基于历史提交打标签
git tag -a v0.9.0 abc1234 -m "Version 0.9.0"

# 推送标签到远程
git push origin v1.0.0
git push origin --tags               # 推送所有标签

# 删除本地标签
git tag -d v1.0.0

# 删除远程标签
git push origin --delete v1.0.0
git push origin :refs/tags/v1.0.0

# 检出标签(创建临时分支)
git checkout -b version-1.0 v1.0.0

六、Stash 暂存

bash
# 暂存当前工作区(未提交的修改)
git stash
git stash push -m "WIP: login feature"

# 暂存包括未跟踪的文件
git stash push -u -m "include new files"

# 查看暂存列表
git stash list

# 应用最近一次暂存(不删除 stash 记录)
git stash apply

# 应用指定暂存
git stash apply stash@{2}

# 弹出最近一次暂存(应用并删除)
git stash pop

# 删除最近一次暂存
git stash drop

# 删除指定暂存
git stash drop stash@{1}

# 清空所有暂存
git stash clear

# 查看暂存内容
git stash show
git stash show -p                      # 显示完整 diff

七、多远程仓库管理(GitHub / Gitee / GitLab)

7.1 同时关联多个平台

bash
# 场景:代码同时推送到 GitHub、Gitee 和公司 GitLab

# 1. 先克隆或初始化仓库
git clone git@github.com:company/project.git
cd project

# 2. 添加其他远程仓库
git remote add gitee git@gitee.com:company/project.git
git remote add gitlab git@gitlab.company.com:company/project.git

# 3. 查看所有远程
git remote -v
# 预期输出:
# github  git@github.com:company/project.git (fetch)
# github  git@github.com:company/project.git (push)
# gitee   git@gitee.com:company/project.git (fetch)
# gitee   git@gitee.com:company/project.git (push)
# gitlab  git@gitlab.company.com:company/project.git (fetch)
# gitlab  git@gitlab.company.com:company/project.git (push)

7.2 一键推送到所有远程

bash
# 方法 1:使用 git 别名(推荐)
git config --global alias.pushall '!git push github && git push gitee && git push gitlab'

# 使用方法
git pushall

# 方法 2:使用脚本
sudo tee /usr/local/bin/git-push-all << 'EOF'
#!/bin/bash
# 推送到所有配置的远程仓库
for remote in $(git remote); do
    echo "==> Pushing to $remote..."
    git push $remote "$@" || echo "Failed to push to $remote"
done
echo "All done!"
EOF
sudo chmod +x /usr/local/bin/git-push-all

# 方法 3:使用 git push 多远程(配置 push URL)
git remote add all git@github.com:company/project.git
git remote set-url --add all git@gitee.com:company/project.git
git remote set-url --add all git@gitlab.company.com:company/project.git
git push all main

7.3 从多个平台拉取更新

bash
# 拉取所有远程的更新
git fetch --all

# 查看所有远程分支
git branch -r

# 基于 Gitee 的 develop 分支创建本地分支
git checkout -b develop-gitee gitee/develop

7.4 不同平台的分支策略

bash
# 场景:GitHub 用于开源,Gitee 用于国内镜像,GitLab 用于内部 CI/CD

# 设置默认推送远程
git config branch.main.remote github
git config branch.main.merge refs/heads/main

# 仅推送特定分支到特定远程
git push gitee main                   # 只推送 main 到 Gitee

八、中小企业 Git 工作流程

8.1 分支模型(Git Flow 简化版)

中小企业推荐采用 简化版 Git Flow,减少管理成本,同时保证代码质量:

main        ───────●────────●────────●────────●─────────
                   ↑        ↑        ↑        ↑
                  v1.0     v1.1     v1.2     v1.3

develop     ─────●───●───●───●───●───●───●───●───●────
                  ↑       ↑       ↑       ↑
feature/login    ●──●●   │       │       │
feature/pay      │   │   ●──●●   │       │
feature/notify   │   │   │   │   ●──●●   │
                  │   │   │   │   │   │
release/1.1      │   │   │   │   │   └──●──●──●──┘
hotfix/1.1.1     │   │   │   │   │           └──●──┘

分支说明:

分支说明规则
main生产分支永远可部署,只能通过 PR/MR 合并,禁止直接推送
develop开发分支日常开发集成,功能完成后的合并目标
feature/*功能分支从 develop 检出,完成后合并回 develop
release/*发布分支从 develop 检出,测试修复后合并到 main 和 develop
hotfix/*热修复分支从 main 检出,修复后合并到 main 和 develop

8.2 命名规范

bash
# 分支命名
feature/login-page          # 功能:登录页面
feature/JIRA-123-pay-api    # 功能:关联 JIRA 工单号
bugfix/JIRA-456-null-fix    # 修复:空指针修复
hotfix/1.2.1-db-timeout     # 热修:数据库超时
release/v1.2.0              # 发布:v1.2.0

# 提交信息规范(Conventional Commits)
feat: add user login         # 新功能
fix: resolve db timeout      # 修复
refactor: extract utils      # 重构
docs: update API doc         # 文档
style: format code           # 代码格式(不影响功能)
test: add login tests        # 测试
chore: update deps           # 构建/工具/依赖
perf: optimize query         # 性能优化

8.3 保护分支规则(GitHub / GitLab / Gitee)

GitHub 设置:

  • Settings → Branches → Add rule
  • Branch name pattern: main
  • ✅ Require a pull request before merging
  • ✅ Require approvals: 1
  • ✅ Dismiss stale PR approvals when new commits are pushed
  • ✅ Require status checks to pass before merging
  • ✅ Include administrators

GitLab 设置:

  • Settings → Repository → Protected branches
  • Branch: main
  • Allowed to merge: Maintainers + Developers
  • Allowed to push: No one(禁止直接推送)
  • Require approval from CODEOWNERS

Gitee 设置:

  • 仓库设置 → 保护分支规则
  • 分支名称:main、develop
  • 禁止强制推送
  • 开启 Pull Request 审查

九、日常开发实战流程

9.1 新功能开发完整流程

bash
# ========== 第 1 步:开始工作前,确保本地 develop 最新 ==========
git checkout develop
git pull origin develop

# ========== 第 2 步:创建功能分支 ==========
git checkout -b feature/JIRA-123-login-page
# 或 git switch -c feature/JIRA-123-login-page

# ========== 第 3 步:开发过程中,频繁提交 ==========
# 编辑代码...
git add .
git commit -m "feat: add login form UI"

# 编辑代码...
git add .
git commit -m "feat: add login API integration"

# ========== 第 4 步:开发完成,整理提交历史(可选但推荐) ==========
# 将多个小提交压缩为一个清晰的提交
git rebase -i HEAD~3
# 在编辑器中:
#   pick abc1234 feat: add login form UI
#   squash def5678 feat: add login API integration
#   squash ghi9012 fix: adjust button style

# ========== 第 5 步:同步远程 develop 的最新变更(避免冲突) ==========
git checkout develop
git pull origin develop

git checkout feature/JIRA-123-login-page
# 方法 A:合并(保留完整分支历史)
git merge develop

# 方法 B:变基(线性历史,推荐)
git rebase develop
# 如有冲突,解决后:
#   git add .
#   git rebase --continue

# ========== 第 6 步:推送到远程 ==========
git push origin feature/JIRA-123-login-page
# 如果是 rebase 后首次推送,需要强制推送(安全方式)
git push origin feature/JIRA-123-login-page --force-with-lease

# ========== 第 7 步:发起 Pull Request / Merge Request ==========
# GitHub: 网页上点击 "Compare & pull request"
# GitLab: 网页上点击 "Create merge request"
# Gitee: 网页上点击 "新建 Pull Request"
#
# 目标分支:develop
# 审查人:至少 1 人
# 标题:feat: add login page (JIRA-123)
# 描述:
#   - 实现了登录表单 UI
#   - 集成了后端登录 API
#   - 添加了表单验证
#   - 测试:本地通过

# ========== 第 8 步:审查通过后合并 ==========
# 在网页上点击 "Merge pull request"
# 推荐选择:"Create a merge commit" 或 "Squash and merge"
# 不推荐:"Rebase and merge"(会丢失 PR 上下文)

# ========== 第 9 步:清理本地分支 ==========
git checkout develop
git pull origin develop              # 拉取已合并的代码
git branch -d feature/JIRA-123-login-page   # 删除本地分支
git push origin --delete feature/JIRA-123-login-page  # 删除远程分支

9.2 发布流程

bash
# ========== 第 1 步:从 develop 创建发布分支 ==========
git checkout develop
git pull origin develop

git checkout -b release/v1.2.0

# ========== 第 2 步:在发布分支上修复 Bug(不添加新功能) ==========
# 修复测试发现的问题...
git add .
git commit -m "fix: resolve payment timeout in release"

# ========== 第 3 步:更新版本号 ==========
# 编辑 version.txt 或 package.json,将版本改为 1.2.0
git add .
git commit -m "chore: bump version to 1.2.0"

# ========== 第 4 步:合并到 main 并打标签 ==========
git checkout main
git pull origin main

git merge --no-ff release/v1.2.0 -m "Merge release v1.2.0"

git tag -a v1.2.0 -m "Release version 1.2.0"
git push origin main
git push origin v1.2.0

# ========== 第 5 步:合并回 develop ==========
git checkout develop
git merge --no-ff release/v1.2.0 -m "Merge release v1.2.0 back to develop"
git push origin develop

# ========== 第 6 步:删除发布分支 ==========
git branch -d release/v1.2.0
git push origin --delete release/v1.2.0

9.3 热修复流程(线上紧急修复)

bash
# ========== 第 1 步:从 main 创建热修复分支 ==========
git checkout main
git pull origin main

git checkout -b hotfix/1.2.1-db-timeout

# ========== 第 2 步:修复 Bug ==========
# 修复代码...
git add .
git commit -m "fix: resolve database connection timeout"

# 更新版本号到 1.2.1
git add .
git commit -m "chore: bump version to 1.2.1"

# ========== 第 3 步:合并到 main 并打标签 ==========
git checkout main
git merge --no-ff hotfix/1.2.1-db-timeout -m "Merge hotfix v1.2.1"
git tag -a v1.2.1 -m "Hotfix version 1.2.1"
git push origin main
git push origin v1.2.1

# ========== 第 4 步:合并到 develop ==========
git checkout develop
git merge --no-ff hotfix/1.2.1-db-timeout -m "Merge hotfix v1.2.1 to develop"
git push origin develop

# ========== 第 5 步:清理 ==========
git branch -d hotfix/1.2.1-db-timeout
git push origin --delete hotfix/1.2.1-db-timeout

9.4 代码审查检查清单(Review Checklist)

markdown
## 审查者检查清单

- [ ] 代码是否符合团队编码规范
- [ ] 是否有明显的逻辑错误或空指针风险
- [ ] 是否有敏感信息泄露(密码、密钥、Token)
- [ ] 是否包含必要的单元测试
- [ ] 文档是否同步更新(README、API 文档)
- [ ] 提交信息是否符合 Conventional Commits 规范
- [ ] 是否引入了不必要的依赖
- [ ] 性能关键点是否有优化空间

## 提交者自查清单

- [ ] 本地测试通过(编译、单元测试、集成测试)
- [ ] 代码已按功能拆分提交,历史清晰
- [ ] 已同步最新 develop 分支,无冲突
- [ ] 已删除调试代码和 console.log
- [ ] 已更新 CHANGELOG(如需要)

十、常见问题与解决方案

问题 1:提交时提示 "Please tell me who you are"

原因: 未配置用户名和邮箱

解决:

bash
git config --global user.name "Your Name"
git config --global user.email "your.email@company.com"

问题 2:推送时提示 "Permission denied (publickey)"

原因: SSH 密钥未配置或未添加到远程平台

解决:

bash
# 1. 检查 SSH 密钥是否存在
ls -la ~/.ssh/

# 2. 生成密钥(如不存在)
ssh-keygen -t ed25519 -C "your.email@company.com"

# 3. 添加到 ssh-agent
ssh-add ~/.ssh/id_ed25519

# 4. 复制公钥到 GitHub/Gitee/GitLab 的 SSH 设置中
cat ~/.ssh/id_ed25519.pub

# 5. 测试连接
ssh -T git@github.com

问题 3:冲突解决(Conflict)

解决:

bash
# 拉取时发生冲突
git pull origin develop
# Auto-merging file.txt
# CONFLICT (content): Merge conflict in file.txt

# 1. 查看冲突文件
git status

# 2. 打开文件,找到冲突标记:
#    <<<<<<< HEAD
#    你的代码
#    =======
#    别人的代码
#    >>>>>>> develop

# 3. 手动编辑文件,保留正确代码,删除冲突标记

# 4. 标记冲突已解决
git add file.txt

# 5. 完成合并
git commit -m "merge: resolve conflict in file.txt"
# 或如果是 rebase:
git rebase --continue

问题 4:误删分支或提交

解决:

bash
# 查看 reflog 找到删除前的 commit hash
git reflog
# 输出示例:
# abc1234 HEAD@{0}: checkout: moving from feature/login to develop
# def5678 HEAD@{1}: commit: feat: add login API

# 恢复分支
git checkout -b feature/login def5678

# 或恢复硬回退前的状态
git reset --hard def5678

问题 5:提交信息写错了(未推送)

解决:

bash
# 修改最后一次提交信息
git commit --amend -m "新的提交信息"

# 修改最后一次提交的内容(添加遗漏文件)
git add forgotten-file.js
git commit --amend --no-edit

问题 6:误将大文件提交到仓库

解决:

bash
# 从所有历史中删除大文件(使用 git-filter-repo 或 BFG)
# 安装 git-filter-repo
pip install git-filter-repo

# 删除文件
git filter-repo --path filename.bin --invert-paths

# 强制推送(所有协作者需重新克隆)
git push origin --force --all

问题 7:忽略文件未生效

解决:

bash
# .gitignore 修改后未生效,因为文件已被跟踪
git rm -r --cached .
git add .
git commit -m "fix: update .gitignore"

问题 8:多平台同步时某个平台推送失败

解决:

bash
# 单独推送到失败的平台
git push gitee main

# 如果提示冲突,先拉取再推送
git fetch gitee
git merge gitee/main
# 或
git rebase gitee/main
git push gitee main

问题 9:Windows 和 Linux 换行符问题

解决:

bash
# 统一配置
git config --global core.autocrlf input   # Linux/Mac 用户
git config --global core.autocrlf true    # Windows 用户

# 添加 .gitattributes 到仓库根目录
cat > .gitattributes << 'EOF'
* text=auto eol=lf
*.bat text eol=crlf
*.cmd text eol=crlf
EOF

问题 10:Git 仓库体积过大

解决:

bash
# 查看仓库体积
du -sh .git

# 垃圾回收
git gc --aggressive --prune=now

# 查看大文件
git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | awk '/^blob/ {print $3 " " $4}' | sort -rn | head -20

# 清理未引用的对象
git prune
git gc

十一、命令速查表

配置速查

命令说明
git config --global user.name "Name"设置用户名
git config --global user.email "Email"设置邮箱
git config --list查看所有配置

仓库速查

命令说明
git init初始化仓库
git clone <url>克隆仓库
git status查看状态
git add .添加所有修改
git commit -m "msg"提交
git push origin main推送
git pull origin main拉取合并
git fetch origin获取远程更新

分支速查

命令说明
git branch列出分支
git branch -a列出所有分支
git checkout -b feat创建并切换分支
git switch -c feat创建并切换(新语法)
git merge feat合并分支
git rebase main变基到 main
git branch -d feat删除分支
git push origin --delete feat删除远程分支

撤销速查

命令说明
git restore file撤销工作区修改
git restore --staged file撤销暂存
git reset --soft HEAD~1软回退 1 次提交
git reset --hard HEAD~1硬回退 1 次提交
git revert HEAD反向提交(安全回退)
git reflog查看操作记录

远程速查

命令说明
git remote -v查看远程仓库
git remote add origin <url>添加远程
git remote set-url origin <url>修改远程地址
git fetch --all拉取所有远程更新
git push -u origin main首次推送并关联
git push origin --tags推送所有标签

其他速查

命令说明
git log --oneline --graph图形化历史
git stash暂存工作区
git stash pop恢复暂存
git tag -a v1.0 -m "msg"创建标签
git diff查看差异
git blame file逐行查看作者
git cherry-pick abc123摘取提交

附录:中小企业 Git 规范模板

.gitignore 模板(JavaScript/Node.js 项目)

gitignore
# Dependencies
node_modules/
package-lock.json
yarn.lock
pnpm-lock.yaml

# Build output
dist/
build/
*.tgz

# Environment variables
.env
.env.local
.env.*.local

# IDE
.idea/
.vscode/
*.swp
*.swo
*~

# OS
.DS_Store
Thumbs.db

# Logs
logs/
*.log
npm-debug.log*
yarn-debug.log*

# Testing
coverage/
.nyc_output/

# Temporary files
tmp/
temp/
*.tmp

提交信息模板

bash
# 在 .gitmessage 文件中
# <类型>: <简短描述>(不超过 50 字符)
#
# <详细描述>
# - 做了什么修改
# - 为什么做这些修改
# - 相关工单号: JIRA-123
#
# 类型:
#   feat: 新功能
#   fix: 修复
#   docs: 文档
#   style: 格式(不影响代码含义)
#   refactor: 重构
#   perf: 性能优化
#   test: 测试
#   chore: 构建/工具/依赖

# 配置提交模板
git config --global commit.template ~/.gitmessage

文档完成
本手册涵盖了 Git 日常高频命令、多平台远程仓库管理,以及中小企业可落地的 Git 工作流程。建议团队结合实际情况,在 GitHub / GitLab / Gitee 中配置保护分支和代码审查规则,确保流程规范执行。