Jak usunąć referencję git `refs / original / refs / heads / master`?

35

Co to jest w żółtym okrągłym pudełku?

zrzut ekranu

Próbowałem git branch -D, git tag -dale nie udało się. Jak to usunąć?

Xiè Jìléi
źródło
1
Proszę rozważyć zmianę zaakceptowanej odpowiedzi na odpowiedź Alexey Ten, która jest wysoko oceniona i poprawna ( git update-ref -d).
Jonathon Reinhart

Odpowiedzi:

11

Wygląda jak znacznik, więc następujące polecenie powinno działać:

git tag -d refs/original/refs/heads/master

Ale ponieważ powiedziałeś, że tak nie jest, możesz po prostu usunąć plik z .gitkatalogu. Z katalogu głównego repozytorium takie polecenie otrzyma:

rm .git/refs/tags/refs/original/refs/heads/master

Ścieżka może być nieco inna, jeśli git-tagpolecenie się nie powiedzie, więc możesz chcieć cd .git/refsi znaleźć obrażającą głowę metodą prób i błędów. Usunięcie pliku spowoduje usunięcie odwołania z lokalnego repozytorium.

Stephen Jennings
źródło
2
To nie jest tag, jednak znalazłem go jako .git/refs/original/refs/heads/master.
Xiè Jìléi
1
Użyj git update-refzamiast ręcznie modyfikować wewnętrzne elementy Gita. Zobacz odpowiedź Alexeya.
wchargin
100

To polecenie powinno działać

git update-ref -d refs/original/refs/heads/master
Alexey Ten
źródło
To zadziałało dla mnie z tym samym problemem. Zauważ, że referencja została zapisana w pliku o nazwie .git /pack-refs. Jeśli to otworzysz, zobaczysz wiersz z SHA i ciąg „refs / original / refs / heads / master”. Prawdopodobnie możesz usunąć tę linię, ale użyłbym tego polecenia, aby być bezpiecznym.
Matt N
14
+1: Należy zawsze używać git update-ref -dzamiast tylko rming ref - złe rzeczy mogą się zdarzyć inaczej.
Callum Rogers
3
To powinna być zaakceptowana odpowiedź
Daniel Alder
1
@CallumRogers dlaczego?
wahnfrieden,
6
@wahnfrieden, ponieważ git mógłby użyć spakowanych referencji i nie będzie odpowiedniego pliku w refskatalogu
Alexey Ten
17

To jest ref. Zwykle tworzony przez git filter-branch- jest wskaźnikiem do miejsca, w którym znajdowała się twoja gałąź przed uruchomieniem git filter-branch.

Aby usunąć dowolne odwołanie, zawsze możesz wcisnąć do niego nic w lokalnym repozytorium:

git push . :refs/original/refs/heads/master

Pozostałe odpowiedzi obejmowały również całkiem inne sposoby usuwania.

chutz
źródło
1
„Naciśnięcie niczego”, aby usunąć odwołanie lokalnie, jest bardzo sprytne.
40XUserNotFound
Zrobił mi dzień. Miałem odniesienie do zdalnego tagu, że pilot już nie istnieje. To jedyne polecenie, które zadziałało.
RW4