Я думаю, это будет звучать упрощенно, но самое простое решение: когда вы редактируете файл, и у вас есть куча ожидающих изменений, и вы решаете, что файл должен быть переименован,
(1) запишите, что вам нужно переименовать его
(2) вернуть файл в состояние, в котором вы можете зафиксировать изменения, которые у вас есть
(3) совершить это
(4) переименовать его
(5) совершить переименование
(6) при необходимости продолжить редактирование
То есть - если вы не хотите фиксировать переименование в то же время, когда вы вносите изменения в затронутый файл ... тогда не делайте.
В очень немногих случаях может быть причина совершить переименование с изменением. Например, общедоступное имя класса в Java должно соответствовать его имени файла. Но это нормально - порог изменения при обнаружении переименования в любом случае не соответствует (по умолчанию) 100%. Небольшие изменения редко навредят чему-либо. Но это не совсем проблема, потому что вы уже решили, что хотите сделать отдельные коммиты.
Таким образом, проблема заключается лишь в небольшом планировании. В тот момент, когда вы собираетесь переименовать значительно отредактированный файл (или значительно отредактировать переименованный файл), это момент, когда нужно решить: «О, я хочу отделить этот следующий шаг в другом коммите от того, что я уже сделал ».
Если вы действительно не можете этого сделать, тогда тайник на самом деле хорошо. Храните свои правки, переименовывайте файл, фиксируйте, извлекайте тайник. Да, извлеченный файл будет по неправильному пути, поэтому переименуйте его снова (перезаписав оригинал).
Между прочим, в зависимости от вашего рабочего процесса это может быть напрасным. Слияние не будет смотреть на отдельные коммиты и будет видеть точно такую же ситуацию, как если бы вы сделали все за один коммит. Если вы используете рабочий процесс, основанный на ребазе, вы можете обнаружить, что он действительно помогает (хотя это имеет и другие затраты). Но в целом я бы сказал, что есть и другие стратегии, которые делают больше для решения этой проблемы - например, обеспечить кратковременное расхождение ветвей, чтобы свести к минимуму разрешение конфликтов даже в том случае, если обнаружение переименования оказалось неудачным.