2010-04-11 3 views
23

Lorsque je fais un 'git pull', je suis en conflit avec le commit principal. J'ai donc fait un 'git rebase --abort'Comment puis-je supprimer mon dernier commit dans mon dépôt git local?

Puis-je 'sauvegarder' mon commit sur un "patch" puis faire un git pull?

Ce que je veux imiter est:

  • Je ne ne commettras pas, mais je l'ai fait une « planque git » au lieu
  • Faites un git pull pour éviter toute erreur de fusion

Alors Je dois d'une manière ou d'une autre «revenir en arrière». Est-ce possible avec git?

Répondre

56

votre patch 7826b2 va encore provoquer un conflit quand il est appliqué après avoir tiré, mais vous pouvez faire ce qui suit:

git reset --soft HEAD^ 
git stash 
git pull 
git stash pop # Will cause a conflict 
git commit # Re-commit 7826b2 

Un autre flux de travail est également possible:

git reset --hard HEAD^ 
git pull 
git cherry-pick 7826b2 # Will cause a conflict 

Le second flux de travail repose sur le fait que Git garde le commit 7826b2 dans le reflog (vous pouvez le considérer comme la corbeille) même si vous réinitialisez les changements introduits avec la première ligne.

0

Il y a une façon, en fait dans git, je suis sûr qu'il ya une multitude de façons de le faire ...

Vous pouvez faire:

git stash  # Stash your changes 
git pull  # Pull the changes 
git stash pop # Pop your stash 

Vous pouvez faire:

git pull --rebase # Bring in the changes and apply yours on top of it. 

Vous pouvez faire:

git stash  # Stash your changes 
git checkout <commit> # Pull a specific commit. 
git stash pop # Pop your stash 

J'espère que ça aide.

4

Si vous ne commettez vos modifications dans votre dépôt local, vous pouvez faire un rebasage droit:

git fetch origine

git origine rebasage/maître

Ce dévide votre région valide à partir du maître local, applique de nouveaux validations à partir de l'origine/du maître, puis rejoue vos validations locales.

Dans votre situation, cela entraînera un conflit et git vous dira quels fichiers doivent être modifiés pour résoudre le conflit. Après cela, git add ces fichiers, puis git commit sans arguments pour renouveler les modifications.

+0

ce que je recherchais pour, super. –

0

D'abord, je suggère de faire une sauvegarde de votre branche:

git branch your_branch_backup 

Alors le plus simple est:

git reset --soft <commit> #Go back in time but without loosing your changes 
git stash     #Stash your changes 
git pull     #Refresh your branch with origin 
git stash pop    #Re-apply your changes on the refreshed branch 

Ensuite, vous pouvez engager comme d'habitude

Questions connexes