Помещение незафиксированных изменений на Мастере в новую ветку с помощью Git

Как можно внести незафиксированные изменения в ТЕСТ ветки, когда я нахожусь в ветке master?


person Léo Léopold Hertz 준영    schedule 29.08.2009    source источник
comment
См. Также: stackoverflow.com/questions/2944469/   -  person Jouni K. Seppänen    schedule 04.11.2010


Ответы (3)


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

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

git checkout test
git add .
git add deletedFile1
git add deletedFile2
...
git commit -m "My Custom Message"

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

person Samuel Carrijo    schedule 29.08.2009
comment
Иногда проверка завершается ошибкой, потому что ваши изменения конфликтуют с этой веткой. Вы можете попробовать checkout -m для слияния. - person Jouni K. Seppänen; 04.11.2010
comment
Я пробовал это, но получил сообщение об ошибке: ошибка: Ваши локальные изменения в следующих файлах будут перезаписаны при оформлении заказа. Пожалуйста, зафиксируйте свои изменения или спрячьте их, прежде чем вы сможете переключать ветки. - person ishwr; 19.12.2013
comment
Хотя это будет работать, ответ, в котором говорится, что использовать stash, следует предпочесть, IMO. Может быть, это просто личный выбор, но логически это более чистый рабочий процесс и знакомство с полезной командой STASH. - person Patrick; 29.03.2016
comment
Параметр -b отсутствует, поскольку заголовок предполагает, что вопрос касается новой ветки. - person Guntram; 09.05.2017

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

git checkout -b new_branch
git add .

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

person Community    schedule 17.12.2010
comment
та же проблема, что и @jouni, отмеченная для другого ответа - вы можете столкнуться с трудностями при объединении ветки обратно в мастер, если дополнительные изменения конфликтуют с исходными изменениями. ИМО, эта ветка лучше отвечает на вопрос: stackoverflow.com/questions/556923/ - person jpw; 20.04.2013
comment
Коротко, мило и обнадеживающе ... Я использую это все время ... - person ϹοδεMεδιϲ; 17.06.2013
comment
Не забудьте сделать коммит в new_branch. Если вы вернетесь в основную ветку и вернете измененные файлы, вы потеряете их и в new_branch. - person petrsyn; 26.03.2014

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

$ git branch
  develop
* master
  feature1
  TEST
$

У вас есть файлы в текущей ветке, которые вы хотите переместить.

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#      modified:   awesome.py
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   linez.py
#
$
$ git stash
Saved working directory and index state \
  "WIP on master: 934beef added the index file"
HEAD is now at 934beef added the index file
(To restore them type "git stash apply")
$
$ git status
# On branch master
nothing to commit (working directory clean)
$
$
$ git stash list
stash@{0}: WIP on master: 934beef ...great changes
$

Перейдите в другую ветку.

$ git checkout TEST

И применить

$ git stash apply
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   awesome.py
#      modified:   linez.py
#

Мне также нравится git stash, потому что я использую git flow, который жалуется, когда вы хотите завершить ветку функции, в то время как изменения все еще находятся в вашем рабочем каталоге.

Как и @Mike Bethany, это происходит со мной все время, потому что я работаю над новой проблемой, забывая, что я все еще нахожусь в другой ветке. Таким образом, вы можете спрятать свою работу, git flow feature finish... и git stash apply в новую ветку git flow feature start ....

person HeyWatchThis    schedule 13.11.2012
comment
git stash - мой предпочтительный способ работы с незафиксированными изменениями. Это, безусловно, интуитивно понятный метод, если представить его как «вырезать и вставить». - person Matthew Mitchell; 22.01.2013
comment
Мне это кажется хорошим подходом. Сработало без проблем. - person Yunus Nedim Mehel; 01.05.2014
comment
Не знал, что вы можете это сделать, и это отлично сработало. Чувствует себя немного более интуитивно понятным, чем другие методы. - person glaucon; 14.08.2014
comment
Я думаю, что это более профессиональный способ, вместо использования git checkout с последующим добавлением. Думаю, ваш ответ должен быть 100+ голосов. - person Matrosov Alexander; 21.03.2015
comment
git stash не работает, если у вас есть новый незафиксированный файл. - person Καrτhικ; 17.06.2015
comment
В какой ветке был применен тайник? тест или мастер? Кажется, проверено на тестовую ветку, но отображается мастер? - person Mayuresh Srivastava; 13.07.2017