git - Votre branche est en avance sur 'origin / master' par 1 commit

107

Je suis novice en git et je travaille sur git.

J'ai ajouté quelques fichiers dans git:

git add <file1>
git add <file2>

alors je voulais pousser cela pour examen, mais je l'ai fait par erreur

git commit

donc les fichiers que j'ai modifiés ne font pas l'objet de critiques.
Maintenant, si j'entre la commande:

git status

ça dit

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)

Je veux revenir sur ce commit et je veux pousser ces fichiers pour examen plutôt que pour validation. Quelqu'un peut-il me dire comment je peux faire cela?

sam
la source
Si vous souhaitez annuler votre validation, jetez un œil à la question similaire .
ДМИТРИЙ МАЛИКОВ
1
Je ne sais pas ce que vous utilisez pour les révisions de code. La réponse simple à la simple question de savoir comment se git reset HEAD^
désengager
J'ai réinitialisé HEAD. mais alors quand j'essaye de pousser, alors il me dit D file1.py quand j'ai essayé de psuh puis encore il me dit que votre branche est en avance sur origin / master par 1 commit
sam
Que voulez-vous dire quand vous dites "Je veux pousser ces fichiers pour examen"? Voulez-vous que d'autres personnes voient votre engagement?
Jake Greene
mon code sera d'abord examiné puis il sera validé. donc d'abord, je veux pousser le code pour examen, mais par erreur, je me suis engagé
sam

Réponses:

128

Vous ne pouvez pas pousser quoi que ce soit qui n'a pas encore été commis. L'ordre des opérations est:

  1. Faites votre changement.
  2. git add - cela met en scène vos changements pour s'engager
  3. git commit - cela valide vos modifications par étapes localement
  4. git push - cela pousse vos changements engagés vers une télécommande

Si vous poussez sans vous engager, rien n'est poussé. Si vous vous engagez sans ajouter, rien n'est validé. Si vous ajoutez sans commettre, rien ne se passe du tout, git se souvient simplement que les changements que vous avez ajoutés doivent être pris en compte pour le commit suivant.

Le message que vous voyez (votre branche est en avance d'un commit) signifie que votre dépôt local a un commit qui n'a pas encore été poussé.

En d'autres termes: addet commitsont des opérations locales push, pullet fetchsont des opérations qui interagissent avec une télécommande.

Puisqu'il semble y avoir un workflow de contrôle de source officiel en place là où vous travaillez, vous devriez demander en interne comment cela doit être géré.

tdammers
la source
4
AHA ok. donc cela signifie qu'après validation, je dois le pousser
sam
4
Bonne explication - le questionneur ne veut probablement pas réellement revenir sur le commit, mais plutôt demander aux gens de revoir le commit avant de le pousser vers le originréférentiel. Je recommanderais également de lire quelques-uns des tutoriels / intros à git sur git-scm.com/documentation
dbr
1
Quand mon statut git dit "Votre branche est en avance sur 'origin / develop' par 1 commit." comment voir exactement que les fichiers ont été modifiés? git diff ne semble rien faire
Tom
Parfois, quelqu'un d'autre a travaillé là-bas. Faites une traction avant votre poussée
Adrian P.
68

git reset HEAD^ --soft (Sauvegardez vos modifications, retour au dernier commit)

git reset HEAD^ --hard (Annuler les modifications, retour au dernier commit)

Juanito Fatas
la source
3
Quelle est la signification de la TÊTE avec une carotte «^»? Je l'ai vu aussi s'écrire sans la carotte.
Mugen
29

Si vous souhaitez simplement annuler les modifications et revenir au dernier commit (celui que vous vouliez partager):

git reset --hard HEAD~

Vous voudrez peut-être vérifier pour être absolument sûr de vouloir cela ( git log), car vous perdrez toutes les modifications.

Une alternative plus sûre est de courir

git reset --soft HEAD~ # reset to the last commit
git stash              # stash all the changes in the working tree 
git push               # push changes 
git stash pop          # get your changes back 
Shep
la source
21

J'ai résolu ce problème en exécutant simplement un simple:

git pull

Rien de plus. Maintenant, il montre:

# On branch master
nothing to commit, working directory clean
Karlingen
la source
Cela peut poser problème s'il y a plus d'une branche créée qui n'est pas requise.
Anil Kumar Arya
1
vous êtes retourné dans votre état distant et avez perdu votre dernier travail: D
Gucho Ca
13

git reset HEAD ^

alors les fichiers modifiés devraient apparaître.

Vous pouvez déplacer les fichiers modifiés dans une nouvelle branche

utilisation,

git checkout -b newbranch

git checkout commit -m "files modified"

git push origin newbranch

git checkout master

alors vous devriez être sur une branche propre et vos modifications devraient être stockées dans newbranch. Vous pourrez plus tard simplement fusionner cette modification dans la branche principale

OZI
la source
4
git reset HEAD <file1> <file2> ...

supprimer les fichiers spécifiés du prochain commit

Bnjmn
la source