Sachant qu'il existe plusieurs commandes git qui n'ont aucun sens dans un référentiel nu (car les référentiels nus n'utilisent pas d'index et n'ont pas de répertoire de travail),
git reset --hard HEAD^
n'est pas une solution pour annuler le dernier changement dans un tel référentiel.
En cherchant sur Internet, tout ce que j'ai pu trouver sur le sujet est this , dans lequel on me présente trois façons de faire:
1. "mettre à jour la référence manuellement (ce qui implique la plomberie)";
2. "git Push -f
à partir d'un référentiel non dénudé ";
3. "git branch -f this $that
".
Quelle solution pensez-vous la plus appropriée ou quelles sont les autres façons de procéder? Malheureusement, la documentation que j'ai trouvée sur les dépôts git bare est assez pauvre.
Vous pouvez utiliser le git update-ref
commande. Pour supprimer le dernier commit, vous utiliseriez:
$ git update-ref HEAD HEAD^
Ou si vous n'êtes pas dans la branche d'où vous ne pouvez pas supprimer le dernier commit:
$ git update-ref refs/heads/branch-name branch-name^
Vous pouvez également passer un sha1 si vous le souhaitez:
$ git update-ref refs/heads/branch-name a12d48e2
Voir la documentation de la commande git-update-ref .
Si vous utilisez ce qui suit dans un référentiel nu:
git reset --soft <commit>
alors vous ne rencontrez pas les problèmes que vous rencontrez en utilisant --hard
et --mixed
options dans un référentiel nu puisque vous n'essayez pas de changer quelque chose que le référentiel nu n'a pas (c'est-à-dire arbre de travail et index). Dans votre cas en particulier, vous souhaitez utiliser (à partir du repo nu):
git reset --soft HEAD^
Pour changer de branche sur le référentiel distant faire:
git symbolic-ref HEAD refs/heads/<branch_name>
Le git Push -f
devrait fonctionner correctement:
si vous clonez ce référentiel nu, supprimez le dernier commit (git reset --hard HEAD^
comme vous le mentionnez, mais dans un référentiel local non nu) et repousser (-f
):
Vous pouvez également utiliser la notation git refspec et faire quelque chose comme ceci:
git Push -f Origin +<commit you want to revert to>:<destination_head | branch_name>
Cela force la mise à jour de la branche de destination (comme indiqué par la référence) vers le commit source comme indiqué par le +<object ref>
partie.