2010-12-05 5 views

Répondre

2

Pour accéder à une version précédente:

git checkout <version hash>

faire votre travail ici et COMMIT avec

git commit --amend

Pour revenir à maître:

git checkout master

+1

Cela ne fonctionnera pas. 'git reset --hard' a renvoyé sa branche principale à l'ancien commit, donc' git checkout master' ne fera rien. – jtdubs

+0

Vrai, merci pour la correction. +1 à vous, supprimerait aussi ma réponse mais je pense que l'étape 'commit --amend' est assez utile –

+0

Qu'est-ce que' --amend'? – Shafizadeh

8

Vous pouvez simplement git checkout <commit-id>, faire ce que vous devez faire, puis git checkout master pour revenir au nouveau code.

Si vous avez réellement besoin de modifier l'ancien code pour le libérer, alors vous devriez probablement:

git checkout -b my_release <commit-id> 
... prepare code for release ... 
... release code ... 
git checkout master 
git merge my_release 

Aussi, je ne peux pas recommander git flow. Cela rend tout cela assez facile.

35

Votre question n'est pas claire. Je pense ce que vous demandez est le suivant:

git push -f origin $old_commit_id:master

Qu'est-ce que cela? Il poussera le $old_commit_id valider à origin en tant que nouveau chef de branche de origin.

Si c'est ce que vous vouliez, vous n'avez pas du tout besoin de toucher votre branche master locale.

+0

Cela a provoqué une erreur 'master (non-fast-forward)' pour moi. La solution @jtdubs a fonctionné. –

+2

Passez simplement '-f' pour le forcer - bien que le repo distant puisse être configuré pour interdire cela. J'ai mis à jour la réponse. –

+0

ne fonctionne pas pour moi, la réponse acceptée ne le fait pas – MobileMon

64

Si vous voulez faire et de revenir le maître à la précédente livraison:

git checkout master~1   # Checkout previous commit on master 
git checkout -b new_master  # Create branch for new master 
git branch -D master    # Delete old master 
git branch -mv new_master master # Make new_master master 

Autre possibilité:

git reset --hard master~1  # Reset current branch to one commit ago on master 
+0

Donc, un an plus tard, je regarde cela et je pense que c'est une façon horrible de le faire. Eh bien, au moins, c'est un peu facile à comprendre. –

+0

oui c'est pourquoi j'ai upvoted, facile à comprendre, peut-être que vous auriez dû présenter un lien vers un meilleur moyen? –

+0

Refusée. Cela a fonctionné pour moi – bFunc

7

En supposant un commettras graphique comme ceci:

| (A) ---------> (B) ----------> (C) 
|        ^
|        (master) 

Vous voulez d'abord vérifier master et de créer une branche qui indique où master curre ntly est:

git checkout master 
git branch pointer master 

devrait ressembler à ceci maintenant:

| (A) ---------> (B) ----------> (C) 
|        ^
|      (HEAD, master, pointer) 

Maintenant que vous êtes déjà sur master, nous allons dire la branche master pour déplacer une arrière commit:

git reset master~1 

maintenant, master devrait être déplacé d'une case, mais la branche pointer est toujours le plus récent engagement:

| (A) ---------> (B) ----------> (C) 
|    ^   ^
|   (HEAD, master) (pointer) 

À ce stade, vous pouvez pousser master à une télécommande, ou si jamais, puis fusionner avancer rapidement revenir à la branche pointer. Vous pouvez tuer la branche pointer à ce moment:

git push origin master 
git merge --ff-only pointer 
git branch -D pointer 

final:

| (A) ---------> (B) ----------> (C) 
|    ^   ^
|   [ origin/master ] (HEAD, master) 
+0

Si origin/master est en C, 'git push origin master' échouera avec _la pointe de votre branche actuelle est derrière son remote counterpart_ Vous devriez également passer un drapeau -f – sassospicco

+0

'git reset master ~ 1' était ce dont j'avais besoin --- merci! – cxw

7

utilisation git reset --hard <old commit number>

il réinitialise la tête ce vieux commit.

En outre, vous devez utiliser git push -f origin pour modifier le trop repo à distance.

Questions connexes