Как защитить состояние текущей ветки без фиксации? - PullRequest
0 голосов
/ 06 июня 2018

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

Когда я делаю git stash, он возвращает ветку к предыдущему коммиту, поэтому рабочее дерево чистое, и я могу получить новую экспериментальную ветку.Оказавшись в новой ветке, я запускаю git stash apply, чтобы вернуть исходное состояние, чтобы попробовать свои экспериментальные изменения.

Я делаю некоторые изменения и решаю их отменить.Когда я возвращаюсь к первой ветке и запускаю git stash apply, я получаю сообщение об ошибке, и все изменения, которые я сделал в экспериментальной ветке, уже есть.Как получить исходное состояние до экспериментальных изменений обратно?Спасибо.

Например:

  • Я создал еще одно тестовое репо, так как не знаю, что делаю.Я создаю файл с именем test.txt и делаю начальную фиксацию.
  • Затем выполните git checkout -b branch1 и в текстовом файле введите «Ветвь 1 изменения».
  • Затем я делаю git stash, чтобы защитить незафиксированное состояние текущей ветви.Это удаляет то, что я только что сделал, и рабочее дерево чистое.
  • Так я и делаю git checkout -b experiment.
  • Оказавшись там, я делаю git stash apply и возвращаю старое состояние.
  • Я делаю изменения и решаю, что не хочу их.
  • Тогда я делаю git checkout branch1.Теперь есть изменения из экспериментальной ветки, и когда я пытаюсь сделать git stash apply, чтобы восстановить старое состояние, я получаю ошибку.

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

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

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

Чтобы добавить ответ Марка, в вашем случае у вас даже не было необходимости прятать или фиксировать.Вы можете поставить свою текущую завершенную работу, а затем попробовать некоторые вещи, которые изменили бы ваш рабочий каталог, но не сцена.Затем, если вы были довольны этой работой, вы можете добавить ее на сцену.В противном случае вы можете сбросить измененные файлы в вашем рабочем каталоге до состояния, когда вы в последний раз их ставили.Рабочий процесс будет выглядеть примерно так:

# work work work
git add test.txt
# try something out, modify test.txt
# if it didn't work out, then just reset test.txt to the stage
git checkout -- test.txt

Если эксперимент удался, вы можете снова сделать git add, добавить изменения на сцену и зафиксировать.

0 голосов
/ 06 июня 2018

Вы думаете об этом.Если вы хотите защитить текущее состояние, сделайте коммит.Пока вы не выдвигаете коммит, вы можете удалить его из истории позже, выполнив последующий коммит с параметром --amend, или раздавив его с помощью интерактивного перебазирования.(Или другими способами, в зависимости от ситуации.)

(я не говорю, что вы не можете использовать stash - это, в конце концов, механизм для создания временных коммитов. Нокак вы заметили, использование stash таким способом не является естественным или интуитивно понятным, и это потому, что это не совсем то, для чего предназначен stash. Stash предназначен для сохранения вашего WIP и поэтапных изменений при переключении передач.что-то еще , что несколько отличается от проверки ваших изменений, чтобы вы могли продолжать работать и позже вернуться к текущему состоянию.)

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