Как трудно удалить сиротский коммит в git? - PullRequest
26 голосов
/ 26 октября 2011

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

Это их команда?

Пока что я 'мы пробовали интерактивный ребаз, как многие предлагали, но он просто перемещает коммит, а не удаляет их.Я также пытался использовать reflog delete, но не могу понять, как передать в команду определенный Id коммитов.

Вот рабочее дерево:

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

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

Ответы [ 2 ]

36 голосов
/ 26 октября 2011

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

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

2 голосов
/ 27 октября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...