Sospetto che tu sia confuso qui perché è fondamentalmente confuso. A peggiorare le cose, l'intera roba nostra / loro cambia ruolo (diventa all'indietro) quando stai facendo un rebase.
In definitiva, nel corso di una git merge
, il ramo "nostro" si riferisce al ramo si sta fondendo in :
git checkout merge-into-ours
e il ramo "loro" si riferisce al ramo (singolo) che stai unendo:
git merge from-theirs
e qui "nostra" e "loro" fa un certo senso, come anche se "loro" è probabilmente la vostra in ogni caso, "loro" non è quello che eri su quando è stato eseguito git merge
.
Mentre l'utilizzo del nome del ramo effettivo potrebbe essere piuttosto interessante, cade a pezzi in casi più complessi. Ad esempio, invece di quanto sopra, potresti fare:
git checkout ours
git merge 1234567
dove stai unendo per commit-ID non elaborato. Peggio ancora, puoi persino farlo:
git checkout 7777777 # detach HEAD
git merge 1234567 # do a test merge
nel qual caso non ci sono non nomi filiali coinvolte!
Penso che sia di scarso aiuto qui, ma in effetti, nella gitrevisions
sintassi , puoi fare riferimento a un singolo percorso nell'indice in base al numero, durante un'unione in conflitto
git show :1:README
git show :2:README
git show :3:README
Lo stage n. 1 è l'antenato comune dei file, lo stage n. 2 è la versione del ramo di destinazione e lo stage n. 3 è la versione da cui si stanno fondendo.
Il motivo per cui le nozioni "nostre" e "loro" vengono scambiate durante rebase
questa fase è che rebase funziona eseguendo una serie di selezioni di ciliegie, in un ramo anonimo (modalità HEAD staccata). Il ramo target è il ramo anonimo e il ramo Merge-from è il ramo originale (pre-rebase): quindi "--ours" significa che un rebase anonimo sta costruendo mentre "--theirs" significa "il nostro ramo in fase di rebasing" .
Per quanto riguarda la voce gitattributes: potrebbe avere un effetto: "nostro" significa davvero "usa la fase 2" internamente. Ma come notate, al momento non è in atto, quindi non dovrebbe avere un effetto qui ... beh, a meno che non lo copiate nell'albero di lavoro prima di iniziare.
Inoltre, questo vale per tutti i nostri e nostri usi, ma alcuni sono a livello di file intero ( -s ours
per una strategia di unione; git checkout --ours
durante un conflitto di unione) e alcuni sono su base pezzo per pezzo ( -X ours
o -X theirs
durante un-s recursive
merge). Il che probabilmente non aiuta con nessuna confusione.
Non ho mai trovato un nome migliore per questi, però. E: vedi la risposta di VonC a un'altra domanda, dove git mergetool
introduce ancora più nomi per questi, chiamandoli "locali" e "remoti"!