99 votes

Comment puis-je uncommit dernier commit un dépôt nu git ?

Prenant en considération qu'il y a plusieurs commandes git qui n'ont pas de sens dans un dépôt nu (nu parce que les référentiels ne pas utiliser d'index et de ne pas avoir un répertoire de travail),

git reset --hard HEAD^ 

n'est pas une solution à uncommit le dernier changement d'un tel référentiel.

La recherche par le biais de l'Internet, tout ce que je pouvais trouver le sujet est présent, dans lequel je me suis présenté trois façons de le faire:
1. "mise à jour de la ref manuellement (ce qui implique de plomberie)";
2. "git push -f de non-dépôt nu";
3. "git branch -f this $that".

La solution faire yo pense que c'est plus approprié ou que d'autres moyens sont là pour ce faire? Malheureusement, la documentation que j'ai trouvé sur git nu dépôts est assez pauvre.

Merci beaucoup,
Lavinia

141voto

Sylvain Defresne Points 15231

Vous pouvez utiliser le `` commande. Pour supprimer le dernier commit, vous utiliseriez :

Ou si vous n’êtes pas dans la direction d'où vous ne pouvez pas pour supprimer le dernier commit :

Vous pouvez également passer un sha1 si vous voulez :

Consultez la documentation de la commande git-mise à jour-ref .

36voto

Hazok Points 825

Si vous utilisez la commande suivante dans un nu-repo:

git reset --soft <commit>

ensuite, vous ne courez pas dans les problèmes que vous avez à l'aide de --hard et --mixed options dans un nu-pensions puisque vous n'êtes pas d'essayer de changer quelque chose de la nue-pensions n'ont pas (c'est à dire arbre de travail et de l'index). Dans votre cas précis, vous souhaitez utiliser (à partir de la nue-pensions):

git reset --soft HEAD^

Pour basculer branches sur la distance des pensions de faire:

git symbolic-ref HEAD refs/heads/<branch_name>

6voto

VonC Points 414372

Le devrait fonctionner correctement : Si vous clonez cette repo nu, enlever le dernier commit ( comme vous le mentionnez, mais dans un repo local non-nu) et pousser vers l’arrière ( `` ) :

  • On ne change pas tout SHA1 pour l’autre s’engage qui précède celle que vous supprimez.
  • vous êtes sûr de que vous repousser le contenu exact de la repo nu moins la validation supplémentaire (parce que vous juste cloné d’abord).

2voto

alup Points 671

Vous pouvez également utiliser la notation de spécification de git et faire quelque chose comme ceci :

``

Cela force la mise à jour de la branche de destination (comme indiqué par l’arbitre) à la validation de la source comme indiqué par la `` partie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X