Безопасное переключение веток в git - PullRequest
7 голосов
/ 25 мая 2011

Я нахожусь в основной ветке и хочу поработать над новой функцией, поэтому я делаю:

git checkout -b new_feature

Сейчас я пишу код, выполнение статуса git показывает измененные файлы.

Если я попытаюсь перейти в основную ветку, появится сообщение, что я не могу переписать файлы, которые были обновлены.

ОК, поэтому я добавлю их:

git add -A

теперь, если я попытаюсь перейти к основной ветке, кажется, что она хочет слиться ???

git checkout master

Что я хочу знать, как это сделать:

  1. whileв другой ветке я хочу остановить то, что я делаю, и перейти к основной ветке, пока ничего не объединяя, я просто хочу прекратить работу над новой веткой функций и вернуться к мастеру.

Ответы [ 4 ]

8 голосов
/ 25 мая 2011

У вас есть два варианта (по крайней мере). Фиксация "в процессе" или тайник.

Фиксация "в процессе" - это просто: это коммит в ветке, представляющий незавершенную работу:

$ git commit -am'WIP (description here)'
$ git checkout master

Позже, когда вы вернетесь в свою ветку, вы можете продолжить работать и совершать:

$ git checkout mybranch
# do work
$ git commit -am'Finish WIP (description here)'

Когда вы закончите, вы можете объединить ваши "WIP" коммиты, если хотите, в последовательные коммиты без доказательств того, что вы совершили частичную работу:

$ git rebase -i HEAD~2    # See instructions for rebase -i elsewhere

Или вы можете использовать тайник:

$ git add .
$ git stash save 'WIP (descriptino here)'
$ git checkout master

Позже, когда вы вернетесь в свою ветку:

$ git checkout my_branch
$ git stash pop

Вы будете там, где остановились.

2 голосов
/ 25 мая 2011

Кажется, что вы забыли commit изменения, которые вы add изменили в индексе.

git add <something>
git commit
git checkout master
2 голосов
/ 25 мая 2011

git stash может быть то, что вы ищете.

0 голосов
/ 25 мая 2011

Делая git add -A, вы просто добавляете свои изменения в индекс - то есть вы говорите git, что эти изменения вы будете фиксировать после выполнения git commit.Вы на самом деле ничего не совершали, поэтому, когда вы пытаетесь извлечь что-то еще, git предупреждает вас, потому что вы потеряете свой индекс.git commit -m "Ваше сообщение о коммите" добавит проиндексированные изменения в дерево поверх new_feature и удалит их из индекса, так что вы можете свободно переключать ветку сразу после.

Git stash - еще один вариант, но в зависимости от того, насколько вероятно, что ваши изменения в new_features вызовут конфликты, вы можете предпочесть сделать коммит (затем вы можете сбросить --mixed HEAD ~ 1, чтобы перейти на один коммит без изменения рабочей копии).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...