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


Ответы:


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 .

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


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 ...ветку.


2
git stashмой предпочтительный способ справиться с незавершенными изменениями. Это, безусловно, интуитивно понятный метод, когда вы думаете об этом как о вырезке и вставке.
— Мэтью Митчелл

Это кажется хорошим подходом для меня. Работало без проблем.
— Юнус Недим Мехел

Не знал, что вы могли бы сделать это, и это сработало хорошо. Чувствуется немного более интуитивно, чем другие методы.
— глаукон

Я думаю, что копирование это более профессиональный способ, вместо использования git checkout, а затем добавить. Я думаю, что ваш ответ должен быть более 100 голосов.
— Матросов Александр

1
@ Καrτhικgit stash --include-untracked
— августа

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.