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