Мне очень нравятся git add -p
и git stash
, но иногда у меня возникает следующая проблема, которая воспроизводится следующей последовательностью команд:
git add -p my_file
: затем я редактирую кусок вручную (используяe
), потому что разделение, которое предлагает git, мне не подходитgit stash --keep-index
: затем я провожу небольшое тестирование, и если тесты проходят, не фиксируюgit stash pop
: теперь возникает проблема: файлmy_file
теперь считается конфликтующим, а git полностью испортил мой отредактированный кусок, поэтому мне нужно отредактировать файл, удалить ненужные метки слияния и запуститьgit add my_file
за которым следуетgit reset HEAD
Я озадачен, потому что это происходит только при редактировании лома вручную. Я не понимаю, как это вообще должно иметь значение.
Чтобы воспроизвести проблему:
touch newfile
git add newfile
git commit -m 'newfile'
- добавить две строчки в файл
git add -p newfile
- отредактируйте блок (
e
), удалите одну из строк в блоке, затем выйдите из git add (q
) git stash --keep-index
git stash pop
Теперь файл newfile
находится в несмешанном состоянии. Обратите внимание, что проблема возникает только с фрагментами, отредактированными вручную. Нет никаких проблем с приведенными выше командами, если вы не редактируете какой-либо кусок вручную.
Между прочим, предыдущее состояние файла находится на третьем этапе (git show :3:newfile
), а ранее подготовленная версия находится на втором этапе (git show :2:newfile
). Таким образом, я мог бы с помощью какой-то черной магии git поместить вторую стадию в этот индекс и третью стадию в рабочее репо ... но я не знаю, как это сделать, поэтому делаю это вручную. :-(
git add -p
- и у меня это всегда работает нормально. Кстати, я на Linux. Похоже на ошибку - я бы рекомендовал спросить в списке рассылки git, они довольно быстро реагируют. - person Sven Marnach   schedule 31.10.2010