Подтвердить что ты не робот

Как жестко удалить сиротскую фиксацию в git?

У меня есть локальная фиксация, которая не находится в какой-либо ветке, которую я бы хотел удалить. Я не хочу их переустанавливать, я действительно хочу удалить их и потерять весь контент, связанный с этим фиксацией.

Это их команда для этого?

До сих пор я пробовал интерактивную переустановку, как многие предлагали, но она просто перемещает фиксацию, она не удаляет их. Я также пытался использовать reflog delete, но я не могу понять, как передать конкретный идентификатор commit в команду.

Здесь рабочее дерево:

o [master] Commit #6  
|  
o Commit #5  
|  
| o Commit #4  
|/  
o Commit #3  
|  
o Commit #2  
|  
o Commit #1  

Я хочу физически удалить commit # 4.

4b9b3361

Ответ 1

Если на комманде нет ссылки, она будет удалена с помощью git сбор мусора во времени.

Если вы хотите принудительно выполнить его перед рукой, используйте git gc --prune=now --aggressive

Ответ 2

Чтобы удалить фиксацию, вам просто нужно убедиться, что она больше не является частью какой-либо ветки. То есть для каждой ветки в вашем репозитории убедитесь, что плохая фиксация не является частью цепочки цепочек от дочернего до родителя, определяющей эту ветку. Если вы найдете такую ​​ветвь, либо удалите ее, либо измените ее историю, чтобы она больше не включала плохую фиксацию.

Как только это правда, плохая фиксация будет в конечном итоге собрана в мусор.