Подтвердить что ты не робот

Является ли git специфичным для ветвей или для всего хранилища?

Я пошел в филиал и сделал некоторую работу. Я хотел пойти в другую ветку, но не хотел, чтобы я сделал git stash. Тогда я сделал git checkout <otherbranch>. Я проделал там какую-то работу, и, как и в первом отделении, я хотел отказаться от нее, прежде чем совершать работу. Так что я сделал там git stash. Я переключился на первую ветку и попытался ее размять (git stash pop), думая, что он получит тайник из этой конкретной ветки. Я был удивлен, что он развязал кошелек от <otherbranch> (последний спрятан). У меня создалось впечатление, что stash имеет специфику для ветвления, но это поведение указывает на то, что для всего локального репозитория существует только один файл.

Является ли git stash специфичным для отрасли или для всего хранилища? Если это для всего репозитория, могу ли я передать ему параметры, чтобы сделать его специфичным для ветвления?

4b9b3361

Ответ 1

Чтобы увидеть текущий стек стека:

git stash list

Чтобы выбрать конкретный штамп из стека, обратитесь к нему с помощью [email protected]{number}, показанного выше.

Если вы хотите, чтобы поведение было для каждой ветки, вы можете просто сделать фиксацию (или несколько коммитов) в ветке. Вы всегда можете "отменить" фиксацию позже (например, с помощью git reset, либо --soft, либо --mixed, см. git reset documentation или с помощью git rebase -i сохранить только возможные "реальные" фиксации при отмене временных файлов).

(Чтобы действительно эмулировать git stash, вам нужно как минимум две коммиты: одна для состояния индекса и одна для состояния рабочего дерева. Если вы не планируете сохранять и восстанавливать состояние индекса, вы можете просто git add -A общее состояние рабочего дерева и поместить его во временную фиксацию. Альтернативно, git stash представляет собой оболочку script, поэтому вы можете скопировать и изменить ее довольно легко, чтобы заставить ее работать по ветки по умолчанию, используя, например, refs/pb-stash/branch в качестве рабочего пространства имен, а не единственного глобального refs/stash для всего репо. Вы все равно сможете принести кошелек из одной ветки в другую, называя его явно.)

Ответ 2

Нет и № git stash для каждого репозитория.

Здесь - хорошая страница о том, как ее использовать.

Ответ 3

git stash не для каждой ветки.

  • Вместо git stash (который можно легко потерять, если у вас много stashов и веток)
  • Я предлагаю сделать git commit, чтобы сохранить незаконченный код в вашей ветке, и когда вы будете готовы закончить код, сделайте git reset ${COMMIT_HASH_VALUE}, чтобы вернуть незаконченный код
  • git commit и git reset при правильном использовании могут имитировать git stash для конкретной ветки

Вот обычный реальный сценарий, который демонстрирует значение и использование команд commit и reset:

  • вы работаете над функциональной веткой X, и ваш код даже не компилируется и не проходит тесты
  • есть ошибка, которая имеет более высокий приоритет, чем текущая новая функция, поэтому вы должны немедленно приступить к работе над исправлением ошибки
  • вместо того, чтобы делать git stash (а stash теряется в миксе, потому что у вас есть много stashов и много веток)
  • Вы можете сделать git commit в ветки функций X
    • запишите COMMIT_HASH_VALUE на потом
  • оформить исправление новой ветки Y
  • завершите оперативное исправление в ветки Y (выполните запрос на слияние, чтобы получить оперативное исправление в базовую линию и удалить ветку оперативного исправления)
  • затем снова проверьте функциональную ветвь X
  • чтобы показать ваши незаконченные работы, которые не были скомпилированы или не прошли тестирование → просто сделайте git reset ${COMMIT_HASH_VALUE}

(К сведению, по умолчанию для git reset является --mixed)

Ответ 4

Я не уверен, почему каждый ответ здесь предлагает эмулировать stash с commit + reset. Stash идеально подходит для использования, особенно при работе с несколькими ветками. Я также не хочу фиксировать, когда я работаю с несколькими ветвями, потому что я хочу, чтобы все измененные изменения по-прежнему выделялись в моем редакторе, когда я вернусь.

Итак, вот рабочий процесс хранилища:

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

git stash save "Your custom stash message"

Когда вы вернетесь в филиал, проверьте stash

git stash list

enter image description here

Если вы находитесь на ветке FixIssue0203, вы можете использовать git stash pop, потому что это применит верхнюю часть [email protected]{0} и удалит ее из stashа.

Однако, если вы входите в ветку ImproveReadme, сначала вы должны применить stash 1 git stash apply [email protected]{1}, а затем удалить stash 1 из стека git stash drop [email protected]{1}.

Это!