Mon github contient 100 commits en ce moment. J'ai besoin de restaurer le référentiel pour valider 80, et supprimer tous les suivants.
Pourquoi? Ce dépôt est censé être destiné à la fusion d'utilisateurs divers. Un tas de fusions ont été effectuées en tant que commits de ma part, en raison d'un montage excessif. Cela était dû à un mauvais étiquetage de mes succursales distantes, où 3 développeurs étaient étiquetés les uns les autres. Je dois réinitialiser à ce point, puis tirer vers l'avant.
Je voulais rebaser, comme dans cet exemple: Comment puis-je supprimer un commit sur GitHub?
Cependant, git veut que je fasse beaucoup de gestion des conflits. Existe-t-il un moyen plus simple?
git push -f origin branch
. J'ai juste passé un mauvais moment, parce que ça m'a manqué.git push origin HEAD --force
au lieu degit push -f origin branch
car cela me donnait uneerror: src refspec branch does not match any.
erreurPour annuler le commit le plus récent, je fais ceci:
Première:
obtenir le tout dernier identifiant SHA à annuler.
Cela créera un nouveau commit qui fait exactement le contraire de votre commit. Ensuite, vous pouvez pousser ce nouveau commit pour ramener votre application à l'état où elle était auparavant, et votre historique git montrera ces changements en conséquence.
C'est bon pour une reprise immédiate de quelque chose que vous venez de commettre, ce que je trouve plus souvent le cas pour moi.
Comme Mike l'a mentionné, vous pouvez également le faire:
la source
git revert HEAD
rétablira le dernier commit sans avoir à rechercher le hachage.Autrement:
Extrayez la branche que vous souhaitez rétablir, puis réinitialisez votre copie de travail locale sur le commit que vous souhaitez être la dernière sur le serveur distant (tout ce qui se passera ensuite au revoir). Pour ce faire, dans SourceTree, j'ai fait un clic droit sur le 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:
Cela effacera toutes les validations après celle en cours dans votre référentiel local, mais uniquement pour cette branche.
la source
La plupart des suggestions supposent que vous devez d'une manière ou d'une autre détruire les 20 derniers commits, c'est pourquoi cela signifie «réécrire l'historique», mais ce n'est pas obligatoire.
Créez simplement une nouvelle branche à partir du commit # 80 et travaillez sur cette branche à l'avenir. Les 20 autres commits resteront sur l'ancienne branche orpheline.
Si vous voulez absolument que votre nouvelle branche porte le même nom, rappelez-vous que cette branche n'est en fait que des étiquettes. Renommez simplement votre ancienne branche en quelque chose d'autre, puis créez la nouvelle branche au commit # 80 avec le nom que vous voulez.
la source
Lorsque je fais des mises à jour de branche à partir du maître, je remarque que je sur-clique parfois et que la branche fusionne également dans le maître. J'ai trouvé un moyen de défaire ça.
Si votre dernier commit était une fusion, un peu plus d'amour est nécessaire:
git revert -m 1 HEAD
la source
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:
Recréez-le maintenant dans votre référentiel local pour pointer vers le point de validation précédent. et l'ajouter à nouveau au référentiel distant.
Poussez ensuite la branche locale vers la télécommande
Ajoutez à nouveau la branche par défaut et la protection de branche, etc.
la source