Вы столкнулись с (на самом деле) недостатком метода Git по записи только снимков и родословных: обычно Git может идентифицировать переименованные файлы, потому что они все еще выглядят достаточно похожими, но если вы радикально измените файл, а также переместите его,Там ничего не осталось, чтобы отличить результат от удаленного старого файла и нового другого файла в этом новом месте.
git checkout master^0 # make a scratch commit to help Git
git mv new/path/to/file1 old/path/to/file1 # move the drastic-rewrite stuff back
git commit -m \
'put drastically-changed-and-renamed files back where automerge can find them'
git checkout oldstuff # merge the helper commit to oldstuff
git merge @{1} # ...
git mv old/path/to/file1 new/path/to/file1 # put things in their new location
git commit --amend
Слияние Гита смотрит на кончики и основу.Так как эти файлы с подсказкой master
ничем не похожи на то, что они делали на базе слияния с oldstuff
, и с тех пор их тоже подняли и переместили, слияние больше не видит их как одни и те же файлы.Поэтому поместите их обратно, чтобы помочь Git в автоматическом объединении, запустите слияние, переместите их обратно в их новый дом.
Чтобы прямо ответить на ваш заглавный вопрос, почему Git делает свои истории только для снимков и предков, это инженеркомпромисс.Есть недостатки, независимо от того, что вы делаете, вы попали в обратную сторону выбора Git.