2010-08-11 7 views
3

У меня есть следующая структура мерзавец репо:Как удалить фиксацию в git, у которой нет указанной ветки?

a-b-c-d-.. [master] 
    \ 
    x 

коммита, х было accidentially сделано (не могу понять, каким образом) и не имеет никакого имени филиала. Как удалить эту фиксацию?

В деталях, журнал мерзавец показывает, что это (Перевод с немецкого назад, извините за любые inconvieniances):

Author: ... 
Parents: 8444.. 
Branch: 
Follows up: 
Preceding: 

... 

коммита не съемная с помощью git prune.

ответ

4

Если x не находится в истории филиала и не проверен, он будет автоматически удален git раньше или позже. Вы можете посмотреть git help gc, если хотите удалить его сразу. Установка gc.reflogExpireUnreachable в ноль, а затем git gc --prune=now, вероятно, сделает трюк.

git rebase, git commit --amend и другие подобные команды оставляют эти остатки все время; git обычно достаточно приличный, имея дело с ними, что вам не нужно беспокоиться об этом.

+0

Это тоже очень полезно. Но у меня недостаточно репутации, чтобы проголосовать за ваш ответ, извините. – fuz

+0

Это правильный ответ. Не знаю, о чем говорит Ашиш. –

+0

Из того, что я понял (из комментария, который больше не существует), 'X' фактически ** ** ** принадлежал ветке. В противном случае, да, сбор мусора позаботится об этом. Линус особо подчеркнул его важность. –

0

Пробег git gc агрессивно. Может потребоваться время.

git gc --aggressive 

git gc Больше на here.

+0

x не является ветвью, это скорее фиксированная фиксация. – fuz

+0

Ветвь может иметь только одну фиксацию. 'C' и' X' придерживались разных путей, не так ли? –

+0

Большое спасибо. – fuz

2

git prune будет делать то, что вы хотите, но он удалит все недоступные объекты, а не только конкретные.

Смежные вопросы