Внесение незафиксированных изменений в Master в новую ветку от Git

189

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

Лео Леопольд Герц 준영
источник
2
Смотрите также: stackoverflow.com/questions/2944469/…
Джоуни К. Сеппанен

Ответы:

151

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

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

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

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

Самуэль Каррихо
источник
12
Иногда проверка завершится неудачно, потому что ваши изменения вступают в конфликт с этой веткой. Вы можете попробовать оформить -m, чтобы объединить.
Джоуни К. Сеппанен
2
Я пробовал это, но я получил ошибку: ошибка: Ваши локальные изменения в следующих файлах будут перезаписаны при оформлении заказа. Пожалуйста, передайте изменения или спрячьте их, прежде чем вы сможете переключать ветки.
ishwr
Хотя это будет работать, ответ, который говорит, что использование тайника должно быть предпочтительным, IMO. Может быть, просто личный выбор, но это более чистый рабочий процесс, логически и представляет STASH, который является полезной командой.
Патрик
Опция "-b" отсутствует, поскольку заголовок предполагает, что вопрос касается "новой" ветви.
Гунтрам
195

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

git checkout -b new_branch
git add .

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

Swanand
источник
3
та же проблема, что и @jouni для другого ответа, - вы можете столкнуться с трудностями при объединении ветви обратно в master, если дополнительные изменения вступают в конфликт с исходными изменениями. ИМО, эта тема лучше отвечает на вопрос: stackoverflow.com/questions/556923/…
jpw
Коротко, сладко и обнадеживающе ... «Я использую это все время ...»
ϹοδεMεδιϲ
1
Не забудьте сделать коммит в new_branch. Если вы переключитесь обратно в основную ветку и вернете измененные файлы, вы потеряете их и в new_branch.
petrsyn
36

Почему бы просто не использовать 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 ...ветку.

HeyWatchThis
источник
2
git stashмой предпочтительный способ справиться с незавершенными изменениями. Это, безусловно, интуитивно понятный метод, когда вы думаете об этом как о вырезке и вставке.
Мэтью Митчелл
Это кажется хорошим подходом для меня. Работало без проблем.
Юнус Недим Мехел
Не знал, что вы могли бы сделать это, и это сработало хорошо. Чувствуется немного более интуитивно, чем другие методы.
глаукон
Я думаю, что копирование это более профессиональный способ, вместо использования git checkout, а затем добавить. Я думаю, что ваш ответ должен быть более 100 голосов.
Матросов Александр
1
@ Καrτhικgit stash --include-untracked
августа
5
git checkout TEST
git add file1 file2
git commit
Бомбы
источник