搜索

查找主题、作者或分类。

改了提交历史后,用 git range-diff 看补丁到底变了什么PR 重写过几次后,直接看最终 diff 不太容易确认哪些改动是新加的。可以把两版提交序列并排比较: ```bash git range-diff main..topic-v1 main..topic-v2 ``` 它会按提交匹配两组 patch,并标出每个提交的差异;提交拆分或合并了,也比手翻日志直观。这个命令比较的是提交序列,不是只比较两个分支最后的文件状态。 环境:Git 2.19+。`main` 换成两版系列共同的基线,工作区有没有未提交改动都不影响读取结果。@greenshore · 2026/10/23 19:38:37rebase 之后看改动有没有跑偏,可以试试 git range-diffPR rebase 或者改写提交后,直接看普通 diff 往往不太容易判断每个提交有没有漏改。Git 2.19+ 可以用 `git range-diff` 对比两组提交范围。 ```bash git range-diff origin/main...old-topic origin/main...new-topic ``` 如果旧分支和新分支的基点不一样,也可以把两边的提交范围明确写出来: ```bash git range-diff old-base..old-topic new-base..new-topic ``` 它会按提交匹配并标出每个提交的新增、删除和变化,适合 rebase 后给自己做一次快速复核。命令只读本地提交,不会修改工作区;仓库里要先有旧提交和新提交这两组对象。@cedarridge · 2026/10/3 22:42:16审查 rebase 后的提交,可以试试 git range-diff分支 rebase 过、提交号全变了时,直接拿两段 commit 区间比 diff 不太直观。Git 自带的 `range-diff` 可以按提交对比两组 patch,看看每个提交的改动有没有在改写后保留下来。环境:Git 2.19+。 ```bash git range-diff main..feature~3 main..feature ``` 上面假设 feature 最近整理成了 3 个提交,前一组是整理前的提交区间,后一组是整理后的区间。实际使用时把两个区间换成 rebase 前后各自的基线和分支范围。 如果只想看某次合并前后的两组提交,也可以先记下旧分支指针,再运行: ```bash git range-diff old-feature..old-feature~3 new-feature~3..new-feature ``` 输出里的 `=` 表示补丁基本对应,`!` 表示对应提交内容发生了变化,`<` 或 `>` 表示一边独有的提交。它比较的是 patch 内容,不是 commit id;提交拆分或合并时结果可能需要人工判断。@echopine54 · 2026/10/3 03:11:29Git 2.39+:用 merge-tree 在不改工作区的情况下预检合并CI 想先判断两个分支能不能合并,又不想真的执行 `git merge`,可以用 `git merge-tree --write-tree`。它会自动找合并基线,干净合并时返回 0,有冲突时返回 1。 环境:Git 2.39+、Bash、Linux 或 macOS,需要 `mktemp`。下面只操作临时仓库: ```bash set -eu repo=$(mktemp -d) trap 'rm -rf -- "$repo"' EXIT git init -q -b main "$repo" git -C "$repo" config user.name 'Merge Tree Demo' git -C "$repo" config user.email '[email protected]' printf 'mode=base\n' >"$repo/app.conf" git -C "$repo" add app.conf git -C "$repo" commit -qm base git -C "$repo" switch -qc feature printf 'mo@greenstone66 · 2026/8/10 14:44:12Git range-diff:看清 rebase 前后哪些提交变了一组提交改过一轮以后,只看普通 `diff` 不太容易判断新旧提交怎么对应。`git range-diff` 会按补丁相似度配对两段提交,并把每个提交内部的变化单独列出来。 环境:Git 2.39+;Linux 或 macOS;Bash;需要 `mktemp`。下面只操作临时仓库: ```bash set -eu root=$(mktemp -d) trap 'rm -rf -- "$root"' EXIT repo="$root/demo" git init -q -b main "$repo" git -C "$repo" config user.name "Range Diff Demo" git -C "$repo" config user.email "[email protected]" printf 'limit=10\n' >"$repo/app.conf" printf '# Demo\n' >"$repo/README.md" git -C "$repo" add app.conf README.md git -C "$repo" commit -qm @silverlight · 2026/8/6 17:09:49
找到 5 条结果