Я підозрюю, що вас тут плутають, оскільки це принципово заплутано. Щоб зробити щось гірше, весь наш / їхній матеріал перемикає ролі (стає назад), коли ви робите ребауз.
В кінцевому рахунку, під час git merge
, філія «наш» відноситься до галузі ви зливаючись в :
git checkout merge-into-ours
а гілка "їхня" посилається на (одну) гілку, яку ви об'єднуєте:
git merge from-theirs
і тут «наші» і «чужих» має певний сенс, тому що навіть якщо «їх», ймовірно , ваш так чи інакше, «їх» не один ти на коли ви запускали git merge
.
Хоча використання фактичної назви гілки може бути досить крутим, вона розпадається в більш складних випадках. Наприклад, замість вищезазначеного, ви можете:
git checkout ours
git merge 1234567
де ви об’єднуєтесь із необробленим ідентифікатором комісії. Гірше, ви навіть можете це зробити:
git checkout 7777777 # detach HEAD
git merge 1234567 # do a test merge
в такому випадку немає назв філій!
Я думаю, що це мало допомагає, але насправді в gitrevisions
синтаксисі ви можете посилатися на окремий шлях в індексі за кількістю під час конфліктного злиття
git show :1:README
git show :2:README
git show :3:README
Етап №1 є загальним предком файлів, етап №2 - версія цільової гілки, а етап №3 - версія, з якої ви зливаєтеся.
Причина, по якій поняття "наші" та "їхні" замінюються, rebase
полягає в тому, що робота по ребайзі здійснюється, роблячи серію вишеньки, в анонімну гілку (режим окремої HEAD). Цільова гілка - це анонімна гілка, і гілка злиття з вашою є оригінальною гілкою (попередньою реструктуризацією): тому "--ours" означає, що анонімне одне ребауз будується, тоді як "- їх" означає ", щоб наша гілка була відновлена" .
Щодо запису gitattributes: він може мати ефект: "наш" насправді означає "використовувати етап №2" внутрішньо. Але, як ви зазначаєте, він фактично не встановлений на той час, тому він не повинен мати ефекту тут ... ну, хіба що, якщо ви не скопіюєте його до робочого дерева перед початком роботи.
Також, до речі, це стосується всіх наших та їхніх цілей використання, але деякі знаходяться на цілому рівні файлів ( -s ours
для стратегії злиття; git checkout --ours
під час конфлікту злиття), а деякі - по деталях ( -X ours
або -X theirs
під час -s recursive
злиття). Що, мабуть, не допомагає жодної плутанини.
Я ніколи не придумав кращого імені для цих, хоча. І: див . Відповідь VonC на інше питання, де git mergetool
представлено ще більше назв для них, називаючи їх "локальними" та "віддаленими"!