Git вернуть не вернуть прежнее состояние - PullRequest
2 голосов
/ 09 сентября 2011

Так что давным-давно я добавил папку abc с группой файлов в своем проекте и сделал коммит с ревизией xyz.После многих коммитов кто-то удалил папку с помощью git rm -r abc.После этого было также много коммитов.

Теперь мне нужно вернуть папку abc.Я делаю

git revert xyz

После этого я могу найти папку xyz, но присутствуют не все файлы, которые были добавлены в коммит xyz.

Что я делаю не так?Я не хочу делать сброс, потому что я хочу сохранить историю между коммитом xyz и настоящим.

Ответы [ 2 ]

5 голосов
/ 09 сентября 2011

То, что вы действительно хотите, это:

git checkout xyz -- abc

Там написано "получите версию версии по пути abc, как это было в коммите xyz". Таким образом, вы вернете свою папку в состояние, в котором вы ее зафиксировали, но вы не будете трогать другие файлы, которые могли быть изменены с тех пор.

(-- не требуется, если вы явно указываете коммит, если только имя коммита не является именем файла в вашем проекте. Например, если вы пытаетесь проверить версию файла с именем HEAD из коммита, на который указывает master, вам нужно будет сделать git checkout master -- HEAD. [Просто сэкономьте время и не называйте свои ветви и помечайте те же вещи, что и ваш файлы.] )

Вам не нужен git revert xyz, потому что он предназначен для создания коммитов, которые отменяют другие коммиты, и вы, очевидно, не хотите сторнировать ваш , добавляя файлы в первую очередь .

3 голосов
/ 09 сентября 2011

git revert xyz не возвращает ваш код в состояние, в котором он находился на ревизии xyz - он создает новый коммит, который отменяет независимо от того, что было сделано в xyz.Вы можете попробовать git cherry-pick --no-commit xyz, который воспроизведет изменений, которые были сделаны в xyz (если вы пропустите --no-commit, он автоматически станет новым коммитом, но, возможно, вам не нужно всеэто было сделано в xyz).

...