Новые коммиты не по голове - PullRequest
3 голосов
/ 07 января 2010

Короче говоря *, я сделал некоторые вещи с моим git-репозиторием, которые я не знаю, как это сделать, и закончил тем, что оторвал мою голову, то есть, когда я фиксирую master, не актуально

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

Когда я запускаю git branch, он говорит мне, что я сейчас не на ветке

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

Ответы [ 4 ]

5 голосов
/ 07 января 2010

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

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

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

git checkout master
git merge HEAD@{1}

HEAD@{1} здесь относится к предыдущему коммиту, который вы извлекли; HEAD@{0} совпадает с HEAD, текущим коммитом, с которым вы работаете. Если вы хотите увидеть все предыдущие коммиты, на которые указывал HEAD (срок действия которых еще не истек), вы можете сделать:

git reflog

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

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

2 голосов
/ 07 января 2010

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

1 голос
/ 07 января 2010

Мне нравится ответ Брайана Кэмпбелла. Что касается удаления коммитов, то git reset --hard rev должен быть тем, что вы искали. http://git -scm.com / документы / ГИТ-сброс

0 голосов
/ 07 января 2010

Может быть, вам стоит вернуться в ветку, над которой вы работали. Если бы это был мастер, это было бы

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