Git 命令很多,但日常真正用到的就那么几十个,整理一下。

基础配置

刚装好先配置用户信息:

git config --global user.name "waawo"
git config --global user.email "your@email.com"

# 默认分支名改为 main
git config --global init.defaultBranch main

# 中文文件名不转义
git config --global core.quotepath false

日常操作

# 查看状态
git status
git status -s   # 简短格式

# 暂存
git add .                    # 暂存所有
git add src/                 # 暂存指定目录
git add -p                   # 交互式选择要暂存的内容(很好用)

# 提交
git commit -m "feat: add user login"
git commit --amend           # 修改最后一次提交

# 查看历史
git log --oneline
git log --oneline --graph    # 图形化分支视图
git log -p filename          # 查看某个文件的改动历史

分支操作

# 新建并切换
git switch -c feature/login

# 切换已有分支
git switch main

# 删除分支
git branch -d feature/login      # 已合并才能删
git branch -D feature/login      # 强制删除

# 查看所有分支
git branch -a

远程操作

# 拉取
git pull                          # fetch + merge
git pull --rebase                 # fetch + rebase(历史更干净)

# 推送
git push origin main
git push -u origin feature/login  # 首次推送并设置上游

# 查看远程
git remote -v

撤销和回滚

这块最容易混淆,记清楚:

# 撤销工作区的改动(未暂存)
git restore filename

# 撤销暂存(把文件从暂存区移回工作区)
git restore --staged filename

# 回退到某个提交(保留改动在工作区)
git reset HEAD~1

# 回退到某个提交(丢弃所有改动,慎用)
git reset --hard HEAD~1

# 用新提交来撤销某次提交(推荐用于已推送的提交)
git revert <commit-hash>

Stash

临时保存改动,切换分支处理其他事情时用:

git stash              # 保存
git stash pop          # 恢复并删除
git stash list         # 查看所有 stash
git stash drop         # 删除最新的 stash

一些实用技巧

# 查看两个分支的差异
git diff main feature/login

# 找出是哪次提交引入了 bug
git bisect start
git bisect bad          # 标记当前版本有问题
git bisect good v1.0    # 标记某个版本没问题
# git 会自动二分查找

# 只把某个提交应用到当前分支
git cherry-pick <commit-hash>

# 查看某行代码是谁写的
git blame filename

.gitconfig 里配几个常用别名也能省不少时间:

[alias]
    st = status
    co = switch
    lg = log --oneline --graph --all