Я предполагаю, что "забыл огромную часть кода в удаленном файле" означает, что вы отбросили материал, который удаленная часть могла бы внести, и переписали его с вашими собственными изменениями.
Содержимое все еще присутствуетв вашем хранилище.
Если вы не сделали никаких дальнейших коммитов, вы можете восстановить конфликты слияния в определенном файле с помощью этой команды:
git checkout --merge -- that/particular/file
Конечно, это также возвращаетконфликты в этом файле, которые вы уже разрешили.Невозможно сохранить их и восстановить нерешенную часть.(Все это не влияет на конфликты - разрешенные или нет - в других файлах.)
Если все не удается, у вас все еще есть доступный тайник, ивы можете начать заново со всеми конфликтами слияния во всех файлах:
git reset --hard # warning! erases all your uncommitted changes
git stash apply # recover the stash and all its conflicts
Несмотря на то, что вы сказали git stash pop
, что тайник не был потерян, потому что Git на самом деле не «выкидывает» его, когда возникают конфликты слияния.Это дает вам еще одну возможность сказать: git stash apply
.
. Если бы я был на вашем месте, я бы сделал следующее (немного экспертное использование):
git commit -a # keep a record of what I have done so far
git reset --hard HEAD~ # go back before the commit to start over
git stash apply
git checkout --merge -- that/particular/file
git rerere forget -- that/particular/file
Вы можете заметить, чтоGit запоминает разрешения слияния, которые были зафиксированы на локальном компьютере, чтобы помочь при повторении слияния.Это немного неловко, потому что он запоминает и повторно использует неправильное разрешение в that/particular/file
.Поэтому я прошу Git забыть разрешение, используя git rerere forget
.