初始化与基本配置
设置全局用户名、邮箱和新仓库的默认分支名。
git config --global user.name "[你的名字]"
git config --global user.email "[你的邮箱]"
git config --global init.defaultBranch main
查看配置及其来源,或只读取某一项配置。
git config --list --show-origin
git config --get user.name
git config --get user.email
为常用命令设置简短别名。
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.lg "log --oneline --decorate --graph --all"
查看 Git 版本、命令帮助和当前仓库目录。
git --version
git help [命令]
git [命令] -h
git rev-parse --show-toplevel
创建与克隆仓库
在当前目录创建新仓库,或从远程地址克隆仓库。
git init
git clone [仓库地址]
git clone [仓库地址] [目录名]
克隆指定分支、仅获取最近一次提交,或连同子模块一起克隆。
git clone --branch [分支名] [仓库地址]
git clone --depth 1 [仓库地址]
git clone --recurse-submodules [仓库地址]
查看状态与差异
查看工作区和暂存区状态;简短格式适合快速检查。
git status
git status --short
查看尚未暂存、已经暂存或两个版本之间的差异。
git diff
git diff --staged
git diff [提交A] [提交B]
git diff [分支A]...[分支B]
git diff [提交A] [提交B] -- [文件路径]
仅列出发生变化的文件,或显示每个文件的增删行数。
git diff --name-status
git diff --stat
暂存与提交
暂存指定文件、当前目录的变化、仓库内全部变化,或逐块选择要暂存的内容。
git add [文件路径]
git add .
git add -A
git add -p
取消暂存,但保留工作区中的修改。
git restore --staged [文件路径]
git restore --staged .
创建提交;-a 只会自动暂存已经被 Git 跟踪的文件。
git commit -m "[提交说明]"
git commit -am "[提交说明]"
修改最近一次提交的说明,或把新暂存的内容补进最近一次提交。
git commit --amend
git commit --amend --no-edit
查看提交历史
以精简、图形化方式查看全部分支的提交历史。
git log --oneline
git log --oneline --decorate --graph --all
git log -n 10
查看指定提交、文件历史或文件逐行作者信息。
git show [提交]
git log -p -- [文件路径]
git log --follow -- [文件路径]
git blame [文件路径]
在仓库内容或提交历史中搜索文本。
git grep "[关键词]"
git log -S"[关键词]" --oneline
git log -G"[正则表达式]" --oneline
分支操作
查看本地分支、远程分支和全部分支。
git branch
git branch -r
git branch -a
切换分支、创建并切换到新分支,或回到上一个分支。
git switch [分支名]
git switch -c [新分支名]
git switch -
重命名当前分支,或删除已经合并和未合并的本地分支。
git branch -m [新分支名]
git branch -d [分支名]
git branch -D [分支名]
查看已经合并或尚未合并到当前分支的分支。
git branch --merged
git branch --no-merged
合并与拣选提交
把指定分支合并到当前分支;需要时保留一个明确的合并提交。
git merge [分支名]
git merge --no-ff [分支名]
git merge --abort
解决冲突后继续合并。
git status
git add [已解决的文件]
git commit
把其他分支中的一个提交或一段连续提交应用到当前分支。
git cherry-pick [提交]
git cherry-pick [起始提交]^..[结束提交]
git cherry-pick --continue
git cherry-pick --abort
远程仓库与同步
查看、添加、重命名或修改远程仓库。
git remote -v
git remote add origin [仓库地址]
git remote rename [旧名称] [新名称]
git remote set-url origin [新仓库地址]
获取远程更新,并清理远程已经删除的分支引用。
git fetch origin
git fetch --all --prune
git remote prune origin
拉取远程变化;使用变基可以避免额外的合并提交。
git pull
git pull --rebase
git pull --ff-only
推送当前分支、首次设置上游分支,或删除远程分支。
git push
git push -u origin [分支名]
git push origin --delete [分支名]
为已有本地分支设置远程上游分支。
git branch --set-upstream-to=origin/[分支名]
临时保存工作进度
保存当前修改;加入 -u 可以同时保存未跟踪文件。
git stash push -m "[说明]"
git stash push -u -m "[说明]"
查看临时保存列表及其详细差异。
git stash list
git stash show -p stash@{0}
恢复、应用或基于某次临时保存创建新分支。
git stash pop
git stash apply stash@{0}
git stash branch [新分支名] stash@{0}
删除指定或全部临时保存。清空操作无法直接撤销,请先确认内容。
git stash drop stash@{0}
git stash clear
撤销工作区修改
放弃指定文件或全部文件尚未暂存的修改。
git restore [文件路径]
git restore .
把某个文件恢复到指定提交中的版本。
git restore --source=[提交] -- [文件路径]
先预览将被删除的未跟踪文件,再执行清理。git clean -fd 删除的文件通常无法恢复。
git clean -nd
git clean -fd
撤销或恢复提交
撤销最近一次提交,同时保留修改。--soft 保留暂存状态,默认模式取消暂存。
git reset --soft HEAD~1
git reset HEAD~1
git reset HEAD~[数量]
新建一个反向提交来撤销指定提交,适合已经推送或多人共享的分支。
git revert [提交]
git revert [起始提交]^..[结束提交]
危险操作:以下命令会丢弃未提交修改,并改写当前分支指向。执行前请确认已经备份。
git reset --hard HEAD~1
git fetch origin
git reset --hard origin/[分支名]
通过引用日志查找之前的分支位置,并在确认后恢复。
git reflog
git reset --hard [引用日志中的提交]
变基与整理历史
把当前分支的提交移动到目标分支最新提交之后。
git rebase [目标分支]
git rebase --continue
git rebase --skip
git rebase --abort
交互式整理最近若干次提交,可调整顺序、合并、修改或删除提交。
git rebase -i HEAD~[数量]
把一个分支从旧基准迁移到新基准。
git rebase --onto [新基准] [旧基准] [分支名]
注意:变基会重写提交历史。不要随意对其他人正在使用的公共分支执行变基和强制推送。
标签管理
查看标签,创建轻量标签或带说明的标签。
git tag
git tag [标签名]
git tag -a [标签名] -m "[标签说明]"
git tag -a [标签名] [提交] -m "[标签说明]"
查看、推送或删除标签。
git show [标签名]
git push origin [标签名]
git push origin --tags
git tag -d [标签名]
git push origin --delete [标签名]
文件跟踪与忽略规则
移动、重命名或删除已经被 Git 跟踪的文件。
git mv [旧路径] [新路径]
git rm [文件路径]
git rm -r [目录路径]
停止跟踪文件但保留本地文件,常用于把文件加入 .gitignore 之后。
git rm --cached [文件路径]
git rm -r --cached [目录路径]
重新应用整个仓库的忽略规则。
git rm -r --cached .
git add .
git commit -m "更新忽略规则"
多工作区
使用工作树同时检出多个分支,无需反复切换当前目录中的分支。
git worktree list
git worktree add ../[目录名] [分支名]
git worktree add -b [新分支名] ../[目录名] [起点分支]
git worktree remove ../[目录名]
git worktree prune
子模块
添加子模块,或初始化并更新仓库内的全部子模块。
git submodule add [仓库地址] [目录路径]
git submodule update --init --recursive
获取子模块远程分支的更新,或查看每个子模块的状态。
git submodule update --remote --merge
git submodule status --recursive
git submodule foreach 'git status --short'
定位问题提交
使用二分查找逐步定位引入问题的提交。
git bisect start
git bisect bad
git bisect good [已知正常的提交]
git bisect good
git bisect bad
git bisect reset
常用协作流程
从主分支创建功能分支,提交后首次推送到远程。
git switch main
git pull --ff-only
git switch -c feature/[功能名称]
git add -A
git commit -m "完成[功能名称]"
git push -u origin feature/[功能名称]
在推送前同步主分支的最新变化。
git fetch origin
git rebase origin/main
git push