Как сохранить текущее состояние моей промежуточной области?

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

Фон:
Иногда я выполняю несколько крупных рефакторингов. На самом деле имеет смысл совершить полный результат.
Во время этого рефакторинга я также делаю некоторые несвязанные изменения, которые я бы хотел совершить независимо.
Например, рефакторинг переименовал метод. Несвязанное изменение фиксировало орфографическую ошибку для одного параметра другого метода в том же классе.
Теперь предположим, что я уже добавил большинство файлов в промежуточную область, когда понял, что я забыл заранее совершить одно из несвязанных изменений.
Добавление файлов в промежуточную область требует времени, потому что я проверяю каждый файл, чтобы убедиться, что я действительно выполняю только то, что хочу. Таким образом, просто удаление их всех из промежуточной области не является решением.
Вместо этого я хотел бы сделать следующее:

  • Сохранить текущее состояние промежуточной области
  • Удалить все поэтапные файлы
  • Настройте несвязанное изменение
  • Зафиксируйте несвязанные изменения.
  • Повторно примените сохраненное состояние к промежуточной области.

Как это возможно?

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

Ответ 1

Следующая цепочка команд должна делать трюк

git commit -m "temporary" # save current stage are as an actual commit
git commit unrelated_files -m "The other feature"
git stash # hide the rest
git rebase -i HEAD~2 # change the order of two last commits
git reset HEAD^ # rollback the "temporary" commit
git add . # add everything from that commit back to staging
git stash pop # and return back all initially unstaged stuff

Ответ 2

Вам определенно нужно git stash

Это сохранит вашу текущую работу и покинет ваш каталог, как если бы вы сделали reset для HEAD. Теперь вы можете переключаться между ветвями, выполнять некоторую работу над другой темой.

Когда вы снова будете готовы к работе над своей функцией, повторно примените свои спрятанные изменения с помощью git stash apply

Вы можете комбинировать несколько задержек, git stash list будет их перечислять, затем вы можете выбрать, какой из них применить, например git stash apply @{1}

Изменить:

Как пояснил @nevik-rehnel в комментариях, вы также можете использовать интерактивное добавление.

Не разбирайте все, используйте git add -p, чтобы выполнить несвязанные изменения, зафиксировать, а затем восстановить все.

Ответ 3

Почему вы не можете сохранить его как ветку и начать новую ветку

Ответ 4

Казалось, это сработало:

  • git commit -m "temp"
  • git stash -u
  • git reset HEAD ^
  • git сохранить сохранение "MeepMeep!"
  • git stash pop stash @{1}