Как вернуть файл к предыдущей версии, не перезаписывая текущие изменения? - PullRequest
6 голосов
/ 03 февраля 2012

У меня возникла проблема при попытке вернуть файл к предыдущему коммиту, я знаю, что могу использовать git checkout для восстановления одного файла, но проблема в том, что у меня есть изменения в этом файле, которые я хотел бы сохранить, поэтому яИнтересно, как сделать какое-то «слияние» между предыдущим коммитом и текущим HEAD для одного файла?Я попытался использовать git reset sha-of-my-commit path/to/my/file, но он помещает предыдущую версию в промежуточную область, сохраняя последнюю версию в моем рабочем каталоге, не зная, как объединить оба файла после него.

То, что я сейчас сделал, было просто git diff ..sha-of-my-commit path/to/my/file и просто скопируйте / вставьте пропущенные строки, но я считаю, что должен быть лучший способ сделать это правильно?

1 Ответ

5 голосов
/ 03 февраля 2012

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

git stash
git checkout previous-commit path/to/file
git stash pop

Если вы зафиксировали некоторые изменения, вы все равно можете это сделать, выполнив немного больше работы.Предположим, что ваша история выглядит следующим образом:

- x - A - x - x - x - B - x - x (HEAD)

, где вы хотите версию на A, плюс изменения с B на.Затем сделайте следующее:

git stash
git checkout B path/to/file
git stash
git checkout A path/to/file
git stash pop
git stash pop

Обратите внимание, что любое приложение-хранилище, поскольку оно является операцией слияния, может привести к конфликтам слияния;Вы должны, конечно, решить эти проблемы, прежде чем двигаться дальше!

...