Как я могу проверить разрешения git rerere?
Фон
В настоящее время я разрешаю конфликт слияния с включенным git rerere. git status
показывает один необработанный путь. Когда я просматриваю файл, там нет <<<<<<< HEAD
или же >>>>>>> <SHA>
маркеры, идентифицирующие конфликт, который говорит мне, что rerere сделал свою работу и разрешил конфликт в соответствии с тем, как я делал это в прошлом.
Я хотел бы подтвердить, что решения Rerere являются правильными.
Процесс слияния, над которым я работаю, очень сложный, включающий несколько пультов, вносящих вклад в ядро Linux. Вчера я провел тестовое слияние нескольких пультов с целью выявления конфликтов, уведомления сопровождающих, а затем отбрасывания получающегося (наверняка сломанного) ядра. При этом я сделал пару небрежных разрешений конфликтов, чтобы просто перейти к следующему пульту, и позвонил git rerere forget <pathspec>
на всех противоречивых путях после того, как я закончил, включая тот, с которым я сейчас имею дело. Поскольку я сказал rerere забыть об этом пути, я не знаю, почему он что-то решил в этом сеансе, и я обеспокоен тем, что он применил то исправление, которое я сделал вчера, когда мне было все равно, был ли результат правильным.
Вопрос
Есть ли способ узнать, какие конфликты разрешаются после того, как он уже применил резолюцию?
Я хотел бы избежать перезапуска слияния, потому что это длительный процесс, который мы еще не полностью автоматизировали. Кроме того, поскольку я пытался заставить rerere забыть об этом пути вчера, и, тем не менее, он по-прежнему применял резолюцию сегодня, я думаю, что я просто оказался бы в том же положении, если бы я не понял, почему git rerere forget <pathspec>
не удалось первым.
Смежные вопросы
Отменить разрешение git rerere, выполненное в rebase <- решение требует перезапуска слияния
Есть ли минусы для включения git rerere? <- только обсуждает git rerere forget <pathspec>
Follow Up Примечание / Вопрос
Я просто попытался войти git rerere forget
без указания пути, который, как я знаю, устарел, но если я правильно понял, следует заставить rerere забыть все разрешения. Я перезапустил слияние, и оно все еще применило разрешение к файлу. Я также полностью отключил rerere и выполнил слияние в третий раз, чтобы я мог видеть конфликт, и rerere действительно применял нерешительные резолюции, которые я сделал вчера. Почему forget
не правильно отбрасывать разрешение, которое я не хочу использовать повторно?
1 ответ
Вы можете переключиться на результат unrerere'd слияния с
git checkout -m path/to/file
а затем повторно применить его с
git rerere
Что касается проблем с забытием, вы делали это, когда конфликт был еще активным? Forget применяется к "текущему конфликту в
$ git checkout master^1 Warning: you are leaving 1 commit behind, not connected to any of your branches: 9e2db79 test3 HEAD is now at ca1fca7... Make a change to file (on master) $ git merge master^2 Auto-merging file.txt CONFLICT (content): Merge conflict in file.txt Resolved 'file.txt' using previous resolution. Automatic merge failed; fix conflicts and then commit the result. $ git rerere forget file.txt Updated preimage for 'file.txt' Forgot resolution for file.txt $ vi file.txt # old resolution's still in the worktree $ git checkout -m file.txt # now it's gone there too