# 全局配置用户信息
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
# 生成 SSH 密钥(GitHub/GitLab 认证)
ssh-keygen -t ed25519 -C "[email protected]"
cat ~/.ssh/id_ed25519.pub # 复制公钥到平台设置
# 设置默认编辑器
git config --global core.editor "code --wait" # VS Code
# 创建新仓库
mkdir my-project && cd my-project
git init
# 克隆现有仓库
git clone https://github.com/user/repo.git
git clone -b develop https://github.com/user/repo.git # 克隆特定分支
# 查看状态
git status
# 添加文件到暂存区
git add file.txt # 添加单个文件
git add . # 添加所有修改
git add -p # 交互式添加部分修改
# 提交变更
git commit -m "Add feature X"
git commit --amend # 修正上次提交(包括修改信息)
# 查看历史
git log --oneline --graph --all # 图形化历史
# 关联远程仓库
git remote add origin https://github.com/user/repo.git
# 推送到远程
git push -u origin main # 首次推送并建立追踪
git push # 后续简写推送
# 获取更新
git fetch # 仅获取元数据
git pull # 相当于 fetch + merge
# 创建分支
git branch dev # 创建
git checkout dev # 切换
git checkout -b hotfix # 创建并切换
# 合并分支
git checkout main
git merge hotfix --no-ff # 禁用 fast-forward(保留分支历史)
# 解决冲突(手动修改文件后)
git add conflicted-file.txt
git commit -m "Resolve merge conflict"
# 删除分支
git branch -d feature # 安全删除(已合并)
git branch -D feature # 强制删除(未合并)
# 分支重命名
git branch -m old-name new-name
# 撤销工作区修改
git restore file.txt # 放弃指定文件的修改
git restore . # 放弃所有修改
# 撤销暂存区文件
git restore --staged file.txt # 取消暂存
# 重置到指定提交
git reset --soft HEAD~1 # 撤销commit保留修改(在暂存区)
git reset --hard HEAD~3 # 彻底回退3个提交(慎用!)
git stash # 临时保存修改
git stash push -m "WIP: login" # 命名储藏
git stash list # 查看储藏列表
git stash apply stash@{1} # 应用特定储藏
git stash pop # 应用并删除最新储藏
# 优化本地提交历史
git rebase -i HEAD~3
# 变基选项(编辑界面):
pick = 保留提交
reword = 修改提交信息
edit = 修改提交内容
squash = 合并到前一个提交
drop = 删除提交
# 解决冲突后继续
git rebase --continue
# 定位问题提交
git bisect start
git bisect bad # 当前版本有问题
git bisect good v1.0 # 标记过去正常版本
# Git 自动切到中间提交,测试后:
git bisect good # 若正常
git bisect bad # 若异常
# 结束时:
git bisect reset
# 忽略所有日志文件
*.log
# 忽略 node_modules
node_modules/
# 排除 .env 但包含 .env.example
.env
!.env.example
# 创建预提交钩子
touch .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
# 示例内容(检查代码风格):
#!/bin/sh
npm run lint # 若失败则中断提交
# 停止追踪文件但保留本地文件
git rm --cached file.txt
# 追踪空目录(创建占位文件)
touch dir/.gitkeep
# 初始化工作流
git flow init
# 默认分支:
main = 主分支
develop = 开发分支
# 功能开发
git flow feature start login
git flow feature finish login
# 发布流程
git flow release start v1.2
git flow release finish v1.2
流程:
1. 从 main 创建新分支
2. 开发后推送到远程
3. 发起 Pull Request
4. Code Review 后合并
# 保留文件历史(重命名后)
git log --follow -- file.txt
# 合并特定文件
git checkout feature -- src/utils.js
# 暂存部分修改
git add -p # 交互式选择变更块
# 恢复误删分支
git reflog # 查找提交哈希
git checkout -b recovered-branch <hash>
# 强制推送到覆盖远程历史(慎用)
git push -f origin branch-name
# 别名设置(~/.gitconfig)
[alias]
st = status
ci = commit
br = branch
df = diff
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
最佳实践:
- 小步提交(原子性修改)
- 写清晰的提交信息
- 多用 rebase 替代 merge 保持线性历史
- 定期 git gc 清理仓库
完整流程图: