Git - забыл переключить ветку

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

Как я могу переместить свои изменения в новую ветку, чтобы при нажатии они не мешали основной ветке, а вместо этого создавали новую удаленную ветку?


person Kim    schedule 26.04.2012    source источник
comment
Вы уже выполнили всю свою работу? Если да, то это всего лишь одна фиксация или серия коммитов?   -  person Jake Greene    schedule 26.04.2012
comment
Я так думаю, и это будет серия.   -  person Kim    schedule 26.04.2012


Ответы (3)


Во-первых, поскольку вы выполнили всю свою работу в своей локальной главной ветке, создайте новую ветку функций, указывающую на подсказку или ваш локальный мастер.

$ git checkout -b newfeature master

а затем оставить мастер как есть на сервере (удаленно)

$ git checkout master
$ git reset --hard origin/master
person KurzedMetal    schedule 26.04.2012
comment
Я использую только графический интерфейс (Git Bash выдает мне ошибки). Я создал ветку Create и выбрал HEAD, [] Переключение на новую ветку не было проверено. Затем я открыл журнал, выбрал самую новую основную запись и выбрал «Сброс», а затем «Жесткий». Глядя на файлы, я вижу, что мои изменения исчезли, но когда я переключаюсь на новую ветку и прошу посмотреть Diff, ничего не появляется! Разве они не должны были быть там? - person Kim; 26.04.2012
comment
@ Ким Я не уверен, что вы сделали в графическом интерфейсе, эти шаги работают независимо от того, где вы их делаете, вы, должно быть, пропустили шаг. Мне очень трудно помочь вам, если вы используете только графический интерфейс, у меня почти нет опыта работы с git gui, так как я ненавижу интерфейс Tk. Помните, что ветки и теги — это только указатели на коммит, git на самом деле ничего не удаляет до сборки мусора. Если вы потеряли какие-либо изменения при выполнении этих шагов, вы можете посмотреть git relog, чтобы восстановить свои предыдущие коммиты. - person KurzedMetal; 27.04.2012
comment
Вместо того, чтобы использовать checkout для создания ветки, вы можете просто сделать git branch newfeature, тогда вам просто нужно сделать git reset --hard origin/master - person Ted M. Young; 04.12.2013

Создайте новую ветку в той же точке, что и ваш мастер.

Извлеките мастер и полностью сбросьте текущую ветку до коммита, к которому вы хотите вернуться.

person Khanzor    schedule 26.04.2012

Я не уверен, что произошло, но когда я следовал командам git от KurzedMetal, это не дало мне желаемого результата.

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

К счастью, я спрятал свои изменения до того, как начал решать проблему с push-уведомлениями.
Примечание. Недавно созданные файлы не удалялись после полной перезагрузки.

Вот мои шаги по исправлению:

  1. Завершенные изменения (все еще в мастере)
  2. Извлеките новые изменения из удаленного мастера и устраните все конфликты.
  3. TortoiseGit -> Stash save. Введите сообщение, чтобы отличить его от других тайников -> Хорошо
  4. TortoiseGit -> Show log. Выберите новейший мастер, затем щелкните правой кнопкой мыши и выберите Reset, затем Hard option -> Ok
  5. TortoiseGit -> Create Branch. Введите имя и установите флажок Switch to new branch -> Ok
  6. TortoiseGit -> Stash list. Выберите сохраненный тайник -> ОК
  7. Теперь вы видите список различных файлов. Для каждого файла сравните различия и снова примените изменения к вновь сброшенным файлам.
  8. Когда закончите, щелкните правой кнопкой мыши внутри вашей локальной папки. Вы должны увидеть Git Commit -> "BranchName" ... над TortoiseGit, выберите первый
  9. Подтвердите, какие файлы нужно зафиксировать, а затем введите подходящее описание -> Ok
  10. Теперь вы готовы к push. TortoiseGit -> Push, убедитесь, что выбранное вами имя соответствует локальной ветке. Если это не так, то вы забыли переключить ветку в 5. и должны продолжить с 6.

Надеюсь, это поможет другим. Что нужно помнить: переключайтесь на новую ветку, когда вы начинаете новую функцию / незначительное изменение.

person Kim    schedule 27.04.2012
comment
git stash будет работать только в том случае, если вы ничего не совершали, и вы заявили, что уже совершили несколько раз. - person KurzedMetal; 27.04.2012
comment
Я сказал I believe. Как вы можете догадаться, я все еще новичок в работе с репозиториями. С другой стороны, у меня заработало Git Bash — все, что мне нужно было, это перейти к моей папке репо с помощью команды cd, поскольку Git Bash, по-видимому, не запускается в моей папке репо, поэтому у него не было скрытой папки git для проверки. - person Kim; 27.04.2012
comment
Я бы порекомендовал вам прочитать онлайн-книгу о Git, если вы хотите почувствовать гибкость работы с git. имеет аккуратные графики, показывающие, как git видит ваши данные, и его легко понять. Когда я только начинал, мне это очень помогло. - person KurzedMetal; 27.04.2012