Подтвердить что ты не робот

Как мне "переместить" мои коммиты из "без ветки" в реальную ветку?

Я допустил ошибку и начал совершать коммиты "с последним тегом", который закладывает мои фиксации в "никакой ветке". Они должны были применяться во главе уже существующего ветки. Я еще не внес изменений. Я нашел еще несколько вопросов, когда коммиты находятся в неправильной ветке, но теперь у меня нет ветки, поэтому я не знаю, как с этим справиться.

Предпочтительно, я хотел бы полностью удалить мою ошибку и "переместить" мои изменения в конец правой ветки. Если я должен оставить свою ошибку в истории, мне нужно объединить их по крайней мере.

4b9b3361

Ответ 1

В настоящее время вы находитесь в состоянии отсоединенного HEAD. Чтобы решить эту проблему, все, что вам нужно сделать, это создать новую ветвь с git branch <branchname> или git checkout -b <branchname>. Это оставит вас с локальным филиалом, с которым вы можете играть, и даже удалите его, когда закончите.

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

Ваша "ошибка" не должна быть стерта, вы просто создали новые коммиты поверх предыдущих. Вы не изменяли историю или что-то в этом роде.

EDIT: в ответ на ваш комментарий вам нужно сделать следующее:

git branch temp
git checkout master # or any other branch
git merge temp
git branch -d temp

Ответ 2

Вы можете просмотреть все свои транзакции, используя git reflog

Итак, вы можете просто попасть в другую ветку и сделать git cherry-pick <commit-hash> для требуемых коммитов.

Но я бы предпочел использовать ветку как spatz.

Ответ 3

Примечание. У вас также есть

enter image description here

В обоих случаях выполнение ветвления tmp и объединение ее обратно в фактическую ветвь - это решение.

Ответ 4

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

$ git checkout master
$ git merge d2bdb98

Если вы не знаете, какой коммит вы используете, вы можете найти его с помощью git log. Я не знаю, отличается ли это решение от "сбора вишни", но оно дало ожидаемые результаты для меня.

Ответ 5

У меня была ситуация, когда у меня была ветвь master, которую я хотел зафиксировать, но случайно привязан к отключенному HEAD (примечание, хеш фиксации здесь не важен, а просто для иллюстрации ситуации):

$ git branch
* (detached from 29d2cfb)
  master

Вот мое быстрое решение:

$ git branch -f master HEAD
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

Кусок торта.

Обратите внимание, что этот трюк работает только в том случае, если master изначально указывал на тот же самый коммит, который вы совершили с ошибкой. Если это не так, вам придется переустанавливать (или вишневый выбор или слияние...).