![](/img/trans.png)
[英]How to remove references to remote branches from my local git repository
[英]Remove detached branches from git repository
我玩了另一个名为tmp
的遥控器。 我添加了遥控器并推送了分支master
和new-branch
。 然后我删除了tmp
遥控器。
现在分支tmp/master
和tmp/new-branch
已分离。 我不再需要它们了。 我如何将它们连同它们的提交一起删除?
这是我的回购协议上的图表:
* a856b8c - (HEAD -> master, tag: abc, origin/master) Update
| * 8a142e4 - (tmp/master) Update
|/
| * 5d43564 - (tmp/new-branch) New commit
| * f9f33d9 - New commit
| * 9869631 - New commit
| * 03cdb15 - New commit
| * 7a24a77 - Test
|/
* 97b8dcd - Skip lines
所以我想从 repo 的历史记录中删除提交:8a142e4、5d43564 等等。
采用:
git remote remove tmp
(如果你愿意,你可以停在这里;rest 只是评论)。 如果因为tmp
消失而拒绝运行,请使用git remote add tmp https://any.url.here
然后git remote remove tmp
。
还不完全清楚你用“分离分支”这个词的意思。 但是,您确实有一个标签git-detached-head ,我剪掉了它,因为它与此特定设置无关。 这些不是“分离的 HEAD”案例。 相反,这些只是陈旧的名称。
这里重要的一件事是这些(大概)是远程跟踪名称,或者 Git 称它们为远程跟踪分支名称。 这意味着git branch -delete
不会解决问题,但git branch -r --delete
会(尽管正如SebDieBln 在评论中指出的那样,您还需要--force
)。
Git 中的remote只是一个名称,如origin
或在您的情况下为tmp
,我们使用它来让 Git 能够通过名称引用其他一些 Git 存储库,而不必输入一些冗长乏味的 URL反复。 但除了存储 URL 之外,遥控器的存在还提供了另一种能力:
名称存储 hash ID 的事实为我们和 Git 提供了一种查找提交 hash ID 的简单方法,这通常是我们查找提交的第一种方式:通过某个名称。 (第二种方法是找到一个提交——通常是通过一个名字——然后从那里向后工作到更早的提交,第三种方法是通过某种方式神奇地知道 hash ID,也许是因为我们之前在git log
中看到了它,这使用了第二种方法。)
但总的来说,我们无法一直访问其他Git 存储库中的名称。 我们必须运行git ls-remote
或一些类似的命令来找到 hash ID 和 go及其分支名称。 在古代(2005 年初),人们确实做过这种事情。 这很快就变得非常乏味,就像输入长 URL 一样,所以 Git 被教导不仅要通过这些遥控器保存 URL,还要保存它们的分支名称和 hash ID。 因此,如果您有一个名为origin
的远程服务器,而他们,无论他们在origin
的谁,都有一个名为xyzzy
的分支,您最终会在您的存储库中得到一个origin/xyzzy
。
这些远程跟踪名称本质上用作 Git 存储库记住其他 Git 存储库中的分支名称的一种方式。 这就是他们存在的理由。 git fetch
命令构建这些远程跟踪名称,创建它们并在有机会时更新它们。 ( git push
命令也会在成功推送时更新名称。请注意, git pull
意味着运行git fetch
,然后运行第二个 Git 命令,它是更新远程跟踪名称的 pull 的 fetch 步骤。)
git remote
命令通常是面向用户的命令,用于操作像origin
或(这里) tmp
这样的遥控器。 git remote add
添加一个新的遥控器。 git remote remove
删除远程,并且由于远程跟踪名称代表远程存在,因此它也会删除远程跟踪名称。 1个
最后的:
所以我想从 repo 的历史记录中删除提交:8a142e4、5d43564 等等。
删除 Git 找到那些 hash ID 的名称将阻止提交显示在git log
中,但实际上不会删除提交。 如果您记住他们的 hash ID 并将它们提供给 Git,您很可能仍然可以通过他们的 hash ID 访问这些提交至少 30 天,也许 90 天或更长时间。
通常,删除名称就足够了,这样您就不会再看到提交了。 如果不是,好吧,真正删除提交实际上相当困难——不是不可能,但不容易,而且这些方法并不真正属于这个答案,所以我会在这里停下来。
1依稀记得在某个很早的Git版本中, git remote remove
并没有删除对应的remote-tracking names。 但是,这些版本的 Git 现在应该不再使用了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.