Quando o git rebase terá conflito?

Sep 28 2020

Tenho lido vários posts neste fórum, progit, Youtube e alguns blogs aleatórios para rebase.

A forma mais geral de concluir este assunto é:

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

e eu realizo:

git checkout Topic
git rebase Master

Idealmente, seria:

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

Mas as 2 preocupações são:

  1. D '= D, E' = E?
  2. O que é conflito de rebase git?

Em relação à primeira preocupação e esta postagem ,

  1. Rebase faz mesclagem em D e E, e acima de tudo, com entrada complicada.

Por exemplo, quando vai para D, de acordo com a postagem e se estou certo

  1. HEAD desvinculado de C
  2. Git compara as mudanças de A para D e mudanças de A para C
  3. Após a fusão, git compara entre D ', D e E

E isso me confunde mais. Por que o merge envolve mais de 2 commits? Além disso, como um conflito aparece?

EDITAR:

Executou alguns comandos, consulte o seguinte:

git init

Criou um conteúdo Random.txt: Mestre 1

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

Criar nova filial

git checkout -b rebase_conflict

Alterar conteúdo de Random.txt: 1

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

Alter Random. Conteúdo txt: 2

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

Mudar para mestre

git checkout master

Alterar conteúdo de Random.txt: Mestre 2

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

Mudar de branch e rebase

git checkout rebase_conflict
git rebase master

Obter erro de conflito Alter Random.txt Conteúdo: 1

git add Random.txt
git rebase --continue

Neste ponto, espero outro conflito de rebase, porque de acordo com a lógica

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

Após o primeiro rebase

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

Neste estágio, estou esperando um novo commit no topo do Conflito 1 '. Não há um conflito de mesclagem entre o Conflito 2 e o Conflito 1 '?

Porque Conflito 1 'conteúdo Random.txt: 1, enquanto

Conteúdo do Conflito 2 Random.txt: 2

Eles mudam a mesma linha, não é?

Respostas

TimBiegeleisen Sep 28 2020 at 20:27

Mesclar ou rebasing em seu exemplo acima pode resultar em conflitos de mesclagem. É possível que apenas um ou outro também tenha conflitos. Para entender o que o rebase faz, considere o diagrama a seguir, que mostra como Topicseria após o rebase Master:

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

Aqui, os apóstrofos indicam que os commits De Eforam reaplicados na nova base de Master. Conforme cada confirmação é reaplicada, existe a chance de conflitos de mesclagem. Portanto, no caso de reaplicar N commits, pode haver N conjuntos de conflitos de mesclagem. Por outro lado, uma mesclagem sempre resultaria em no máximo um conjunto de conflitos de mesclagem. Se isso for uma preocupação sua, você pode preferir a fusão em vez de rebase.