2010-01-07 3 views
3

Короче говоря, я сделал кое-что с моим хранилищем git, что я не знаю, как это сделать, и закончил тем, что отсоединил мою голову, то есть, когда я совершу master isn ' t актуально.Новые коммиты не на голове

Как это исправить? Должен ли я сливаться? (Если да, то каковы точные команды, которые я хочу работать?)

Когда я бегу GIT ветку, он говорит мне, что я в данный момент нет филиала

$ git branch 
* (no branch) 
    master 
  • Longer история, что я пытался отменить некоторые коммиты и не имел представления о том, как я должен был это делать. Думаю, это было не слишком долго.

ответ

2

Есть несколько способов, вы можете в конечном итоге на (не филиала), но по сути его барахла ветвь используется для изучения вещей, например, старые коммиты. Если вы ошибочно отредактировали файлы (нет ветви), вы можете переключиться обратно на мастер так же, как и в любой другой ветке с изменениями. Проверьте помощь для git-checkout, но вы захотите сделать что-то вроде git-checkout -m, чтобы вернуться к мастеру и объединить свой текущий индекс вместе с ним.

+0

. Я не думаю, что вы сможете совершать транзакции (без ветки), но если вы это сделали, и вам не нужно беспокоиться о незапланированных изменениях, вы должны просто нажать вернуться к мастеру и либо перемотка вперед, либо слияние. –

+0

@Rob Вы можете совершать, когда у вас нет ветки; нет ничего, что помешало бы вам сделать это. Вы не можете нажать на ветку, которая не может быть переадресована, и 'git checkout -m' не будет объединять те коммиты, которые вы сделали, когда вы не были в ветке; он только объединяет изменения, которые находятся в вашей рабочей копии или индексе. Если вы будете следовать этим инструкциям, вы можете потерять те коммиты, которые вы сделали (хотя они все равно будут в рефлоге). –

+0

@Brian Вы правы. Сначала я предполагал, что у него только что был индекс, и он хотел вернуться к мастеру. После выяснения ситуации мне нравится ваш ответ намного лучше. Поверните (без ветви) в именованную ветвь, а затем слейте как обычно. –

0

Возможно, вам стоит просто вернуться в филиал, над которым вы работали. Если бы это был мастер, было бы

$ git checkout master 
+0

А как насчет совершений, которые я сделал с тех пор?Я не сразу понял –

5

Самый простой (безопасный) способ будет создать временную ветвь, указывающую на ваш HEAD, мастер оформления заказа, объединить временную ветвь, а затем удалить его:

git branch temp 
git checkout master 
git merge temp 
git branch -d temp 

Можно также избежать использования временной ветви, и просто использовать reflog, чтобы получить коммиты не отрасли:

git checkout master 
git merge [email protected]{1} 

[email protected]{1} здесь относится к предыдущей фиксации, что вы проверили; [email protected]{0} - это то же самое, что и HEAD, текущая фиксация, из которой вы работаете. Если вы хотите, чтобы увидеть все предыдущие совершает что HEAD указал на (что еще не истекло), вы можете сделать:

git reflog 

Вы сказали, что это произошло потому, что вы пытались отменить фиксации. Как указывает mletterle, вы можете сделать это с помощью git reset. git reset --hard rev установит ветку, на которой вы находитесь, HEAD, ваш индекс и вашу рабочую копию для конкретной версии. Обратите внимание, что это сдует незафиксированные изменения, так что сделайте это, только если вы действительно знаете, что делаете. Более безопасным было бы, как правило, делать git reset rev, что не влияет на вашу рабочую копию, а затем выборочно возвращать отдельные файлы в вашей рабочей копии с git checkout, чтобы гарантировать, что вы случайно не уничтожили какую-то работу, которую вы делали.

Кроме того, git reset обычно должен использоваться только для непроверенных целей. Если вы пытаетесь отменить то, что уже было нажато, а другие люди уже слиты, вы обычно хотите git revert.

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