2011-08-03 5 views
201

Я работал над мастер-веткой, делал некоторые изменения, а затем спрятал их. Теперь, мой хозяин в HEAD.Изменения git stash относятся к новой ветке?

Но теперь я хочу получить эти изменения, но к новой ветке, которая выходит из версии HEAD главной ветви.

Как это сделать?

+1

Я думаю, вы ищете это? http://stackoverflow.com/questions/556923/how-to-merge-my-local-uncommitted-changes-into-another-git-branch – zx1986

ответ

274

Не стандартная процедура не работает?

  • делают изменения
  • git stash save
  • git branch xxx HEAD
  • git checkout xxx
  • git stash pop

Шортер:

  • делают изменения
  • git stash
  • git checkout -b xxx
  • git stash pop
+39

короче: 'git checkout -b xxx' – eckes

+25

Просто уточнить @eckes 'git checkout -b xxx' является альтернативой выполнению' git branch xxx HEAD', а затем 'git checkout xxx'. Чтобы достичь того, чего хочет OP, вам все равно нужно выполнять команды 'git stash'. – Simon

+9

Еще один ярлык: 'git stash' эквивалентен' git stash save' – sfletche

190

Поскольку вы уже спрятали свои изменения, все, что вам нужно это один вкладыш:

  • git stash branch <branchname> [<stash>]

Из документов (https://www.kernel.org/pub/software/scm/git/docs/git-stash.html):

Создает и проверяет новую ветку с именем < branchname> начиная с фиксации, при которой < тайник> был первоначально создан, применяет изменения, записанные в < stash> к новому рабочему дереву и индексу. Если это удастся, и < копить> является ссылкой на форму притона @ {< пересмотра>}, тогда падает < тайник>. Когда нет < stash>, применяется последний.

Это полезно, если ветка, на которой вы запускали сохранение git stash, изменилась настолько, что приложение git stash не работает из-за конфликтов. Поскольку stash применяется поверх фиксации, которая была HEAD в момент запуска git stash, она восстанавливает исходное состояние спряжения без конфликтов.

+3

Для одиночных задержек это путь. Ссылка на stash name не требуется, так как Git будет применять последний тайник, переключиться на новую ветку и применить штамп в 1 команде. – sinisterOrange

+0

@ RodneyGolpe Это, похоже, также применяет прикрытие к «хозяину»? То, что я хочу сделать, - от «master», git stash, тогда я бы ожидал «git stash branch [branchname], чтобы применить stash к новой ветке, оставив мастер без изменений? –

+2

@DavidDoria Вы должны зафиксировать изменения в своей новой ветке, прежде чем вернуться к мастеру. –

Смежные вопросы