Могу ли я перебазировать ветку Git, не изменяя мою рабочую копию?

Предположим, у меня есть "главная" ветка. Я внес некоторые производственные изменения в «master», и теперь я хочу переустановить свою «экспериментальную» ветку на последнюю версию master. Но я хочу сделать это, не изменяя никаких файлов в моей рабочей копии. По сути, я хочу, чтобы все волшебство происходило внутри каталога .git, не касаясь рабочей копии.

Если бы не требование «не изменять мою рабочую копию», это просто вопрос выполнения:

# current branch is master
git checkout experimental
git rebase master
git checkout master

Моя настоящая проблема в том, что это изменяет временные метки в моей рабочей копии, даже если я заканчиваю проверкой того же содержимого, с которого начинал. Как только я запустил «git checkout экспериментальный», все файлы, содержащие изменения в экспериментальной ветке, получат текущее время mtime, как и все файлы, которые были изменены в мастере с момента последнего изменения экспериментальной базы. Из-за того, что время работы изменилось, такие вещи, как инструменты сборки, понимают, что есть работа, которую им нужно выполнить снова, хотя к тому времени, когда я закончил, содержимое файлов фактически не изменилось. (В моем случае это то, что если временная метка файла проекта изменяется, Visual Studio считает, что ей нужно потратить много времени на выгрузку и перезагрузку проекта.) Я хочу избежать этого.

Есть ли способ выполнить все вышеперечисленное за один шаг, не изменяя ничего в рабочей копии (при условии отсутствия конфликтов во время перенастройки) ?

(Если есть ] являются конфликтами, я бы предпочел показать ошибку, а затем прервать всю операцию без изменения каких-либо временных меток.Но это просто мое предпочтение, а не жесткое требование - я не знаю, что все возможно. )

Конечно, я могу написать сценарий для захвата mtimes, запустить git, а затем сбросить mtimes; но вполне вероятно, что у Git уже будет способ делать такие вещи, как перебазирование, не беспокоя рабочую копию, поскольку перебазирование действительно касается дельт, а не фактического содержимого файлов.

58
задан Joe White 6 February 2011 в 12:44
поделиться