Git - переключение между ветками в середине работы - PullRequest
2 голосов
/ 13 марта 2010

По разным причинам (в основном обзор кода) мне часто приходится переходить из текущей ветки разработки в другие.

В настоящее время я использую либо «git stash», чтобы отложить незафиксированные изменения, оформить другую ветку, затем переключиться назад и выполнить «git stash apply»

Однако иногда я добавляю туда новые файлы, которые не отслеживаются. К сожалению, копить их не влияет. В этом случае мне придется добавить их в индекс и спрятать.

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

Ответы [ 3 ]

3 голосов
/ 13 марта 2010

Вы можете клонировать репозиторий и просматривать / работать с клоном. Удалить клон, когда вы закончите. Если вам случится внести изменения в ветку / клон, вы можете отодвинуть их назад. Я думаю, что местный клон дешев. И даже если это не так, дисковое пространство все равно дешевле, чем ваше время.

1 голос
/ 13 марта 2010

вы можете клонировать репо в другой каталог и по умолчанию выбрать нужную ветку:

# assume your original repo is in myproj
$ git clone myproj myproj_clone --branch my_branch

Если вы перейдете в папку myproj_clone, она будет в вашей ветке

$ cd myproj_clone
$ git branch
* my_branch
0 голосов
/ 13 марта 2010

Я не уверен, что клонирование - правильное решение, но так как 2 ответа предполагают, что это на уме, поэтому я предлагаю модификацию на эту тему. клонирование не может быть дешевым. С точки зрения дискового пространства это не имеет значения, но сам клон занимает несколько секунд, и это слишком много времени, чтобы тратить на ненужную операцию. В качестве альтернативы, вы можете просто создать новый рабочий каталог, используя старый рабочий каталог git. т. е. если текущим рабочим каталогом является "a" (с изменениями и не помеченными файлами), попробуйте:

$ mkdir ../b
$ cd ../b
$ echo 'gitdir: ../a/.git' > .git
$ git checkout -f foo

Теперь b фактически является клоном a в ветке foo, и у вас есть две рабочие директории, с которыми можно поиграть. Сделайте то, что вам нужно, на ветке foo в рабочем каталоге b, затем вернитесь к a и извлеките ветку, в которой вы были, когда уходили.

...