合并冲突现场救火
周五下午五点,前后端在 develop 分支上同时改了同一个文件。合并时爆出 20 个冲突,终端里红字一片。新同事不敢删别人的代码,老同事急着下班。打开本工具,在「场景化示例」里搜「冲突」,直接给出 3 种策略:保留当前分支、保留传入分支、手动编辑。对照示例里的 diff 标记说明,5 分钟理清哪些是新增、哪些是覆盖,不用再一行行 grep 去猜。
刚敲完`git merge`却弹出冲突,盯着<<<<<<<标记一行一行删?这个工具把高频冲突场景——从rebase中断到cherry-pick失败——拆成可复现的示例,每步给出对应的git命令与预期输出。命令解释覆盖--ours/--theirs等参数的实际效果,而非只贴man手册。页面纯前端渲染,不向任何服务器发送仓库内容,本地打开即可对照排查。
周五下午五点,前后端在 develop 分支上同时改了同一个文件。合并时爆出 20 个冲突,终端里红字一片。新同事不敢删别人的代码,老同事急着下班。打开本工具,在「场景化示例」里搜「冲突」,直接给出 3 种策略:保留当前分支、保留传入分支、手动编辑。对照示例里的 diff 标记说明,5 分钟理清哪些是新增、哪些是覆盖,不用再一行行 grep 去猜。
凌晨一点,运维在服务器上执行了 git reset --hard HEAD~3,把包含上周数据库迁移脚本的提交全丢了。第二天线上表结构对不上,DBA 催着要恢复。本工具「常用命令」区列出了 git reflog 的用法和找回丢失提交的完整步骤:先 git reflog 找到丢失的 commit hash,再 git cherry-pick 逐个恢复。对照示例里的 commit 哈希值格式,避免手抖打错前 7 位。
第一次给知名前端框架提 Pull Request,fork 后改了 3 个文件,但本地测试一直报错。看了官方文档的 CONTRIBUTING.md 还是理不清 rebase 和 merge 的顺序。本工具「场景化示例」里专门有一节「贡献代码流程」:从 fork、clone、创建 feature 分支、commit 规范,到 rebase 到最新上游、force push 到自己的 remote。每一步都有 git 命令原文和预期输出,照着敲完,PR 一次通过 C。I。检查。
项目早期 commit 里误提交了 .env 文件,里面包含数据库密码和 API key。虽然后来加了 .gitignore,但历史记录里依然能 git checkout 出来。安全审计要求彻底清除。本工具「高级操作」部分给出了 git filter-branch 和 git rebase -i 两种方案,并标注了各自的副作用:filter-branch 会重写所有提交的 SHA,需要团队同步 rebase。对照示例里的 --tree-filter 参数写法,避免漏掉子目录。
月底要写周报,老板要看每个人这 30 天改了多少行代码、提交了几次。手动 git log --since 记不住日期格式,用 --author 又拼不对名字里的下划线。本工具「常用命令」区列出了 git shortlog 的统计用法:git shortlog -sn --since='2024-01-01' --until='2024-01-31',直接按提交次数排序输出。对照示例里的日期格式 YYYY-MM-DD 和 --no-merges 参数,排除合并提交的干扰,5 秒生成团队贡献排名。
| 输入 | 输出 | 说明 |
|---|---|---|
| git log --oneline -5 | a1b2c3d fix: resolve login issue e4f5g6h feat: add user profile page i7j8k9l refactor: update API client m0n1o2p docs: update README q3r4s5t chore: bump version to 1.2.0 | 常规:最常用的查看最近提交摘要,验证命令格式和输出行数限制 |
| git status | On branch main Your branch is up to date with 'origin/main'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: src/index.js no changes added to commit (use "git add" and/or "git commit -a") | 常规:日常检查工作区状态,验证工具能正确显示修改文件和提示信息 |
| git diff HEAD~1 HEAD -- src/ | diff --git a/src/index.js b/src/index.js index 1234567..89abcde 100644 --- a/src/index.js +++ b/src/index.js @@ -10,7 +10,7 @@ function greet(name) { - return 'Hello, ' + name; + return `Hello, ${name}!`; } | 边界:指定文件路径和提交范围,验证 diff 输出是否包含文件头、索引和上下文行 |
| git branch -r --merged origin/main | origin/feature-login origin/hotfix-1.0.1 origin/release-1.1 | 边界:列出已合并到主分支的远程分支,验证 --merged 过滤逻辑正确,空结果时输出空行 |
| git stash list | stash@{0}: On main: WIP: refactor auth module stash@{1}: On develop: temp debug changes | 边界:无 stash 时输出空,有 stash 时显示索引和描述,验证格式一致性 |
| git reflog show --date=iso -3 | a1b2c3d HEAD@{2025-03-15 10:30:00 +0800}: commit: fix typo e4f5g6h HEAD@{2025-03-15 09:45:00 +0800}: checkout: moving from feature-x to main i7j8k9l HEAD@{2025-03-15 09:20:00 +0800}: commit (amend): update config | 易错:reflog 输出格式含日期和操作类型,用户常混淆与 git log 的区别,验证 --date=iso 参数是否生效 |
| git reset --soft HEAD~1 | (无输出,命令成功执行) # 执行后 git status 会显示: # Changes to be committed: # modified: src/index.js | 易错:reset 默认无输出,用户可能误以为失败;需结合 status 查看效果,验证 --soft 不改变工作区文件 |
| git push origin :old-branch | To https://github.com/user/repo.git - [deleted] old-branch | 易错:删除远程分支的语法(空冒号前无本地分支名),用户容易写成 git push origin --delete old-branch 的替代形式,验证删除确认信息 |
1.`git commit -m` 后直接回车,提交信息被截断
git commit -m "修复bug
优化性能"git commit -m "修复bug,优化性能"`-m` 参数只接受单行字符串,换行符会被 shell 解析为命令结束,导致提交信息不完整。多行提交应使用 `git commit` 打开编辑器。
2.`git push` 前没拉取远程更新,导致非快进式推送被拒
git push origin maingit pull --rebase origin main && git push origin main当远程分支有本地不存在的提交时,直接推送会被拒绝(non-fast-forward)。`--rebase` 将本地提交变基到远程最新提交之上,保持线性历史。
3.`git reset --hard` 误删未提交的修改
git reset --hard HEAD~1git stash && git reset --hard HEAD~1`--hard` 会丢弃工作区和暂存区的所有改动,且不可恢复。先用 `git stash` 暂存当前修改,重置后再 `git stash pop` 取回。
4.`git merge` 后冲突标记未清理就提交
git add . && git commit -m "合并分支"git diff --check && git add . && git commit冲突标记 `<<<<<<<`、`=======`、`>>>>>>>` 是 Git 自动插入的临时标记,不是有效代码。`git diff --check` 能检测残留标记。
5.`git clone` 时指定了错误的远程名称
git clone https://example.com/repo.git myrepogit clone https://example.com/repo.git && cd repo`git clone` 默认远程名为 `origin`,第二个参数是本地目录名,不是远程名。改名需用 `git remote rename`。
6.`git rm` 删除文件后忘记提交
git rm old.txtgit rm old.txt && git commit -m "删除 old.txt"`git rm` 只将删除操作加入暂存区,不自动提交。不提交则删除不会记录到历史中,`git checkout` 仍能恢复文件。
7.`git log --oneline` 参数顺序写反导致报错
git log -5 --onlinegit log --oneline -5`--online` 不是有效选项,正确选项是 `--oneline`。Git 选项严格区分大小写和拼写,错误拼写会被忽略或报错。
8.`git branch -d` 删除未合并分支导致失败
git branch -d feature-branchgit branch -D feature-branch`-d` 只删除已合并的分支,未合并分支需用 `-D` 强制删除。强制删除前应确认分支内容已备份或不再需要。
git log --oneline --graph --all --decorate
--oneline每条提交显示为一行简短摘要--graph以 ASCII 图形展示分支合并历史--all显示所有分支(含远程跟踪分支)--decorate在提交旁标注分支名、标签等引用在含 3 个分支(main、feature-a、feature-b)的仓库中执行该命令,输出类似: * 9a8b7c6 (HEAD -> main) 修复登录 bug | * 4f3e2d1 (feature-b) 新增导出功能 |/ * 1a2b3c4 初始提交 * 0f1e2d3 (feature-a) 重构用户模块 结果:以图形化方式清晰展示所有分支的提交顺序与合并关系,便于快速理解仓库拓扑。
本工具是纯前端实现(FE),所有命令说明、示例和备忘单内容都打包在页面静态资源中,首次加载后即可离线查看,无需联网请求后端。但浏览器缓存策略可能影响离线持久性,建议将页面添加到书签或 PWA 快捷方式,确保下次打开时仍可访问本地缓存版本。
命令大全中专门列出了「场景化示例」模块,其中包含 rebase 与 merge 的对比条目:merge 保留分支合并历史(产生一个 merge commit),适合团队协作保留完整时间线;rebase 将当前分支的提交“移植”到目标分支顶部,历史更线性但会改写提交哈希。每个示例都附有实际命令序列和预期结果,可直接复制使用。
本工具在「常见错误与恢复」部分收录了 git reflog 的用法。执行 git reset --hard 后,立即运行 git reflog 可查看 HEAD 的移动历史,找到 reset 前的 commit hash,再用 git reset --hard <hash> 恢复到之前状态。注意 reflog 默认保留 90 天,但若已执行 git gc 或仓库被清理,则无法恢复。
命令大全基于 Git 2.x 版本编写,覆盖了从 1.7 至今仍兼容的核心命令(如 add、commit、branch、checkout)。部分较新特性(如 git switch、git restore)在 1.7 中不可用,但工具在命令旁标注了引入版本号(例如 switch 需要 Git 2.23+),低版本用户可参考对应的 checkout 替代写法。
使用 git reset --soft HEAD~1。该命令将 HEAD 回退一个提交,保留暂存区(index)和工作区的所有修改,相当于撤销 commit 但文件改动还在,可以重新编辑后再次提交。本工具在「撤销与回退」分类下列出了 --soft、--mixed、--hard 三种 reset 模式的区别,并附有适用场景说明。
首次推送本地新建分支到远程时,Git 需要知道远程目标分支名。示例中通常假设已配置 upstream,但实际首次推送应使用:git push -u origin <branch-name>。其中 -u 参数同时设置 upstream,后续再 git push 即可省略参数。本工具在「首次推送」示例中已包含 -u 用法,可对照检查是否漏写了该参数。
本工具定位为日常高频命令速查,覆盖了 Pro Git 书中约 70% 的常用命令(commit、branch、merge、rebase、stash、log、diff、reset、revert 等),但未收录底层命令(如 git hash-object、git cat-file)和服务器管理命令(git receive-pack、git upload-pack)。适合日常开发快速查阅,不适合深入学习 Git 内部原理。
通常不是工具问题。常见原因:1)未安装 Git 或未添加到系统 PATH;2)命令中包含不可见字符(如从网页复制时带了弯引号或零宽空格),建议粘贴到纯文本编辑器(如记事本)检查后再执行;3)Windows 用户需注意换行符,PowerShell 和 CMD 对多行命令的处理不同。本工具示例均使用标准 ASCII 字符,可放心复制。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。