Концепция «... совсем нужна информация, содержащаяся в B
...» не особо понятна. Но, возможно, понимая, что происходит под капотом в git merge
поможет вам ответить на свой вопрос ...
Учитывая ваше описал дерево, и ваш описанный метод получения там (git checkout master; git merge alt
- хотя вы должны знать, что это не вызывает alt
также указывать на D
, поэтому ваше утверждение о том, что содержит ошибку D
, неверно, если вы не сделали что-то еще, чтобы повлиять на это), происходит то, что git merge
находит A
в качестве базы слияния. Затем он создает дельты между A
и C
(кончик предварительного слияния master
) и между A
и B'
(кончик alt
), а затем пытается скомбинировать эти две дельты и применить объединенную дельта к A
- это новое состояние становится D
. Если две ветви дельта не могут быть объединены чистой, тогда у вас есть конфликт - наиболее вероятная причина для этого состоит в том, что B'
изменил некоторые строки, которые также были изменены либо в B
, либо в C
, но не таким же образом.
Так, строго говоря, нет, git
не смотрит конкретно на фиксацию B
во время процесса слияния; Однако, поскольку изменения, вносимые B
присутствуют также в C
(в той степени, что C
не отменить их, во всяком случае), то «информация, найденная в B
» является «используется» в некотором смысле ...
Вот может быть, еще один способ выразить это: если вы использовали rebase для сквоша B и C вместе, может ли это изменить значение слияния? – Schwern