gpt4 book ai didi

git - 为什么 git filter-branch tree-filter 无法重写提交但随后将工作目录弄脏?

转载 作者:太空狗 更新时间:2023-10-29 14:00:29 27 4
gpt4 key购买 nike

我正在尝试修改一个存储库(尚未共享,所以不用担心破坏其他人的历史)并且 git filter-branch 的行为相当奇怪.

$ git filter-branch -f --tree-filter /path/to/fixup.sh cross-check
Rewrite ae78489a98f2a9429c559833d8320d5f50a99903 (1/1)Hello? Hello?
Goodbye

WARNING: Ref 'refs/heads/cross-check' is unchanged

“喂?喂?”输出来自脚本,所以我知道脚本正在运行。

令人沮丧的是,命令完成后,工作目录变脏了:

$ git status
On branch cross-check
Your branch is up-to-date with 'origin/cross-check'.

Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified: .gitattributes
modified: tools/lua/lib/lfs.so.1.2.1
modified: tools/lua/lib/luadoc/config.lua
modified: tools/lua/lib/luadoc/doclet/debug.lua
modified: tools/lua/lib/luadoc/doclet/formatter.lua
modified: tools/lua/lib/luadoc/doclet/html.lua
modified: tools/lua/lib/luadoc/doclet/raw.lua
modified: tools/lua/lib/luadoc/init.lua
modified: tools/lua/lib/luadoc/lp.lua
modified: tools/lua/lib/luadoc/taglet/standard.lua
modified: tools/lua/lib/luadoc/taglet/standard/tags.lua

那些正是我在修改后的提交中想要的更改,但出于某种原因,git 在 git filter-branch 操作期间无法看到它们。

我在这里做错了什么?

(FWIW 我以前运行过 git filter-branch 很多很多次。一般来说我很熟悉它,但是这个让我难住了。)

最佳答案

(将评论转化为答案)

树过滤器在不是存储库正常工作目录的目录中运行。 (实际目录源自 -dgit filter-branch 的参数,如果你提供一个;如果你不提供一个,filter-branch 以.git-rewrite。为此,filter-branch 脚本似乎添加了 /t:

orig_dir=$(pwd)
mkdir -p "$tempdir/t" &&
tempdir="$(cd "$tempdir"; pwd)" &&
cd "$tempdir/t" &&
workdir="$(pwd)" ||
die ""

然后将 $tempdir 中的文件用于其他所有内容。)

因此,如果 fixup.sh 中的任何路径引用回原始工作目录,git 将不会在临时树中看到这些更改。

关于git - 为什么 git filter-branch tree-filter 无法重写提交但随后将工作目录弄脏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23530698/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com