Исправление отсоединенной головы на переименованной ветке git - PullRequest
0 голосов
/ 07 марта 2019

Новый для Git здесь. У меня есть ветвь функций (feature/123), которая была первоначально вырезана из develop, обработана, а затем отправлена ​​в GitHub.

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

Поэтому я решил:

  1. Зафиксируйте мои изменения (которые я хочу сохранить, и возможно - хотя вряд ли - вернитесь к)
  2. Переименовать мою ветвь функций
  3. Потяните ветку feature/123, которая находится на источнике (GitHub)

Итак, я:

git add .
git commit -m "Saving changes made thus far"
git branch -m feature/123-OLD
git checkout origin/feature/123

Когда я это сделал, я увидел:

$ git checkout origin/feature/123
Note: checking out 'origin/feature/123'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at 8877c28... 123: did some stuff

И сейчас когда я смотрю на свою текущую ветку, я вижу:

$ git branch
* (HEAD detached at origin/feature/123)

разработка

Все эти вещи с "отстраненной головой" меня пугают!

Все, что я хочу, это иметь локальную ветку с именем feature/123, которая находится в том же состоянии, что и GitHub. Как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 07 марта 2019

Первые три команды здесь были хорошими:

git add .
git commit -m "Saving changes made thus far"
git branch -m feature/123-OLD

Последний изменил имя feature/123 на имя feature/123-OLD (при условии, конечно, что вы были на ветке с именем feature/123 в первую очередь).

Последняя команда не является неправильной , она просто не та, которую вы хотели:

git checkout origin/feature/123

То, что вы хотели, было:

git checkout feature/123

Это будет смотреть вокруг ваших (локальных) имен филиалов, не найти что-нибудь с именем feature/123 (оно больше не существует - feature/123-OLD существует, но это не то же самое), а затем вызвать функцию "делай, что я имею в виду" git checkout.

Эта функция говорит: Хм, я не могу найти ветку, которую вы просили. Я думаю, может быть, вы хотели, чтобы я создал новую ветку! Могу ли я найти только одно имя для удаленного отслеживания, например, origin/feature/123, которое очень похоже на feature/123? Если я не найду ни одного, ни двух, ни больше, я пожалуюсь и потерплю неудачу. Но если я найду ровно один , я сделаю новый feature/123, указывающий на тот же коммит, что и имя удаленного отслеживания!

И, конечно, он найдет только один, поэтому он создаст feature/123. Когда создает , создает feature/123, по умолчанию устанавливается восходящий поток origin/feature/123. Это режим «Что я имею в виду» или DWIM checkout, и это именно то, что вы имели в виду.

0 голосов
/ 07 марта 2019

Вы можете просто оформить заказ на нужную ветку

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