Могу ли я переключить ветку без фиксации? - PullRequest
0 голосов
/ 26 мая 2020

хорошо, допустим, у меня две ветки

1) new-branch

2) master

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

Ответы [ 4 ]

3 голосов
/ 26 мая 2020

Вот один из возможных рабочих процессов (YMMV) * ​​1001 *

Вы находитесь в new-branch, внесли некоторые изменения, но хотите быстро go вернуться к master

  1. Выполнить git stash
  2. Выполнить git checkout master
  3. Делайте все, что вам нужно, на master
  4. Go назад к new-branch; запустите git checkout new-branch
  5. Повторно примените изменения; run git stash pop

Хотя git stash определенно нужно учитывать, вам не следует беспокоиться о совершении коммитов, которые вы можете удалить sh, если вам нужно:

  1. На new-branch бег git commit -a -m TMP
  2. Go назад к master бегу git checkout master
  3. Сделайте что-то на главном сервере, затем go назад; запустите git checkout new-branch
  4. Либо продолжайте изменять временную фиксацию; запустить git commit -a --amend
  5. Или сбросить до предпоследнего; бег git reset HEAD^
2 голосов
/ 26 мая 2020

Вам необходимо использовать

git stash

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

Взгляните на официальную документацию с примерами:
https://git-scm.com/book/it/v2/Git-Tools-Stashing-and-Cleaning

Стандартный рабочий процесс:

git checkout master

... do some work ...

git stash       <- save all the uncommitted works
git checkout new-branch

... do some work on new-branch ...

git commit      <- commit on new-branch
git checkout master
git stash pop   <- reapply all the changes you previously have on master
1 голос
/ 26 мая 2020

Я рекомендую рассмотреть возможность использования git worktree add, по крайней мере, если ваш Git как минимум версии 2.15. Для этого вы можете запустить эту команду с верхнего уровня вашего рабочего дерева:

git worktree add ../project.master master

, что создаст целое отдельное рабочее дерево в ../project.master. Затем вы можете в любое время посмотреть на свою ветку master в этом отдельном рабочем дереве. Вы даже можете выполнять работу в master, если это то, что вы обычно делаете (хотя многие группы и организации предлагают не делать этого вообще).


Думаю, здесь два или три вопроса. В частности, я думаю, что вы столкнулись с проблемой XY здесь: вы в настоящее время работаете в своем new-branch, но вы хотели бы просмотреть файлы, как показано на ваш филиал master. Тогда вы подумали: Я знаю, как просматривать файлы и перешли от этого к как я могу сохранить все без фиксации? и задали вопрос, который вы задали, а не исходный , актуальная проблема: Как я могу просмотреть файлы, которые у меня были бы, если бы я проверил какую-то другую ветку, например master?

Ответ git stash является своего рода ответом на вопрос, который вы на самом деле задали. См. Любой из ответов Ноэля Кра , customcommander и / или Yusef Maali . То есть, вы можете запустить git stash, который где-то сохраняет вашу еще несохраненную работу, затем стирает еще несохраненную работу (которая фактически сохраняется сейчас) и позволяет вам переключать ветки.

Технически, все, что делает git stash, - это делает несколько коммитов (обычно два; иногда три, если вы запрашиваете третий коммит), которые не находятся "на" любой ветке . Так что хотя это своего рода ответ на заданный вами вопрос, он также не является ответом, потому что вы спросили: Могу ли я переключить ветвь без фиксации? и git stash совершает коммиты.

Иногда вы можете переключать ветки без фиксации , даже если у вас есть несохраненные изменения . То есть git switch master или git checkout master могут просто работать. Недостатком здесь является то, что он приносит незавершенную работу вместе с изменением ветвей. Новичкам в Git также не ясно, почему Git ведет себя именно так. Для (гораздо) большего об этом - в конце концов; пока не смотрите - см. Оформить заказ на другую ветку, если в текущей ветке есть незафиксированные изменения .

Но вам действительно не нужно переключать ветки. Вы действительно хотите просмотреть файлов в снимке на конце master. Чтобы получить весь набор таких файлов, вы можете использовать git worktree. Подкоманда git worktree, впервые представленная в Git 2.5, позволяет вам иметь несколько разных git checkout -с одновременно, если каждая из них находится в разных ветвях и в другом рабочем дереве (каталоге / папка - используйте любой термин, который вам нравится) в вашей файловой системе.

Если вы хотите просмотреть только один файл из master, рассмотрите возможность использования:

git show master:path/to/file.ext

который будет просто отображать содержимое этого файла, как видно в фиксации, которая является вершиной ветки master. Вам нужна только полная проверка, как в git worktree add, если вам нужно просматривать множество файлов одновременно, например, в необычной программе просмотра.

0 голосов
/ 26 мая 2020

Для временного сохранения изменений используйте

git stash

Чтобы получить их снова после переключения, используйте

git stash pop

Вы также можете применить изменения, но сохранить изменения в вашем персональном сервере sh как показано ниже:

git stash apply

С помощью этой команды вы можете применить свои изменения в нескольких ветвях.

Источник: https://www.git-scm.com/docs/git-stash

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