Je viens de faire un git pull --rebase origin master
et il y a eu un conflit.
Premièrement, ce conflit était dans un fichier que je n'avais pas touché, et était d'environ 10 commits en retour. Pourquoi cela arrive-t-il?
J'ai alors tapé accidentellement git rebase --skip
, et il «a sauté ce patch».
Inquiet d'avoir sauté un commit, j'ai vérifié une nouvelle version de la branche master et j'ai fait une différence entre la branche sur laquelle j'ai fait le rebase et la nouvelle branche master. Les seuls changements qui apparaissent dans la différence sont le dernier commit, et en regardant le journal, le patch qui a été «ignoré» apparaît dans l'historique des commit.
Quelqu'un peut-il expliquer ce qui se passe ici?
git rebase --skip
. À tort peut-être? :)Réponses:
Il fait ce qu'il dit, il saute un commit. Si vous exécutez
rebase --abort
un conflit ultérieur au cours du même rebase, le commit ignoré sera bien sûr également annulé.Si votre changement existait déjà en amont, Git ne pourra pas appliquer votre commit (mais devrait généralement l'ignorer automatiquement, si le correctif est exactement le même). Votre propre commit sera ignoré, mais le changement existera toujours dans HEAD actuel, car il a déjà été appliqué en amont.
Vous devez vraiment vous assurer que vous n'avez pas supprimé un changement important de votre part;) (utilisez le reflog pour revenir à l'état avant le rebase)
la source
--skip
soit la voie à suivre. Skip ignorera complètement un commit, abandonnant toutes les modifications apportées dans ce commit.git rebase
à copier des commits d'une branche vers une autre branche. Ainsi, lorsque vous sautez un commit, le contenu original du commit est ignoré et le correctif n'est pas appliqué (donc toutes les modifications apportées à un fichier ne le feront pas dans votre branche cible). Le moyen le plus simple est de configurer un référentiel git simple avec deux branches, plusieurs commits sur chacun d'eux, puis d'essayer de rebase et de sauter un commit (vous pouvez utilisergit rebase --interactive
pour spécifier quels commits seront copiés (pick
) ou ignorés (skip
)