Восстановите файл _remote_ после разрешения конфликта слияния, используя - PullRequest
1 голос
/ 17 мая 2019

Я сделал несколько изменений в моих локальных файлах в параллельной ветке.Я использовал git stash, чтобы сохранить свои изменения и передать другие изменения в мастер, не нажимая онлайн.Поэтому мне пришлось решить некоторые конфликты слияния из-за файлов избыточных файлов.Шаг за шагом, это мой код на git bash:

git stash
git pull origin master
git stash pop
git mergetool

Я решил конфликт с одним файлом myFile.py, используя meld в качестве mergetool.Моя проблема в том, что я забыл огромную часть кода в удаленном файле (myFile_remote_7572.py) во время шага слияния.Сейчас я нигде не могу найти файл на своем ноутбуке.Я хочу восстановить его, чтобы найти мой последний код, не перезапуская шаг слияния.Спасибо ...

1 Ответ

1 голос
/ 17 мая 2019

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

Содержимое все еще присутствуетв вашем хранилище.

Если вы не сделали никаких дальнейших коммитов, вы можете восстановить конфликты слияния в определенном файле с помощью этой команды:

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.

...