Как я могу проверить разрешения 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
Другие вопросы по тегам