Quando git rebase avrà un conflitto?

Sep 28 2020

Ho letto diversi post su questo forum, progit, Youtube e alcuni blog casuali per rebase.

La forma più generale per concludere questo argomento è:

- A - B - C   Master
   \  D - E Topic

ed eseguo:

git checkout Topic
git rebase Master

Idealmente, sarebbe:

- A - B - C - D' - E' Master, Topic

Ma le 2 preoccupazioni sono:

  1. D '= D, E' = E?
  2. Cos'è il conflitto git rebase?

Per quanto riguarda la prima preoccupazione e questo post ,

  1. Rebase fa la fusione su D ed E, e soprattutto, con input complicati.

Ad esempio, quando va a D, secondo il post e se ho ragione

  1. TESTA staccata a C
  2. Git confronta le modifiche da A a D e le modifiche da A a C.
  3. Dopo l'unione, git confronta D ', D ed E

E questo mi confonde di più. Perché l'unione coinvolge più di 2 commit? Inoltre, come appare un conflitto?

MODIFICARE:

Ha eseguito alcuni comandi, vedere quanto segue:

git init

Creato un contenuto Random.txt: Master 1

git add Random.txt
git commit -m "Master 1"

Crea nuovo ramo

git checkout -b rebase_conflict

Alterare il contenuto Random.txt: 1

git add Random.txt
git commit -m "Conflict 1"

Alter Random. Contenuto txt: 2

git add Random.txt
git commit -m "Conflict 1"

Passa al master

git checkout master

Alterare il contenuto Random.txt: Master 2

git add Random.txt
git commit -m "Master 2"

Cambia branch e rebase

git checkout rebase_conflict
git rebase master

Ottieni errore di conflitto Alter Random.txt Content: 1

git add Random.txt
git rebase --continue

A questo punto, mi aspetto un altro conflitto rebase, perché secondo la logica

-- Master 1 -- Master 2
  \ -- Conflict 1 -- Conflict 2

Dopo il primo rebase

-- Master 1 -- Master 2 -- Conflict 1'
 \ -- Conflict 1 -- Conflict 2

In questa fase mi aspetto un nuovo commit in aggiunta a Conflict 1 '. Non c'è un conflitto di unione tra Conflict 2 e Conflict 1 '?

Perché Conflict 1 'Random.txt content: 1, mentre

Conflitto 2 Contenuti casuali.txt: 2

Cambiano la stessa linea, non è vero?

Risposte

TimBiegeleisen Sep 28 2020 at 20:27

L'unione o il rebasing nell'esempio precedente può causare conflitti di unione. È possibile che anche solo l'uno o l'altro abbia dei conflitti. Per capire cosa fa il rebase, considera il diagramma seguente che mostra come Topicapparirebbe dopo il rebase su Master:

Topic:  -- A -- B -- C -- D' -- E'

Qui gli apostrofi indicano che i commit De Esono stati riapplicati alla nuova base di Master. Quando ogni commit viene riapplicato, esiste la possibilità di conflitti di unione. Quindi, nel caso di riapplicare N commit, potrebbero esserci N set di conflitti di unione. D'altra parte, un'unione comporterebbe sempre al massimo un insieme di conflitti di unione. Se questa è una tua preoccupazione, potresti preferire l'unione al ribasamento.