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

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

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

Ответ 1

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

git stash
git checkout branch123
git stash apply

Затем вы должны вернуться на свою ветку, не касаясь ведущей ветки.

Ответ 2

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

git checkout branch123

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

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

Ответ 3

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

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

Ответ 4

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

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

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

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