Анонимная ветка после выполнения git reset - PullRequest
6 голосов
/ 05 марта 2010

Справочная информация: Тревор работал над тестовым проектом исключительно с целью опробовать git.Это локальный репозиторий для одного человека, который не был предоставлен в общий доступ, поэтому Тревор сделал жесткий сброс, чтобы стереть некоторые нежелательные коммиты:

    :git reset --hard 6aa32cfecf4
    HEAD is now at 6aa32cf auto commit Sun Feb 28 16:00:10 -0800 2010

Затем Тревор с радостью добавил новые коммиты в проект.Затем, когда Тревор посмотрел на графическое представление истории коммитов, Тревор обнаружил, что существует анонимная ветвь уничтоженных коммитов.Он не отображается как ветвь с использованием git branch, но он отображается в графическом интерфейсе.

Вопросы 1: Как Тревор может избавиться от этой "анонимной ветви" ...и на что действительно смотрит Тревор?Какие указания помогут Тревору понять, что произошло, когда Тревор сделал полный сброс, чтобы Тревор мог лучше определить ожидания Тревора.

Вопросы 2: Предполагая, что Тревор поделился проект с другими людьми.Что может быть альтернативой, чтобы сделать то же самое (или подобное), не делая полный сброс?

Ответы [ 2 ]

4 голосов
/ 05 марта 2010

Как упомянуто в Иллюстрированное руководство по восстановлению потерянных коммитов с помощью Git , вы можете восстановить «потерянные» коммиты (как в «больше не ссылаются веткой или тегом»).
Вот почему они все еще отображаются в gitk.
Например, a:

$ git fsck −−lost-found

также отображает их.

Чтобы убрать это (если вы имеете ничего , чтобы вернуться от любых других операций удаления)

 $ git gc --aggressive
 $ git prune

См. Также git gc: очистка после себя .


Если бы эта ветвь была разделена, возможной альтернативой был бы git revert, чтобы новый коммит отменил n предыдущих.

3 голосов
/ 05 марта 2010

Вы можете создать новую ветку с помощью коммита.

Если ваш последний коммит в вашей анонимной ветке 123e43, вы можете сделать:

git checkout -b my_branch 123e43e

Теперь ваша ветвь не является анонимной. Вы можете объединить или перебазировать его в своей основной ветке

...