Git 常见高频命令操作手册 & 中小企业开发工作流程
适用场景: 日常开发、团队协作、中小企业软件工程实践
覆盖平台: GitHub / Gitee / GitLab
编写日期: 2026-06-27
目标: 从零开始掌握 Git 高频命令,并建立可落地的团队开发规范
目录
- Git 基础配置
- Git 高频命令速查
- 分支管理
- 撤销与回退
- 标签管理
- Stash 暂存
- 多远程仓库管理(GitHub / Gitee / GitLab)
- 中小企业 Git 工作流程
- 日常开发实战流程
- 常见问题与解决方案
- 命令速查表
一、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.name1.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/configtext
# 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 yesbash
# 设置权限
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.git2.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-edit2.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 reflog2.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/login3.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 main7.3 从多个平台拉取更新
bash
# 拉取所有远程的更新
git fetch --all
# 查看所有远程分支
git branch -r
# 基于 Gitee 的 develop 分支创建本地分支
git checkout -b develop-gitee gitee/develop7.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.09.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-timeout9.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 中配置保护分支和代码审查规则,确保流程规范执行。