1348 votes

Comment est-ce que je peux combiner les deux s’engage en un seul ?

Je suis en train de fusionner 2 s'engage en 1, j'ai donc suivi “à l'écraser s'engage avec rebase” à partir de git prêt.

J'ai couru

git rebase --interactive HEAD~2

Dans le résultat de l'éditeur, je change pick de squash puis enregistrez-cesser de fumer, mais cela échoue avec l'erreur

Ne peut pas "squash" sans une précédente livraison

Maintenant que mon travail l'arbre a atteint cet état, je vais avoir des difficultés à récupérer. La commande git rebase --interactive HEAD~2 d'échec avec

Rebase interactif déjà commencé

et git rebase --continue d'échec avec

Ne peut pas "squash" sans une précédente livraison

1945voto

Greg Bacon Points 50449

Revenir à l'endroit où vous avez commencé

$ git rebase --abort

Dire que votre histoire est

$ git log --pretty=oneline
a931ac7c808e2471b22b5bd20f0cad046b1c5d0d c
b76d157d507e819d7511132bdb5a80dd421d854f b
df239176e1a2ffac927d8b496ea00d5488481db5 un

Qui est, a été le premier à valider, puis b, et enfin c.

L'exécution git rebase --interactive HEAD~2 vous donne un éditeur de texte avec

choisissez b76d157 b
choisissez a931ac7 c

# Rebase df23917..a931ac7 sur df23917
#
# Les commandes:
# p, choisir = utiliser commettre
# r, reformuler = utiliser la livraison, mais modifier le message de commit
# e, edit = utiliser commit, mais arrêtez de modification
# s, squash = utiliser la livraison, mais se fondre dans la précédente livraison
# f, de correction = comme "squash", mais jetez ce commit du message de journal
#
# Si vous supprimez une ligne de ici QUE COMMIT SERA PERDU.
# Toutefois, si vous supprimez tout, cela sera annulée.
#

Changement de b en pick de squash entraînera l'erreur que vous avez vu, mais si, au contraire, squash c en b en changeant le texte de

choisissez b76d157 b
s a931ac7 c

et enregistrez-cesser de votre éditeur, vous aurez une autre éditeur dont le contenu est

# C'est une combinaison de 2 commits.
# Le premier commit message:

b

# C'est le 2ème message de commit:

c

Lorsque vous enregistrez et quittez, le contenu du fichier édité en devenir message de validation de la nouvelle commettre:

$ git log --pretty=oneline
18fd73d3ce748f2a58d1b566c03dd9dafe0b6b4f b et c
df239176e1a2ffac927d8b496ea00d5488481db5 un

505voto

user3828059 Points 51

S'il y a plusieurs validations, vous pouvez utiliser 'get rebase -i' pour écraser deux validations en une seule.

S'il reste seulement deux validations, les commandes suivantes peuvent être utilisées pour combiner les deux commit en un:

 git reset --soft HEAD^
git commit --amend
 

60voto

Haimei Points 328

D'abord, vous devez vérifier le nombre de commits que vous avez:

git log

Il y a deux statut:

L'une est qu'il y a seulement deux s'engage à:

Par exemple:

commit A
commit B

(Dans ce cas, vous ne pouvez pas utiliser la commande git rebase à faire), vous devez effectuer les opérations suivantes.

$ git reset --soft HEAD^1

$ git commit --amend

Une autre est qu'il y a plus de deux commits; vous souhaitez fusionner commettre C et D.

Par exemple:

commit A
commit B
commit C
commit D

(sous cette condition, vous pouvez utiliser git rebase)

git rebase -i B

Et que l'utilisation de "squash" à faire. Le reste s'amincit est très facile. Si vous ne savez toujours pas, veuillez lire http://zerodie.github.io/blog/2012/01/19/git-rebase-i/

27voto

Leom Burke Points 4414

vous pouvez annuler le rebase avec

 git rebase --abort
 

et quand vous exécutez la commande interactive rebase à nouveau le 'squash; commit doit être en dessous du commit commit dans la liste

20voto

VinceStyling Points 896

J'ai souvent utiliser git reset --mélangé à revenir à une version de base avant plusieurs engage lequel vous souhaitez fusionner, puis-je faire un nouveau commit qui pourrait laisser vos commettre de nouveau, de s'assurer que votre version est à la TÊTE après que vous appuyez sur le serveur.

commit ac72a4308ba70cc42aace47509a5e
Author: <me@me.com>
Date:   Tue Jun 11 10:23:07 2013 +0500

    Added algorithms for Cosine-similarity

commit 77df2a40e53136c7a2d58fd847372
Author: <me@me.com>
Date:   Tue Jun 11 13:02:14 2013 -0700

    Set stage for similar objects

commit 249cf9392da197573a17c8426c282
Author: Ralph <ralph@me.com>
Date:   Thu Jun 13 16:44:12 2013 -0700

    Fixed a bug in space world automation

Si je veux fusionner tête des deux s'engage dans l'une, j'ai d'abord utiliser :

git reset --mixed 249cf9392da197573a17c8426c282

"249cf9392da197573a17c8426c282" était la troisième version, est aussi votre version de base avant de les fusionner, après cela, je fais un nouveau commit :

git add .
git commit -m 'some commit message'

C'est tout, l'espoir est une autre façon pour tout le monde.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X