Git 总结(十五)
15.总结
一、基础配置与仓库创建
1.1 用户信息(必须配置)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"-
--global表示全局配置,去掉则只对当前仓库生效。
1.2 其他常用配置
git config --global core.editor "code --wait" # 设置编辑器为 VS Code
git config --global merge.tool vimdiff # 设置差异分析工具
git config --list # 查看所有配置1.3 创建/克隆仓库
| 命令 | 说明 |
|---|---|
git init |
在当前目录初始化新仓库 |
git init <dir> |
在指定目录初始化 |
git clone <url> |
克隆远程仓库到本地 |
git clone <url> <dir> |
克隆到指定目录 |
初始化后会自动生成
.git目录(版本库),不要手动修改其中内容。
二、基本操作(工作区 ↔ 暂存区 ↔ 版本库)
2.1 查看状态
git status # 查看工作区和暂存区状态
git status -s # 简洁模式2.2 添加与提交
git add <file> # 将文件添加到暂存区
git add . # 添加所有更改(包括新文件、修改、删除)
git add -p # 交互式暂存(按块选择)
git commit -m "msg" # 将暂存区内容提交到本地仓库
git commit -a -m "msg" # 跳过暂存区,直接提交所有已跟踪文件的修改2.3 比较差异
git diff # 工作区 vs 暂存区
git diff --cached # 暂存区 vs 最近一次提交(HEAD)
git diff HEAD # 工作区 vs 最近一次提交2.4 删除与移动
git rm <file> # 删除工作区文件并移除出暂存区
git rm --cached <file> # 仅从暂存区删除,保留工作区文件
git mv <old> <new> # 移动或重命名文件(等效于 rm + add)三、分支管理
3.1 查看分支
git branch # 列出本地分支(* 表示当前分支)
git branch -r # 列出远程分支
git branch -a # 列出所有(本地+远程)3.2 创建与切换
git branch <name> # 创建分支(不切换)
git checkout <name> # 切换分支
git checkout -b <name> # 创建并切换
# Git 2.23+ 推荐
git switch <name> # 切换分支
git switch -c <name> # 创建并切换3.3 合并分支
git checkout target # 切换到目标分支(如 main)
git merge source # 将 source 分支合并到当前分支- 合并冲突处理:手动编辑冲突文件(删除
<<<<<<<、=======、>>>>>>> 标记) → git add → git commit。
3.4 删除分支
git branch -d <name> # 删除已合并的本地分支
git branch -D <name> # 强制删除未合并分支
git push origin --delete <name> # 删除远程分支3.5 分支合并模式
-
git merge --no-ff:禁用快进合并,生成合并提交(保留分支历史)。 - 默认快进合并(
--ff)仅移动指针,不产生新提交。
四、查看提交历史
4.1 git log
git log # 完整历史
git log --oneline # 一行显示
git log --graph --oneline --decorate # 图形化显示分支结构
git log -n 5 # 最近5次
git log --author="name" # 按作者过滤
git log --since="2024-01-01" --until="2024-12-31"
git log --grep="fix" # 按提交信息过滤
git log --no-merges # 不显示合并提交4.2 git blame
git blame <file> # 逐行显示文件的修改者、提交哈希、时间
git blame -L 10,20 <file> # 只显示第10-20行五、远程仓库
5.1 管理远程
git remote -v # 查看远程仓库地址
git remote add <name> <url> # 添加远程仓库(通常 name=origin)
git remote rm <name> # 删除远程仓库关联
git remote rename <old> <new> # 重命名5.2 拉取与推送
git fetch <remote> # 下载远程更新,不自动合并
git merge <remote>/<branch> # 合并远程分支到当前分支
git pull <remote> <branch> # fetch + merge 一步完成
git push <remote> <branch> # 推送本地分支到远程
git push -u <remote> <branch> # 推送并建立追踪关系(上游)
git push --all <remote> # 推送所有分支
git push --tags # 推送所有标签注意:
git push 默认只推送当前分支,需设置push.default 或使用--all。
六、标签(Tag)
6.1 创建标签
git tag <tagname> # 轻量标签
git tag -a <tagname> -m "message" # 附注标签(推荐)
git tag -a <tagname> <commit> # 为历史提交打标签6.2 查看与推送
git tag # 列出所有标签
git show <tagname> # 查看标签详情
git push origin <tagname> # 推送单个标签
git push origin --tags # 推送所有标签6.3 删除标签
git tag -d <tagname> # 删除本地标签
git push origin --delete <tagname> # 删除远程标签七、进阶操作
7.1 临时保存工作现场(stash)
git stash # 保存当前修改(包括暂存区)
git stash save "message" # 带说明保存
git stash list # 列出所有 stash
git stash apply # 应用最近的 stash(不删除)
git stash pop # 应用并删除最近的 stash
git stash drop stash@{n} # 删除指定 stash
git stash clear # 清空所有 stash7.2 变基(rebase)
git rebase <base> # 将当前分支的提交变基到 base 分支之上
git rebase -i <commit> # 交互式变基(可编辑、合并、删除提交)
# 交互式常用指令:pick, reword, edit, squash, fixup, drop警告:不要对已推送到公共仓库的分支执行 rebase,会改写历史导致团队混乱。
7.3 拣选提交(cherry-pick)
git cherry-pick <commit> # 将指定提交应用到当前分支
git cherry-pick <commit1> <commit2> # 拣选多个
git cherry-pick -n <commit> # 拣选但不自动提交(暂存到工作区)7.4 交互式暂存(git add -p)
- 逐块选择要暂存的更改,可拆分块、手动编辑。
八、撤销与恢复
8.1 工作区/暂存区撤销
| 场景 | 命令 |
|---|---|
| 丢弃工作区中某个文件的修改 | git checkout -- <file> 或 git restore <file> |
| 将文件从暂存区撤出(但保留工作区修改) | git reset HEAD <file> 或 git restore --staged <file> |
| 同时丢弃工作区和暂存区的修改(危险) | git checkout HEAD -- <file> |
8.2 提交撤销
# 撤销最近一次提交,但保留修改在工作区(--soft 保留在暂存区,--mixed 默认保留在工作区)
git reset --soft HEAD~1
git reset --mixed HEAD~1 # 默认,保留工作区修改
git reset --hard HEAD~1 # ⚠️ 彻底丢弃修改,无法找回
# 创建新提交来撤销某次提交(安全,适合已推送的提交)
git revert <commit>8.3 找回丢失的提交(reflog)
git reflog # 查看所有 HEAD 移动历史
git reset --hard HEAD@{n} # 恢复到某个历史状态九、注意事项与最佳实践
9.1 提交规范
- 提交信息应简洁明了,通常使用
<类型>: <描述>(如feat: 添加登录功能)。 - 每个提交应是一个逻辑单元,避免把多个不相关的修改混在一起。
- 提交前使用
git status 和git diff确认修改内容。
9.2 分支策略
- 主分支(
main/master)应保持稳定,仅通过合并(而非直接提交)更新。 - 开发新功能使用功能分支(
feature/xxx),完成后合并回开发分支。 - 紧急修复使用修复分支(
hotfix/xxx),从main 分出,修复后合并回main和开发分支。 - 不要向已推送的公共分支执行
rebase。
9.3 远程协作
- 推送前先
git pull拉取最新更改,避免覆盖他人提交。 - 解决冲突后务必
git add 标记为已解决,再git commit(合并提交)或git rebase --continue。 - 不要强制推送(
git push --force),除非你完全清楚后果(会覆盖远程历史)。
9.4 安全性
-
.git目录包含完整历史,不要直接删除或修改其中的文件。 - 敏感信息(密码、密钥)绝不要提交到仓库,应使用
.gitignore忽略或环境变量/Secrets 管理。 - 定期执行
git gc优化本地仓库(Git 会自动执行,一般无需手动)。
9.5 其他实用技巧
-
.gitignore:忽略不需要版本控制的文件(如node_modules/、.env)。 -
git config --global alias.<alias> '<command>':自定义命令别名,如git config --global alias.co checkout。 - 使用
git help <command>查看命令帮助。
十、常用命令速查表(按功能分类)
| 操作类别 | 常用命令 |
|---|---|
| 配置 | git config --global user.name/email,git config --list |
| 初始化/克隆 | git init,git clone <url> |
| 基本提交 | git add .,git commit -m "msg",git status,git diff |
| 分支 | git branch,git checkout -b <branch>,git merge <branch>,git branch -d <branch> |
| 远程 | git remote -v,git push origin <branch>,git pull origin <branch> |
| 历史查看 | git log --oneline --graph,git blame <file> |
| 标签 | git tag -a <tag> -m "msg",git push --tags |
| 暂存 | git stash,git stash pop |
| 撤销 | git reset HEAD <file>,git checkout -- <file>,git revert <commit> |
| 变基/拣选 | git rebase <base>,git cherry-pick <commit> |