Звучит так, как будто это может произойти, это то, что вы изменили историю коммитов этих «повторных» коммитов, так что они имеют другой sha1. Каждый sha1 уникален не только для фиксации, но и для истории фиксации. Следовательно, невозможно (ну, очень маловероятно, чтобы это произошло в течение жизни вселенной), иметь два идентичных sha1 в одной истории или даже два sha1 в двух разных историях. Если вы измените что-либо в своем коммите, например, с помощью изменения или интерактивной перебазировки, вы измените sha1. Таким образом, два коммита, которые могут выглядеть одинаково, на самом деле обрабатываются по-разному.
Скорее всего, вы перебазировали из другой ветки, сделали какой-то тип интерактивной перебазировки или внесли изменения в коммиты, продолжили фиксировать еще немного кода, который изменил ту же часть кода, а затем при следующей перебазировке возникнут конфликты, потому что Коммиты, которые у вас есть в вашей локальной ветке, которые отличаются от ветки, из которой вы перебираете, удаляются из ветви, апстрим включается, включая тот коммит, который вы уже вытащили, и изменил sha1, а затем, когда коммиты воспроизводятся в ветке вы столкнетесь с конфликтом, потому что состояние кода изменилось по сравнению с тем, что ожидалось, потому что он изначально был создан из другой истории, чем то, что вы сейчас имеете в своей ветке. Вау, это было длинное предложение ...
Когда вы «очищаете» список выбора ... то, что вы делаете, скорее всего, удаляет эти повторные коммиты перед перебазированием, так что теперь вы не применяете изменения, которые уже были применены, поэтому больше нет конфликтов.
Однако, если вы просто хотите разрешить конфликты во время перебазирования, это, вероятно, будет лучшим выбором, чтобы вы случайно не удалили коммит, который хотите. Разрешение конфликтов сделает набор изменений этого коммита отличным, применимым к вашей истории. После того как вы нажмете это разрешение конфликта слияния, вы больше не увидите проблем, если не измените коммиты, которые уже были переданы снова.
Чтобы найти, какие файлы имеют конфликты слияния, выполните:
git status
или
git ls-files -u
Как только вы знаете, какие файлы имеют конфликты, если у вас есть настройка mergetool, вы можете сделать:
git mergetool <file>
Если вы предпочитаете выполнять слияние вручную, вы можете найти маркеры слияния и строки, выполнив:
grep -Hnr '^=\{7\}\|^<\{7\}\|^>\{7\}' *
на верхнем уровне вашего пути репо и редактируйте. Когда вы редактируете вручную, убедитесь, что вы удалили маркеры и сделали так, чтобы окончательная версия файла выглядела так, как вы хотите ... git не делает ничего особенного с маркерами для вас. Когда вы закончите редактирование вручную, обязательно наберите
git add <file>
чтобы добавить файл, добавить его в индекс и убрать необъединенный флаг. Когда вы закончите разрешать все неотправленные файлы, выполните
git rebase --continue
Для завершения перебазирования.