
如何撤销还未推送的合并(merge)
撤销未推送的 merge:git reset --hard ORIG_HEAD(ORIG_HEAD 自动记录合并前的位置);或 git log 找到合并前提交再 git reset --hard <哈希>。冲突进行中想退出用 git merge --abort。
聚焦概念、架构、排障、价格与选型,一篇解决一个明确问题。

撤销未推送的 merge:git reset --hard ORIG_HEAD(ORIG_HEAD 自动记录合并前的位置);或 git log 找到合并前提交再 git reset --hard <哈希>。冲突进行中想退出用 git merge --abort。

同步 fork 仓库:git remote add upstream <原仓库地址> 一次配置,之后 git fetch upstream && git merge upstream/main(或 rebase)再 push 到自己 fork。GitHub 网页也有 Sync fork 按钮一键同步。

批量改提交作者/邮箱:推荐 git filter-repo --email-callback / --name-callback 重写全历史;老工具 git filter-branch --env-filter 可按旧邮箱条件替换。重写后需强推,协作者需重新克隆。

SVN 迁移 Git 用 git svn clone:准备作者映射文件(users.txt),git svn clone --stdlayout --authors-file 完整转换历史、分支、标签,再清理引用推到 Git 远程。大仓库建议通宵跑。

列出两提交间变化的文件名:git diff --name-only A B;带状态(增删改)用 --name-status;只要统计用 --stat。分支间同样适用:git diff --name-only main..feature。

设置跟踪关系:git branch --set-upstream-to=origin/<远程分支> <本地分支>;推送时顺便设置用 git push -u origin <分支>。设好后 git status 显示领先/落后,git pull/push 免参数。

白名单式 gitignore:先 忽略全部,再用 ! 逐个取反要保留的文件。注意目录要先用 !dir/ 放行才能保留其中文件;每行规则顺序敏感,后写的覆盖先写的。

分叉说明两边都有对方没有的提交。查看分叉情况 git log --left-right --oneline main...origin/main;合并用 git pull(merge)或 git pull --rebase;确定远程为准则 git reset --hard origin/main。

hotfix 合入功能分支:git checkout 功能分支 && git merge hotfix 分支名(或 rebase)。功能分支拿到修复后继续开发,最终合并回 main 时 hotfix 已是共同祖先,不再冲突。

该提示说明上一次合并未完成(冲突未解决完或没提交)。git status 查看冲突文件,解决后 git add + git commit 完成合并;不想合了用 git merge --abort 中止。

命令行画分支图:git log --graph --oneline --all --decorate 是最常用的组合,可配置 git lg 别名。GUI 工具:GitKraken、Sourcetree、VS Code GitLens/Git Graph 插件效果更好。

这个警告要求你明确 pull 的合并策略。消除方法三选一:git config --global pull.rebase false(merge)、true(rebase)或 pull.ff only(仅快进)。团队新手建议 ff only,个人项目随意。