gpt4 book ai didi

git - 如何删除过滤器分支后的旧提交?

转载 作者:太空狗 更新时间:2023-10-29 13:30:21 24 4
gpt4 key购买 nike

我使用 filter-branch 来 fix an incorrect email address在我的存储库中,但所有分支现在都是 MIA(master 除外)。

这是 git graphfilter-branch 之前显示的内容:

*   d93c7ee (HEAD, master) Merge branch 'f1'
|\
| * 08e7463 (f1) adding b
|/
* 7c7bd91 adding a

我发出了这个过滤器分支命令:

git filter-branch --env-filter 'export GIT_AUTHOR_EMAIL="fixed-email";
GIT_AUTHOR_NAME="fixed-author"'

得到这个:

*   770262a (HEAD, master) Merge branch 'f1'
|\
| * 0f58ab5 adding b
|/
* fb012a9 adding a
* d93c7ee (refs/original/refs/heads/master) Merge branch 'f1'
|\
| * 08e7463 (f1) adding b
|/
* 7c7bd91 adding a

一些困扰我的事情:

1) f1 分支没有移动到 0f58ab5。
2) fb012a9 之前的所有提交似乎与我无关,我可以摆脱它们吗?

我在另一个问题中看到有人建议:

rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --aggressive --prune=now

但这并没有太大帮助,这是我后来得到的:

*   770262a (HEAD, master) Merge branch 'f1'
|\
| * 0f58ab5 adding b
|/
* fb012a9 adding a
* 08e7463 (f1) adding b
* 7c7bd91 adding a

编辑:按照 VonC 的建议生成此图:

*   211632d (HEAD, master) Merge branch 'f1'
|\
| * bda7577 (f1) adding b
|/
* 70c7b34 adding a
* 3182b33 (refs/original/refs/heads/master) Merge branch 'f1'
|\
| * 8b81c21 (refs/original/refs/heads/f1) adding b
|/
* 4c07dc9 adding a

哪个解决了问题 #1,现在我只需要找到一种方法来摆脱旧的提交,我该怎么做?

最佳答案

你能再试一次你的 git filter-branch,最后加上 '-- --all' 吗,比如:

git filter-branch --env-filter 'export GIT_AUTHOR_EMAIL="fixed-email";
GIT_AUTHOR_NAME="fixed-author"' -- --all

注意:

  • 将过滤器分支选项与修订选项分开的 --
  • --all重写所有分支和标签

就是说,在您当前的情况下,没有多少 git gc ... prune ... 会删除仍然被分支标记引用的提交,例如 f1 仍然指向 08e7463
所以你看到的是正常的,设计使然。


OP 报告说,一旦执行了 git filter-branch ... -- --allrm -r .git/refs/original 就会处理旧提交。

同样,这并不奇怪:不再有标签或分支引用它们,这意味着这一次,它们是从 Git 存储库中永久删除的候选对象。

关于git - 如何删除过滤器分支后的旧提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3223053/

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