Откладываю только ООН-устроили изменения в Git


Я хотел бы сделать следующий рабочий поток:

  1. добавить изменения в сцену.
  2. припрятать все остальные изменения, которые не были организованы.
  3. кое-что делать с вещами в стадии (т. е. сборки, запуска тестов и т. д.)
  4. применить заначку.

есть ли способ сделать шаг 2?

пример

 echo "123" > foo
 git add foo # Assumes this is a git directory
 echo "456" >> foo
 git stash
 cat foo # Should yield 123
6 144

6 ответов:

git stash save имеет параметр --keep-index что делает именно то, что вам нужно.

Итак, бегите git stash save --keep-index.

git stash save --keep-index

Кроме Того, Re:

почему бы не зафиксировать изменения после их размещения? - Шин

A: потому что вы всегда должны проверять тестируемый код :) это означает, что вам нужно запустить тесты с только изменения, которые вы собираетесь совершить

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

Это можно сделать в 3 этапа: сохранить поэтапные изменения, спрятать все остальное, восстановить индекс с поэтапными изменениями. Что в основном:

git commit -m "~~~ saved index ~~~"
git stash save -u
git reset --soft HEAD~1

Это будет делать именно то, что вы хотите.

С git version 2.7.4 вы можете:

git stash save --patch

The git попросит вас добавить или нет изменения в заначку.
А ты тогда просто ответь y или n

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

git stash pop

или, если вы хотите сохранить сохраненные изменения в заначке:

git stash apply

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

сначала припрятать все, но оставить постановочные изменения нетронутыми

$ git stash save --keep-index [--include-untracked]

теперь припрятать поэтапные изменения отдельно тоже

$ git stash save

внести изменения для исправления; и проверить; их совершают:

$ git add [--interactive] [--patch]

$ git commit-m"fix..."

теперь восстановите ранее выполненные изменения:

$ git stash pop

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

(... Затем зафиксируйте поэтапные изменения и восстановите тайник всех других изменений и продолжите ...)

еще один совет, связанный с вопросом:

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

$ git stash save --keep-index

вы можете дать тайник сообщение, так что когда вы делаете git stash list Это более очевидно, что вы спрятали раньше, особенно если вы будете следовать этой операции тайника путем дальнейшего сохранения. Например

$ git stash save --keep-index " изменения еще нет постановка"

(хотя на самом деле он содержит все изменения, как указано в других ответах).

например, за приведенным выше может следовать сразу:

$ git stash save "поэтапные изменения для функции X"

остерегайтесь, однако, что вы не могу затем использовать

$ git stash применить "stash@{1}" # # # ✘ не совсем делает то, что вы могли бы хотеть

восстановить только неиндексированных изменений.