Je veux revenir à un commit précédent, puis publier ce code, puis revenir au dernier commit.
c'est-à-dire que mon maître pointe vers une version de commit plus ancienne juste pour que je puisse publier cette version, alors je veux revenir au dernier commit que j'étais au départ.
Comment puis-je faire ceci?
Votre question n'est pas claire. Je pense que ce que vous demandez, c'est ceci:
Qu'est-ce que cela va faire? Cela poussera le
$old_commit_id
commit à devenirorigin
le nouveau responsable deorigin
lamaster
branche de.Si c'est ce que vous vouliez, vous n'avez pas du tout besoin de toucher votre
master
succursale locale .la source
master (non-fast-forward)
échec pour moi. La solution @jtdubs a fonctionné.-f
pour le forcer - bien que le dépôt distant puisse être configuré pour interdire cela. J'ai mis à jour la réponse.utilisation
git reset --hard <old commit number>
cela réinitialisera HEAD à cet ancien commit.
en outre, vous devez également utiliser
git push -f origin
pour modifier le référentiel distant.la source
Si vous souhaitez éviter les pressions forcées, voici comment rétablir votre dépôt à un commit plus ancien et conserver tout le travail intervenant:
git checkout 307a5cd # check out the commit that you want to reset to git checkout -b fixy # create a branch named fixy to do the work git merge -s ours master # merge master's history without changing any files git checkout master # switch back to master git merge fixy # and merge in the fixed branch git push # done, no need to force push!
Terminé! Remplacez 307a5cd par le commit que vous voulez dans votre dépôt.
(Je sais que les deux premières lignes peuvent être combinées, mais je pense que cela rend moins clair ce qui se passe)
Le voici graphiquement:
Vous supprimez effectivement c3 et c4 et redéfinissez votre projet sur c2. Cependant, c3 et c4 sont toujours disponibles dans l'historique de votre projet si vous souhaitez les revoir.
la source
En supposant un graphe de validation comme ceci:
Vous souhaitez d'abord effectuer le paiement
master
et créer une branche qui pointe vers oùmaster
se trouve actuellement:Devrait ressembler à ceci maintenant:
Maintenant que vous êtes déjà sur
master
, nous allons dire à lamaster
branche de reculer d'un commit:Maintenant,
master
devrait être reculé d'un espace, mais lapointer
branche est toujours sur le commit le plus récent:À ce stade, vous pouvez pousser
master
vers une télécommande, ou n'importe où, puis la fusionner en avance rapide vers lapointer
branche. Vous pouvez tuer lapointer
branche à ce stade:Finale:
la source
git push origin master
échouera avec la pointe de votre branche actuelle est derrière son homologue distant . Vous devez également passer un indicateur -f.Vous pouvez simplement
git checkout <commit-id>
, faire ce que vous devez faire, puisgit checkout master
revenir au nouveau code.Si vous avez réellement besoin de modifier l'ancien code pour le publier, vous devriez probablement:
De plus, je ne saurais trop recommander git flow . Cela rend tout cela assez facile.
la source
Pour passer à une version précédente:
git checkout <version hash>
faites votre travail ici et engagez-vous avec
git commit --amend
Pour revenir au master :
git checkout master
la source
git reset --hard
a pointé sa branche principale vers l'ancien commit, doncgit checkout master
ne fera rien.commit --amend
étape est assez utile--amend
?