Я полностью люблю 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
). Таким образом, я мог бы с помощью некоторой мерзкой черной магии поставить второй этап в этом индексе и третий этап в рабочем репо ... но я не знаю, как это сделать, поэтому я делаю это вручную. : - (