2009-09-01 3 views
2

Конец не обязательно в ветке, так как вы видите и управляете этими коммитами? Кроме того, можно ли взглянуть на эти коммиты из gitk?В Git, как вы видите и управляете фиксациями, которые не находятся в ветке?

Большое спасибо!

PS: просто чтобы сделать вещи понятнее, вот пример:

git init 
git commit 
touch toto 
git add toto 
git commit -a 
echo $RANDOM > toto 
git commit -a 
git checkout f798e54 #checkout initial commit 
echo $RANDOM > toto 
git commit -a #"untracked commit" 
gitk --all 
git branch 
git log 
git checkout master #back on the main branch 
gitk --all #untracked commit is lost? 
git log 
git branch 

Как я могу получить «неотслеживаемые совершить» обратно?

ответ

8

Эта ситуация называется detached HEAD. Обычно инструменты (например, gitk) не будут показывать вам коммиты, недоступные по имени символической ветви.

Чтобы вернуть свою фиксацию, вы можете использовать git reflog, чтобы отобразить журнал всех последних действий, в том числе ваш отдельный HEAD. Когда вы его найдете, вы можете использовать его идентификатор фиксации с git checkout, чтобы вернуться к нему. Если вы обнаружите, что это ценно, вы можете указать название ветки в этот момент.

+0

Большое спасибо за подробный ответ! Я обнаружил всю область git, о которой я не знал :) спасибо также «хакеру» за упоминание git fsck. –

+0

Вам не нужно фиксировать идентификатор, чтобы вернуться на ветку: 'git checkout -b newbranch' будет достаточно. –

+0

Предложение Якуба работает, если вы понимаете, что находитесь на неназванной ветке _right now_. Трюк reflog полезен, когда вы поймете через десять минут после перехода в именованную ветку. – tialaramex

2

git reflog покажет вам символическое имя, например [email protected]{0}, которое вы можете использовать для доступа к этому недостижимому делу. Затем вы можете использовать gitk --all [email protected]{0}, чтобы узнать, где он находится в вашем репозитории.

3

Возможно, вы говорите о git fsck --unreachable?