我试图修改一个仓库(尚未共享,因此不必担心破坏其他人的历史记录),但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
“Hello?Hello?”的输出来自脚本,因此我知道脚本正在运行。
令人沮丧的是,在命令完成后,工作目录变得不干净:
$ 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操作期间无法看到它们。
我做错了什么?
(顺便说一句,我之前运行过很多次git filter-branch。我对它有一定的了解,但这个问题让我感到困惑。)
fixup.sh
脚本中的内容,但我怀疑存在某种工作目录问题。树过滤器在一个不同于正常git工作目录的目录中运行;它应该对那个临时目录进行更改。(这是通过git filter-branch
的-d <dir>
参数实现的。) - torekfixup.sh
脚本中的硬编码路径引用,目前它可以正常工作了。谢谢! - escouten