/ / Comment 'git rebase' et 'git pull' fonctionnent-ils ensemble? - git

Comment «git rebase» et «git pull» fonctionnent-ils ensemble? - git

Je comprends que "git rebase" abandonne une partie deles commits. Ainsi, si un développeur le fait et envoie les modifications à un référentiel distant, cela signifie-t-il que ces validations seraient également supprimées du référentiel distant?

Et quand un autre développeur "git tire", ces commits seraient-ils également supprimés de son dépôt local?

Réponses:

2 pour la réponse № 1

Rebase n'abandonne pas certains commits, à moins que vous ne fassiez un rebasement interactif et supprimiez explicitement certains commits. Plutôt faire un git pull avec une stratégie de rebase fait le contraire; il conserve tous les commits de votre branche locale lors de la mise à jour avec les modifications de la branche distante.

Une image vaut mille mots ici. Vous trouverez ci-dessous un diagramme montrant à quoi ressemblerait une branche locale avant et après un tirage sur git via rebase.

remote: ... A -- B -- C

local:        D -- E

Initialement, l'ancêtre le plus récent est Aet depuis ce moment, vos agences locales et distantes ont divergé par 2 commits chacun. Si tu devais courir git status, Git vous dirait que votre branche est 2 commits derrière et 2 devant sa contrepartie distante. Maintenant, faites un pull via rebase:

git pull --rebase origin your_branch

Après le pull, le diagramme ressemble à ceci:

remote: ... A -- B -- C

local:                  D" -- E"

Notez que les deux premiers commits de votre branche locale sont toujours D et E, dans cet ordre. Mais maintenant, votre travail repose sur la version distante de la branche. C'est pourquoi la commande s'appelle "rebaser", car elle donne à votre branche une nouvelle base lors du tirage.

Faire un pull via rebase revient en juxtaposition à faire une normale git pull via une fusion. Si vous aviez fusionné la branche distante dans votre branche locale, vous vous retrouveriez avec ceci:

remote: ... A -- B -- C
         
local:        D -- E -- M

Maintenant la télécommande commet B et C n'apparaissent pas directement dans l'historique de votre succursale. Au lieu de cela, il vous reste un commit de fusion (M dans le diagramme ci-dessus). En d’autres termes, tirer par la fusion tend à consolider les commits, tandis que le rebasement tend à préfigurer l’histoire.


0 pour la réponse № 2

Réponse longue courte, git rebase (par quelqu'un d'autre) suivi de git pull (par vous) n’a probablement pas été quelque chose que vous voulez faire, envisagez généralement de ne pas vous baser sur une branche partagée à moins d’être sûr de ce que vous faites.

Supposons que la branche sur laquelle vous travaillez n’est pas un maître (ne rebase jamais sur le maître), c’est toujours un partagé branche. Typiquement rebase réécrit histoire / SHA des commits, si quelqu'un réécrit l'histoire, une Obliger push est nécessaire, alors qu’il est courant de forcer push vers une branche privée (par exemple, la vôtre), ce n’est pas le cas pour une branche publique.

Si vous voulez coller avec la stratégie de base sur une branche partagée, une stratégie commune utilise git pull --rebase ou git rebase origin/<local_branch> # instead of origin/masterDe cette façon, rebase ne réécrit plus l’historique, il est donc sûr à utiliser, même s’il est un peu différent de ce pour quoi il a été conçu.