正在加载文档...
文档内容较大,正在处理中,请稍候
正在加载文档...
文档内容较大,正在处理中,请稍候
# 查看工作区状态
git status
# 查看提交历史(简洁版)
git log --oneline -10
# 查看提交历史(详细版)
git log -10
# 查看分支列表
git branch -a
# 查看标签列表
git tag# 添加所有修改的文件
git add .
# 添加特定文件
git add <文件路径>
# 提交代码
git commit -m "feat: 添加新功能"
# 提交并添加所有修改的文件(跳过暂存区)
git commit -am "fix: 修复bug"# 推送到远程仓库
git push origin <分支名>
# 推送到远程并设置上游分支
git push -u origin <分支名>
# 拉取远程更新
git pull origin <分支名>
# 拉取远程更新(不合并)
git fetch origin# 创建新分支
git branch <分支名>
# 创建并切换到新分支
git checkout -b <分支名>
# 切换到已存在的分支
git checkout <分支名>
# 切换到主分支
git checkout master
# 或
git checkout main
# 删除本地分支(需先切换到其他分支)
git branch -d <分支名>
# 强制删除本地分支
git branch -D <分支名>
# 删除远程分支
git push origin --delete <分支名>feature/功能名称 或 feat/功能名称bugfix/bug描述 或 fix/bug描述hotfix/版本号-bug描述release/版本号当发现已发布版本存在严重 bug 需要紧急修复时,使用以下流程:
示例场景:
修复方式选择:
根据当前 master 分支的状态,有两种修复方式:
方式一:基于标签创建 hotfix 分支(推荐,适用于 master 已有新代码)
方式二:Reset 到出问题的版本(适用于 master 未发布新版本)
重要:在创建修复标签前,需要先确定正确的版本号。
版本号规则:
v1.0.3,修复后的版本应该是 v1.0.4v1.0.5),则应该创建 v1.0.6(在该最高版本基础上加 1)查看现有版本标签:
# 查看所有标签
git tag
# 查看标签列表(按版本号排序)
git tag | sort -V
# 查看最近的标签
git tag --sort=-v:refname | head -10版本号选择原则:
v1.0.3,且当前最高版本是 v1.0.3,则创建 v1.0.4v1.0.3,但当前最高版本是 v1.0.5,则创建 v1.0.6适用场景:
完整流程:
# 步骤1: 查看现有版本标签,确定下一个版本号
git tag | sort -V
# 假设当前最高版本是 v1.0.5,需要修复 v1.0.3
# 则修复版本应该是 v1.0.6
# 步骤2: 保存当前工作区的修改(如果需要保留)
git stash save "WIP: 当前开发中的修改"
# 步骤3: 基于要修复的版本标签创建 hotfix 分支
# 例如:要修复 v1.0.3,则基于 v1.0.3 创建分支
git checkout -b hotfix/v1.0.3-bugfix v1.0.3
# 步骤4: 在 hotfix 分支上修复 bug
# ... 进行修复 ...
# 步骤5: 提交修复
git add .
git commit -m "fix: 修复v1.0.3的严重bug描述"
# 步骤6: 创建新的补丁版本标签(在最高版本号基础上递增)
# 假设当前最高版本是 v1.0.5,则创建 v1.0.6
git tag -a v1.0.6 -m "版本 1.0.6: 修复v1.0.3的严重bug"
# 步骤7: 推送 hotfix 分支和标签到远程
git push origin hotfix/v1.0.3-bugfix
git push origin v1.0.6
# 步骤8: 切换回 master 分支
git checkout master
# 步骤9: 合并 hotfix 到 master(确保后续版本包含修复)
git merge hotfix/v1.0.3-bugfix
# 步骤10: 推送 master 分支
git push origin master
# 步骤11: 恢复之前保存的修改
git stash pop适用场景:
完整流程:
# 步骤1: 查看现有版本标签,确定下一个版本号
git tag | sort -V
# 假设当前最高版本是 v1.0.3,修复后应该是 v1.0.4
# 步骤2: 保存当前工作区的修改(如果需要保留)
git stash save "WIP: 当前开发中的修改"
# 步骤3: 切换到 master 分支(确保在 master 上操作)
git checkout master
# 步骤4: 重置到出问题的版本标签(保留工作区修改)
git reset --soft v1.0.3
# 或者重置并清空暂存区(如果需要重新提交)
git reset --hard v1.0.3
# 步骤5: 修复 bug
# ... 进行修复 ...
# 步骤6: 提交修复
git add .
git commit -m "fix: 修复v1.0.3的严重bug描述"
# 步骤7: 创建新的补丁版本标签
git tag -a v1.0.4 -m "版本 1.0.4: 修复v1.0.3的严重bug"
# 步骤8: 推送代码和标签到远程(需要强制推送)
# ⚠️ 注意:这会改写 master 分支历史,确保团队成员知道这个操作
git push origin master --force-with-lease
git push origin v1.0.4
# 步骤9: 恢复之前保存的修改(如果需要)
git stash pop注意事项:
--force 会改写远程分支历史,必须谨慎使用--force-with-lease 更安全,如果远程有新的提交会失败团队成员同步:
如果其他成员已经拉取了旧的 master 分支,需要重新同步:
# 获取最新的远程分支
git fetch origin
# 重置本地分支到远程版本
git reset --hard origin/master| 对比项 | 方式一:Hotfix 分支 | 方式二:Reset 到版本 |
|---|---|---|
| 适用场景 | master 已有新代码/已发布更高版本 | master 就是出问题的版本 |
| 分支历史 | 保留完整历史,创建新分支 | 改写 master 分支历史 |
| 风险等级 | 低(不影响现有分支) | 高(需要强制推送) |
| 团队协作 | 友好(无需特殊操作) | 需要团队成员重新同步 |
| 推荐度 | ⭐⭐⭐⭐⭐(推荐) | ⭐⭐⭐(谨慎使用) |
选择建议:
版本号管理:
git tag | sort -V 查看已排序的版本列表,确保版本号正确分支管理:
git stash 保存的修改是独立的,不会因为 git reset 或切换分支而丢失示例说明:
假设当前仓库有以下标签:v1.0.3, v1.0.4, v1.0.5,需要修复 v1.0.3 的 bug:
v1.0.5v1.0.3 后的新版本应该是 v1.0.6(在 v1.0.5 基础上加 1)# 查看所有标签
git tag
# 查看标签列表(按版本号排序)
git tag | sort -V
# 创建轻量标签
git tag v1.0.4
# 创建带注释的标签(推荐)
git tag -a v1.0.4 -m "版本 1.0.4: 修复xxx bug"
# 查看标签信息
git show v1.0.4
# 推送标签到远程
git push origin v1.0.4
# 推送所有标签到远程
git push origin --tags遵循 语义化版本 规范:
# 1. 确保代码已提交
git status
# 2. 切换到发布分支(通常是 master)
git checkout master
# 3. 拉取最新代码
git pull origin master
# 4. 运行测试确保代码正常
# npm test / 其他测试命令
# 5. 创建版本标签
git tag -a v1.0.4 -m "版本 1.0.4: 功能描述"
# 6. 推送代码和标签
git push origin master
git push origin v1.0.4
# 7. 如果使用 release 分支,合并到 master 后删除 release 分支
git branch -d release/v1.0.4
git push origin --delete release/v1.0.4# 切换到目标分支
git checkout master
# 合并功能分支
git merge feature/新功能
# 如果有冲突,解决冲突后提交
git add .
git commit -m "merge: 合并feature/新功能分支"# 切换到功能分支
git checkout feature/新功能
# 将 master 的更新变基到当前分支
git rebase master
# 如果有冲突,解决冲突后继续
git add .
git rebase --continue
# 切换回 master 并合并
git checkout master
git merge feature/新功能# 选择特定的提交应用到当前分支
git cherry-pick <提交hash>
# 选择多个提交
git cherry-pick <提交hash1> <提交hash2>
# 选择提交范围
git cherry-pick <起始hash>^..<结束hash>Gitee 使用 Pull Request(PR) 进行代码合并。
操作步骤:
推送分支到远程仓库
git push -u origin feature/新功能在 Gitee 网页上发起 Pull Request
master)代码审查
@用户名 通知相关人员合并 PR
删除已合并的分支
git checkout master
git pull origin master
git branch -d feature/新功能PR 描述模板:
## 变更说明
- 添加了用户登录功能
- 实现了 JWT 认证
## 相关 Issue
- Fixes #123
## 测试说明
- [x] 已完成单元测试
- [x] 已通过代码审查
## 截图(如适用)
<!-- 添加相关截图 -->GitHub 使用 Pull Request(PR) 进行代码合并。
操作步骤:
推送分支到远程仓库
git push -u origin feature/新功能在 GitHub 网页上发起 Pull Request
main 或 master)代码审查
CI/CD 检查
合并 PR
删除已合并的分支
git checkout main
git pull origin main
git branch -d feature/新功能PR 描述模板:
## Description
添加了用户登录功能和 JWT 认证
## Related Issues
- Closes #123
## Type of Change
- [ ] Bug fix
- [x] New feature
- [ ] Breaking change
- [ ] Documentation update
## Testing
- [x] Unit tests passed
- [x] Integration tests passed
## Screenshots (if applicable)
<!-- Add screenshots here -->标题规范:
类型: 简短描述(如:feat: 添加用户登录功能)修复bug、更新代码)描述要求:
代码审查:
合并前检查:
# 暂存当前修改
git stash
# 暂存并添加描述
git stash save "描述信息"
# 查看暂存列表
git stash list
# 查看暂存内容
git stash show
git stash show -p # 查看详细差异
# 恢复最近的暂存(保留暂存记录)
git stash apply
# 恢复最近的暂存(删除暂存记录)
git stash pop
# 恢复指定的暂存
git stash apply stash@{0}
# 删除暂存
git stash drop stash@{0}
# 清空所有暂存
git stash clear# 查看冲突文件
git status
# 查看冲突内容
git diff手动解决冲突
<<<<<<<, =======, >>>>>>>标记为已解决
git add <冲突文件>
git commit -m "resolve: 解决合并冲突"使用工具解决
# 使用 VS Code 或其他合并工具
git mergetool# 取消正在进行的合并
git merge --abort
# 取消正在进行的变基
git rebase --abort# 撤销单个文件的修改
git restore <文件路径>
# 撤销所有修改
git restore .
# 或使用 checkout(旧语法)
git checkout -- <文件路径># 将文件从暂存区移除(保留工作区修改)
git restore --staged <文件路径>
# 或使用 reset(旧语法)
git reset HEAD <文件路径># 修改最后一次提交信息
git commit --amend -m "新的提交信息"
# 添加文件到最后一次提交
git add <文件路径>
git commit --amend --no-edit# 回退到指定提交(保留工作区修改)
git reset --soft <提交hash>
# 回退到指定提交(保留工作区修改,清空暂存区)
git reset --mixed <提交hash>
# 回退到指定提交(清空工作区和暂存区)
git reset --hard <提交hash>
# 回退到上一个提交
git reset --hard HEAD~1
# 回退到指定提交并创建新提交(推荐,不影响远程)
git revert <提交hash>git reset --hard 会永久删除修改,使用前请确认git revert 而不是 git resetgit revert 会创建新的提交来撤销指定提交,不会改写历史# 1. 从 master 创建功能分支
git checkout master
git pull origin master
git checkout -b feature/新功能
# 2. 开发功能
# ... 编写代码 ...
# 3. 提交代码
git add .
git commit -m "feat: 添加新功能"
# 4. 推送到远程
git push -u origin feature/新功能
# 5. 在 Gitee/GitHub 创建 Pull Request 合并到 master
# 6. PR 合并后删除本地分支
git checkout master
git pull origin master
git branch -d feature/新功能# 1. 从 master 创建功能分支
git checkout master
git pull origin master
git checkout -b feature/新功能
# 2. 开发功能并提交
git add .
git commit -m "feat: 添加新功能"
git push -u origin feature/新功能
# 3. 在 Gitee/GitHub 网页上:
# - 点击「Pull Requests」/「Pull requests」
# - 点击「新建 Pull Request」/「New pull request」
# - 选择源分支和目标分支
# - 填写 PR 标题和描述
# - 提交 PR 并等待审查
# 4. 审查通过后,在网页上合并 PR
# 5. 合并后删除本地分支
git checkout master
git pull origin master
git branch -d feature/新功能# 1. 从 master 创建修复分支
git checkout master
git pull origin master
git checkout -b bugfix/修复描述
# 2. 修复 bug
# ... 修复代码 ...
# 3. 提交修复
git add .
git commit -m "fix: 修复xxx bug"
# 4. 推送到远程
git push -u origin bugfix/修复描述
# 5. 在 Gitee/GitHub 创建 Pull Request
# - 在 PR 描述中关联相关 Issue(如有)
# - 等待代码审查
# 6. PR 合并后删除分支
git checkout master
git pull origin master
git branch -d bugfix/修复描述# 1. 查看现有版本标签,确定下一个版本号
git tag | sort -V
# 假设当前最高版本是 v1.0.5,需要修复 v1.0.3
# 则修复版本应该是 v1.0.6(在最高版本基础上加 1)
# 2. 保存当前工作
git stash save "WIP: 当前开发代码"
# 3. 基于要修复的旧版本标签创建 hotfix 分支
git checkout -b hotfix/v1.0.3-bugfix v1.0.3
# 4. 修复 bug
# ... 修复代码 ...
# 5. 提交修复
git add .
git commit -m "fix: 修复v1.0.3的严重bug"
# 6. 创建补丁版本标签(在最高版本号基础上递增)
# 假设当前最高版本是 v1.0.5,则创建 v1.0.6
git tag -a v1.0.6 -m "版本 1.0.6: 修复v1.0.3的严重bug"
# 7. 推送分支和标签
git push origin hotfix/v1.0.3-bugfix
git push origin v1.0.6
# 8. 合并到 master(确保后续版本包含修复)
git checkout master
git merge hotfix/v1.0.3-bugfix
git push origin master
# 9. 恢复之前的工作
git stash pop重要提示:
git tag | sort -V)# 1. 确保 master 代码最新
git checkout master
git pull origin master
# 2. 运行测试
# npm test
# 3. 创建 release 分支(可选)
git checkout -b release/v1.1.0
# 4. 更新版本号等准备工作
# ... 更新 version.json、CHANGELOG 等 ...
# 5. 提交准备工作的修改
git add .
git commit -m "chore: 准备发布 v1.1.0"
# 6. 合并到 master
git checkout master
git merge release/v1.1.0
# 7. 创建版本标签
git tag -a v1.1.0 -m "版本 1.1.0: 功能描述"
# 8. 推送代码和标签
git push origin master
git push origin v1.1.0
# 9. 删除 release 分支
git branch -d release/v1.1.0
git push origin --delete release/v1.1.0遵循 Conventional Commits 规范:
<类型>[可选的作用域]: <描述>
[可选的正文]
[可选的脚注]常用类型:
feat: 新功能fix: 修复 bugdocs: 文档变更style: 代码格式(不影响代码运行)refactor: 重构(既不是新功能也不是修复 bug)perf: 性能优化test: 测试相关chore: 构建过程或辅助工具的变动merge: 合并分支示例:
git commit -m "feat: 添加用户登录功能"
git commit -m "fix: 修复权限检查的bug"
git commit -m "docs: 更新API文档"
git commit -m "refactor: 重构权限验证逻辑"master 分支应该设置为受保护分支,不允许直接推送mastermaster 分支的代码应始终可部署master 和对应的 hotfix 分支解决方法:
# 切换到标签对应的代码
git checkout v1.0.3
# 查看标签信息
git show v1.0.3解决方法:
# 基于标签创建分支
git checkout -b <分支名> <标签名>
# 基于提交 hash 创建分支
git checkout -b <分支名> <提交hash>示例:
# 基于 v1.0.3 标签创建 hotfix 分支
git checkout -b hotfix/v1.0.3-bugfix v1.0.3推荐方法(使用 revert):
不会改写历史,推荐用于已推送到远程的提交:
git revert <提交hash>
git push origin master不推荐方法(使用 reset):
需要强制推送,会改写历史,不推荐用于共享分支:
git reset --hard <提交hash>
git push origin master --force # 危险操作!注意:使用 git reset --hard 会永久删除修改,使用前请确认。
查看标签之间的差异:
# 查看两个标签之间的差异
git diff v1.0.3 v1.0.4
# 查看某个文件的差异
git diff v1.0.3 v1.0.4 -- <文件路径>查看提交之间的差异:
# 查看两个提交之间的差异
git diff <提交hash1> <提交hash2>
# 查看提交范围之间的差异
git diff <起始hash>..<结束hash>预览将要删除的文件:
# 查看将要删除的文件(预览)
git clean -n删除未跟踪的文件:
# 删除未跟踪的文件
git clean -f
# 删除未跟踪的文件和目录
git clean -fd
# 交互式删除(推荐)
git clean -i注意:git clean 只会删除未跟踪的文件,不会影响已提交的文件。
查看文件提交历史:
# 查看文件提交历史(简洁版)
git log -- <文件路径>
# 查看文件的详细修改历史
git log -p -- <文件路径>
# 查看文件的修改统计
git log --stat -- <文件路径>
# 查看文件的修改记录(图形化)
git log --graph --oneline -- <文件路径>问题:合并分支时出现冲突。
解决步骤:
查看冲突文件:
git status打开冲突文件,找到冲突标记(<<<<<<<, =======, >>>>>>>)
手动解决冲突,保留需要的代码,删除冲突标记
标记为已解决:
git add <冲突文件>
git commit -m "resolve: 解决合并冲突"如果无法解决,可以取消合并:
git merge --abort问题:使用 git stash 保存的修改找不到了。
原因:
git stash drop 删除了git stash clear 清空了解决方法:
# 查看所有 stash 记录(包括已删除的,需要 Git 2.5+)
git fsck --unreachable | grep commit | cut -d\ -f3 | xargs git log --merges --no-walk --grep=WIP
# 查看 stash 列表
git stash list
# 恢复指定的 stash(如果还存在)
git stash apply stash@{0}建议:重要修改应该及时提交,不要过度依赖 stash。
修改最后一次提交信息:
git commit --amend -m "新的提交信息"修改已推送的提交信息(不推荐):
需要强制推送,会改写历史:
git commit --amend -m "新的提交信息"
git push origin master --force # 危险操作!注意:如果提交已经推送到远程并被其他人使用,不建议修改提交信息。
查看差异:
# 查看当前分支与远程分支的差异
git diff master origin/master
# 查看提交差异
git log master..origin/master
# 查看本地有但远程没有的提交
git log origin/master..master同步远程更新:
# 拉取远程更新
git fetch origin
# 合并远程更新
git merge origin/master
# 或使用 pull(fetch + merge)
git pull origin master本文档涵盖了 Git 的常用操作,建议根据项目实际情况调整工作流。