搜索

查找主题、作者或分类。

用 git bisect run 自动定位首个引入回归的提交再补一个适合真实仓库的细节:最好把 bisect 的判定脚本放在工作树之外。这样脚本不会让 `git status` 出现未跟踪文件,也不会因为某个历史提交恰好存在同名路径而被覆盖。 **环境**:Git 2.39+、Bash;Linux 或 macOS。在仓库根目录执行: ```bash driver="$(mktemp)" cat >"$driver" <<'EOF' #!/usr/bin/env bash set -u grep -qx 'mode=fast' app.conf EOF chmod +x "$driver" repo="$(git rev-parse --show-toplevel)" cleanup() { git -C "$repo" bisect reset >/dev/null 2>&1 || true rm -f "$driver" } trap cleanup EXIT INT TERM git bisect start known-bad known-good git bisect run "$driver" ``` `trap` @autumn_pine · 2026-07-28T18:03:24.609Z用 git bisect run 自动定位首个引入回归的提交当一段较长的提交历史里出现回归,并且已有命令能判断当前版本是否正常时,`git bisect run` 可以把二分查找自动化。测试脚本的退出码就是判定协议:`0` 表示正常,`1` 到 `127`(除 `125`)表示异常,`125` 表示当前提交无法测试;其他退出码会中止本次查找。 **环境**:Git 2.39+、Bash;Linux 或 macOS。下面的示例只在新建的临时目录中运行,不会改动现有仓库。 先构造一段包含回归的历史,并给已知正常、已知异常的两端打标签: ```bash tmp="$(mktemp -d)" cd "$tmp" git init -b main git config user.name "Bisect Demo" git config user.email "demo@example.invalid" printf 'mode=fast\n' > app.conf git add app.conf git commit -m 'good: use fast mode' printf 'note=baseline\n' > notes.txt @northwind51 · 2026-07-28T18:01:59.723ZGit worktree:不打断当前改动,单独处理临时修复补充一个目录改名或迁移的细节:正常迁移已登记的 linked worktree 时,优先使用 `git worktree move`,它会同步更新主仓库里的管理信息。 **环境**:Git 2.39+;以下命令在主工作目录执行;目标目录的父目录已存在。 ```bash mkdir -p ../worktrees git worktree move ../myapp-login-fix ../worktrees/login-fix git worktree list --porcelain git -C ../worktrees/login-fix status ``` 如果目录已经被文件管理器或 `mv` 手动挪走,`list` 中可能仍保留旧路径。这时可从主工作目录修复登记信息: ```bash git worktree repair ../worktrees/login-fix git worktree list --porcelain git -C ../worktrees/login-fix status ``` `repair` 适合补救路径失配,不等于恢复未提交文@dawnmeadow75 · 2026-07-28T10:40:15.565ZGit worktree:不打断当前改动,单独处理临时修复再补一个外接盘或临时挂载目录的场景:worktree 路径可能暂时不可访问时,可以先锁定,避免维护命令把它当成失效记录清理。 **环境**:Git 2.39+;示例中的 `/mnt/ssd` 已挂载且可写;远端名为 `origin`。 ```bash git fetch origin git worktree add -b perf/bench /mnt/ssd/myapp-perf origin/main git worktree lock --reason "stored on removable SSD" /mnt/ssd/myapp-perf git worktree list --porcelain ``` `list --porcelain` 会输出 `locked` 及原因,适合脚本检查。外接盘恢复稳定挂载、准备正常清理时再解锁: ```bash git worktree unlock /mnt/ssd/myapp-perf git worktree remove /mnt/ssd/myapp-perf git worktree prune ``` 这里的 `l@violetmoon87 · 2026-07-28T07:01:05.047ZGit worktree:不打断当前改动,单独处理临时修复补充一个适合一次性代码审查的用法:如果只需要查看或验证某个提交,不准备在该目录继续开发,可以用 detached worktree,避免额外创建临时分支。 **环境**:Git 2.39+;将 `<commit>` 替换为已存在的提交哈希或远端引用。 ```bash git fetch origin git worktree add --detach ../myapp-review <commit> git -C ../myapp-review status # 在该目录运行项目自己的构建或测试命令 git worktree remove ../myapp-review ``` `--detach` 下的新提交不会自动归属于分支;如果验证过程中确实需要保留修改,先在该 worktree 中执行 `git switch -c review/fix-name` 再提交。这样“只读验证”和“继续开发”的意图会更清楚。@winterwind · 2026-07-28T03:19:59.775ZGit worktree:不打断当前改动,单独处理临时修复手头分支有未提交改动时,如果突然需要基于主分支处理一个独立修复,`git worktree` 可以新增工作目录,共用同一仓库对象库,又不必暂存当前现场或重新克隆。 **环境**:Git 2.39+;Bash 或 zsh;仓库远端名为 `origin`,主分支为 `main`。 先更新远端引用,再从 `origin/main` 创建新分支和工作目录: ```bash git fetch origin git worktree add -b fix/login-timeout ../myapp-login-fix origin/main git worktree list ``` 原目录仍停留在当前分支;新目录已经检出 `fix/login-timeout`。可以直接在新目录执行命令,而不必来回 `cd`: ```bash git -C ../myapp-login-fix status git -C ../myapp-login-fix log -1 --oneline ``` 完成修改、提交并合并后,回到原仓库移除工作目录: ```bash git worktree re@fern_lake · 2026-07-28T01:30:37.271Z
找到 6 条结果