Каков самый короткий способ поменять местами поэтапные и неустановленные изменения в git?

Если некоторые изменения добавлены в индекс, а есть некоторые изменения, которые не добавлены в индекс, как мне поменять местами эти два набора изменений?

31
задан whitered 26 August 2010 в 08:37
поделиться

2 ответа

Способ с патчами (не работает для бинарных изменений):

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

git diff >> unstaged.patch
git diff --cached >> staged.patch

Применить исходные неустановленные изменения

git reset --hard
git apply unstaged.patch

Поместить эти изменения, кроме файлов патчей

git add -A
git reset -- staged.patch unstaged.patch

Применить первоначально подготовленные изменения

git apply staged.patch

Удалить файлы исправлений

rm staged.patch unstaged.patch
4
ответ дан 27 November 2019 в 22:44
поделиться

У Чарльза Бейли есть более полное решение, включающее коммиты и управление потенциальными разрешениями конфликтов.

Первоначально я пытался использовать только git stash, за исключением того, что я изначально упустил из виду, что git stash save сохранит оба индекса (поэтапные изменения) и неустановленные изменения (что неудобно, если вы хотите поменять местами содержимое индекса с неустановленными изменениями).

Поэтому вместо этого я изменил следующий подход:

  • git commit -m "temp commit" (создать фиксацию для текущего индекса)
  • git stash (спрятать, очевидно, то, что еще не добавлено в индекс)
  • git reset --soft HEAD^ (сохранить ранее зафиксированные файлы)
  • git stash снова
  • git stash pop stash@{1} (применяется не то, что вы только что спрятали, а то, что вы спрятали раньше, то есть первоначальные изменения, которые еще не были добавлены в индекс)
  • git add -A
  • git stash drop stash@{1} для очистки тайник, который мы ранее применили ( stash@{0} по-прежнему содержит то, что изначально было в индексе)

В конце:

  • теперь добавляется то, что не было добавлено в индекс.
  • то, что изначально было в индексе, оказывается спрятанным
3
ответ дан 27 November 2019 в 22:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: