Вы не можете спрятать незафиксированное слияние. Вариант 1 немедленно исключается из списка.
С точки зрения чистой истории лучше всего использовать вариант 2. Git обладает способностью запоминать разрешения конфликтов; это просто отключено по умолчанию. Вы можете включить его: git config --global rerere.enabled
. Разрешайте конфликты по желанию. Обычно вы выполняете слияние, а Git записывает способ разрешения конфликтов. Поскольку вы на самом деле еще не хотите совершать слияние, вы можете просто запустить git rerere
, чтобы немедленно записать разрешения конфликтов без фиксации. (В качестве альтернативы, если вы продолжили и совершили слияние, вы могли бы просто git reset --hard HEAD^
, сбросив до него. Разрешение конфликта все равно будет запомнено.)
Затем можно устранить проблему в ветви A и повторить слияние. Git будет re использовать re проводной конфликт re . Он по-прежнему будет помечен как необработанный, так что у вас будет возможность просмотреть его и убедиться, что он все сделал правильно, перед запуском git add
по незатронутым путям и совершением слияния.
И мне неясно, какой вариант на самом деле. Зачем тебе вишня? Похоже, что foo.c
нарушается только в ветви A, в которую вы сливаетесь, поэтому все это будет в пределах ветви A. Желаемая история - это исправление с последующим слиянием; если вместо этого вы продолжите слияние, а затем исправите проблему, вы просто переключаете порядок двух коммитов. В любом случае, нет необходимости иметь дублирующие коммиты - я могу помочь избежать этого, если вы укажете!