web-dev-qa-db-fra.com

Écraser tous mes engagements en un seul pour la demande de pull GitHub

J'ai fait une demande de pull sur GitHub. Maintenant, le propriétaire du référentiel dit de réduire tous les commits en un seul.

Quand je tape git rebase -i Le bloc-notes s'ouvre avec le contenu suivant:

noop

# Rebase 0b13622..0b13622 onto 0b13622
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using Shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

J'ai cherché sur Google mais je ne comprends pas comment faire ça.

53
omerjerk

Juste un simple ajout pour aider quelqu'un d'autre à la recherche de cette solution. Vous pouvez transmettre le nombre de validations précédentes que vous souhaitez écraser. par exemple,

git rebase -i HEAD~3 

Cela fera apparaître les 3 derniers commits dans l'éditeur.

46
fontno

ok je l'ai compris ... J'ai d'abord dû écrire git rebase -i xxxxxxxxxxxxxxxx où xxxxxxxxxx est le SHA du commit jusqu'à ce que je dois écraser. Ensuite, dans le Bloc-notes, j'ai édité le premier en tant que sélection et reste de tout en squash. Ensuite, une nouvelle fenêtre de bloc-notes apparaîtra et là, dans la première ligne, j'ai tapé le nom de mon nouveau commit. Et puis j'ai dû faire un push de force:

git Push --force Origin master
36
omerjerk

Depuis le 1er avril 2016 , le gestionnaire du référentiel peut écraser toutes les validations d'une demande de tirage en une seule validation en sélectionnant "Squash and merge" sur une demande de tirage.

Squash and merge option

Si vous souhaitez écraser manuellement les validations dans une demande de pull, reportez-vous à réponse de fontno .

9
Stevoisiak

Essayez git rebase -i, et utilisez 'squash' pour toutes les validations que vous souhaitez écraser.

Modifier:

git rebase -i vous montrera un éditeur interactif avec la liste des validations que vous rebaserez. La commande par défaut avant chaque commit est "pick", il vous suffit donc de s/pick/squash/pour tous les commits que vous souhaitez squash, puis tous seront squash dans leur dernier commit précédent.

Assurez-vous de rebaser sur une branche correcte.

6
Cong Wang