Quand git rebase aura-t-il un conflit?
J'ai lu plusieurs articles sur ce forum, progit, Youtube et quelques blogs aléatoires pour rebase.
La forme la plus générale pour conclure ce sujet est:
- A - B - C Master
\ D - E Topic
et j'exécute:
git checkout Topic
git rebase Master
Idéalement, ce serait:
- A - B - C - D' - E' Master, Topic
Mais les 2 préoccupations sont:
- Est-ce que D '= D, E' = E?
- Qu'est-ce que le conflit git rebase?
En ce qui concerne la première préoccupation et ce post ,
- Rebase fait la fusion sur D et E, et surtout, avec une entrée compliquée.
Par exemple, quand ça passe à D, selon le post et si j'ai raison
- HEAD détaché de C
- Git compare les changements de A à D et les changements de A à C
- Après la fusion, git compare entre D ', D et E
Et cela me déroute le plus. Pourquoi la fusion implique-t-elle plus de 2 commits? Aussi, comment apparaît un conflit?
ÉDITER:
Ran quelques commandes, veuillez voir ce qui suit:
git init
Création d'un contenu Random.txt: Master 1
git add Random.txt
git commit -m "Master 1"
Créer une nouvelle branche
git checkout -b rebase_conflict
Contenu Alter Random.txt: 1
git add Random.txt
git commit -m "Conflict 1"
Alter Random. Contenu txt: 2
git add Random.txt
git commit -m "Conflict 1"
Passer au maître
git checkout master
Contenu Alter Random.txt: Master 2
git add Random.txt
git commit -m "Master 2"
Changer de branche et rebase
git checkout rebase_conflict
git rebase master
Obtenir l'erreur de conflit Alter Random.txt Content: 1
git add Random.txt
git rebase --continue
À ce stade, je m'attends à un autre conflit de rebase, car selon la logique
-- Master 1 -- Master 2
\ -- Conflict 1 -- Conflict 2
Après le premier rebase
-- Master 1 -- Master 2 -- Conflict 1'
\ -- Conflict 1 -- Conflict 2
A ce stade, j'attends un nouveau commit en plus de Conflict 1 '. N'y a-t-il pas un conflit de fusion entre le conflit 2 et le conflit 1 '?
Parce que Conflit 1 'Contenu aléatoire.txt: 1, alors que
Conflit 2 Contenu aléatoire.txt: 2
Ils changent la même ligne, n'est-ce pas?
Réponses
La fusion ou le rebasage dans votre exemple ci-dessus peut entraîner des conflits de fusion. Il est possible que seul l'un ou l'autre ait également des conflits. Pour comprendre ce que fait le rebasage, considérez le diagramme suivant qui montre à quoi Topicressemblerait le rebasage Master:
Topic: -- A -- B -- C -- D' -- E'
Ici, les apostrophes indiquent que les commits Det Eont été réappliqués sur la nouvelle base de Master. Lorsque chaque validation est réappliquée, il existe un risque de conflits de fusion. Ainsi, dans le cas de la réapplication de N commits, il pourrait y avoir N ensembles de conflits de fusion. D'un autre côté, une fusion entraînerait toujours au plus un ensemble de conflits de fusion. Si cela vous préoccupe, vous pourriez préférer la fusion au rebasage.