web-dev-qa-db-fra.com

Comment puis-je restaurer un dépôt github sur un commit spécifique?

Mon github a 100 commits dedans en ce moment. J'ai besoin de restaurer le référentiel pour valider 80 et de supprimer tous les suivants.

Pourquoi? Ce dépôt est censé être destiné à la fusion d'utilisateurs divers. Un tas de fusions est entré comme le commet de ma part, en raison d'une édition excessive. Cela était dû à un mauvais étiquetage de mes branches distantes, où 3 développeurs étaient étiquetés comme tels. Je dois revenir à ce point, puis tirer vers l'avant.

Je voulais rebase, comme dans cet exemple: Comment supprimer un commit sur GitHub?

Cependant, Git veut que je fasse beaucoup de gestion de conflit. Y a-t-il un moyen plus simple?

371
Jonathan Vanasco
git reset --hard <old-commit-id>
git Push -f <remote-name> <branch-name>

Remarque: Comme indiqué dans les commentaires ci-dessous, L'utilisation de cette option est dangereuse dans un environnement collaboratif: vous réécrivez l'historique

785
jtdubs

Autrement: 

Vérifiez la branche que vous souhaitez rétablir, puis réinitialisez votre copie de travail locale sur le commit que vous souhaitez utiliser comme dernier en date sur le serveur distant (tout ce qui suivra sera répété). Pour ce faire, dans SourceTree, j'ai cliqué avec le bouton droit de la souris sur et sélectionné "Réinitialiser BRANCHNAME à ce commit". 

Ensuite, accédez au répertoire local de votre référentiel et exécutez cette commande: 

git -c diff.mnemonicprefix = false -c core.quotepath = false Push -v -f --tags REPOSITORY_NAME RUBCHNAME: RUBBCH 

Cela effacera toutes les validations postérieures à celle en cours dans votre référentiel local mais uniquement pour cette branche. 

19
CommaToast

Pour annuler le dernier commit, je fais ceci:

Premier:

git log

récupérez l'identifiant SHA le plus récent à annuler.

git revert SHA

Cela créera un nouveau commit qui fera exactement le contraire de votre commit. Ensuite, vous pouvez pousser ce nouveau commit pour amener votre application à l’état qu’elle était auparavant, et votre historique git affichera ces modifications en conséquence. 

C’est bon pour une reprise immédiate de quelque chose que vous venez de commettre, ce qui est plus souvent le cas pour moi. 

Comme Mike l'a mentionné, vous pouvez aussi faire ceci:

git revert HEAD
15
Nick Res

Lorsque je fais des mises à jour de branche à partir du maître, je remarque parfois que je sur-clique et que la branche fusionne également dans le maître. J'ai trouvé un moyen de défaire ça.

Si votre dernier engagement était une fusion, un peu plus d'amour est nécessaire:

git revert -m 1 HEAD

2
Richard Nader

Dans github, le moyen le plus simple est de supprimer la branche distante dans l'interface utilisateur de github, sous l'onglet branches. Vous devez vous assurer de supprimer les paramètres suivants pour rendre la branche supprimable:

  1. Pas une branche par défaut
  2. Aucune demande d'ouverture de sondage.
  3. La branche n'est pas protégée.

Recréez-le maintenant dans votre référentiel local pour qu'il pointe vers le point de validation précédent. et rajoutez-le au repo distant.

git checkout -b master 734c2b9b   # replace with your commit point

Puis poussez la branche locale vers la télécommande

git Push -u Origin master

Rajoutez la protection par défaut des branches et des branches, etc. 

0
Jianwu Chen