Git слияние конфликтов в ретроспективе, понимание конфликтных решений - PullRequest
0 голосов
/ 19 апреля 2020

Я провел здесь несколько часов на днях, когда коллега сделал merge из master-branch в feature-branch, над которым мы работаем, и я помню, как видел несколько дней назад, что Были конфликты в 2 файлах. Я / мы используем smart git и, как правило, во время процесса merge (насколько я помню) в сообщении фиксации записывается, какие файлы конфликтуют с лидирующей "#" в начале. Это означает, что человек, имеющий дело с конфликтом, знает, какие файлы находятся в конфликте, и он с этим справится, изменит сообщение коммита и отправит изменения на сервер. Но люди после merge не знают, какие файлы конфликтовали (потому что об этом позаботился тот, кто нажал merge-commit). Поскольку у нас были проблемы с компиляцией и обнаружены ошибки в некоторых файлах, я попытался понять, было ли это из-за (а) неправильной обработки merge-conflict или (б) чего-то другого. Я пытался найти решение, которое бы быстро и легко позволило мне увидеть:

  1. Какие файлы находились в конфликте во время merge?
  2. Какое именно решение merge conflict было взято (для файлов из вопроса 1, как вы знаете, многие другие файлы также изменятся ...)?
  3. Исходя из 2 приведенных выше ответов, я бы сразу узнал во время компиляции, были ли проблемы со сборкой вызваны некорректно merge-conflict -обработка ... Я просто хочу быстро "исключить" и узнать, вызваны ли ошибки компиляции случайно неверными merge -решениями или нет ...

Когда много файлов merged, все просто усложняется (потому что многие файлы имеют / будут изменены сразу). У меня есть «частичное решение» здесь (это не «реальное» решение), но я вижу его как довольно долгий путь:

  1. Я мог бы checkout коммит, как раз перед merge.
  2. Тогда попробуй сделать merge сам. Это сообщит мне конфликтующие файлы.
  3. Я мог бы записать эти имена файлов во временный файл (включая расположение конфликтов тоже, чтобы я мог отличить guish его от "неконфликтующих" различий) в тех же самых файлах!).
  4. Затем checkout HEAD снова (где я был, отбрасывая лишние "локальные" merge из шага 2, так что я вернулся к нажатому merge -коммиту ).
  5. Затем diff HEAD shaXX с коммитом, перед merge, для только тех конфликтующих имен файлов, которые я записал ...
  6. И тогда я бы понял, какое решение по урегулированию конфликта было / было принято после merge conflict разрешения ...

Но это много ручных шагов и ручной работы, не очень автоматизированных ... Также Этот метод подразумевает отображение различий между файлами, в которых есть конфликты, т.е. он показывает все различий, где меня интересует только просмотр "merge-conflict решений о разрешении" - я могу рисковать тратить свое время, глядя на сотни несущественных диф fs, имея ввиду этот метод, мне все еще немного неясно, какие merge-conflict решения были приняты (если только я не очень тщательно это записал, когда попытался выполнить слияние самостоятельно, после того, как оно было передано) .. Поэтому мой вопрос: существует ли лучший (= более автоматизированный) метод и как?

...