Git - работа с неправильной веткой - как скопировать изменения в ветку существующей темы - PullRequest
297 голосов
/ 11 мая 2011

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

Как я могу скопировать работу (3 файла), которую я сделал здесь, с мастера, в мою ветку (называемую, например, branch123 ), не подходя к мастеру?

Ответы [ 4 ]

489 голосов
/ 11 мая 2011

Похоже, все, что вам нужно, это:

git stash
git checkout branch123
git stash apply

Тогда вы должны вернуться в свою собственную ветку, не касаясь главной ветви.

43 голосов
/ 25 августа 2014

Это старый вопрос, но он находится на вершине Google за "работу не в той ветке".Я думаю, что лучший ответ - просто проверить ветку, над которой хотел бы работать .Не нужно ничего прятать:

git checkout branch123

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

Редактировать: Этот метод будет работать, только если файлы, которые вы изменили в рабочем каталоге, идентичны как в master, так и вbranch123.На самом деле это было отмечено Джефроми в комментариях к принятому ответу, но я не понял, что он говорил, когда я впервые прочитал его.

6 голосов
/ 17 декабря 2015

git stash - это то, что вам нужно.

полное объяснение можно найти в Git-Tools-Stashing

0 голосов
/ 15 октября 2015

Поскольку можно создать новую ветвь, но невозможно извлечь существующую ветвь при извлечении файлов, я обнаружил следующий прием, использующий временную ветвь:

Этот сценарий работает по крайней мере сVS 2015 Git-плагин, но, скорее всего, будет работать с любым инструментом Git.

  1. извлечение и внесение изменений в файлы в master (ups !, неправильная ветвь)
  2. создать новую ветку "temp"(или любое неиспользуемое имя, которое вы выберете) из мастера.Извлеченные файлы теперь будут извлечены в temp, а не в master.
  3. проверка изменений в temp (master нетронутой)
  4. Теперь все проверено, и можно проверитьсуществующая ветка.Проверьте нужную ветку (ветку, в которую я хотел внести изменения для начала) 3.5. Git Rebase
  5. слияние temp с требуемой веткой.Теперь изменения в правильной ветке.
  6. удалите временную ветку, так как она больше не нужна

РЕДАКТИРОВАТЬ: я обнаружил, что вам придется выполнить ребаз (gitrebase --onto) ветки temp перед выполнением слияния.В противном случае изменения в основной записи будут включены в слияние.Дополнительный шаг 3.5 выше.Подробнее о rebase смотрите здесь: https://git -scm.com / book / en / v2 / Git-Branching-Rebasing

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