git - Il tuo ramo è davanti a 'origin / master' di 1 commit


107

Sono un principiante in git e sto lavorando su git.

Ho aggiunto alcuni file in git:

git add <file1>
git add <file2>

poi ho voluto spingerlo per la revisione, ma erroneamente l'ho fatto

git commit

quindi i file che ho modificato non vanno per le revisioni.
Ora se inserisco il comando:

git status

dice

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

Voglio ripristinare quel commit e voglio spingere quei file per la revisione piuttosto che il commit. Qualcuno può farmi sapere come posso farlo?


Se vuoi annullare il tuo impegno, dai un'occhiata alla domanda simile .
ДМИТРИЙ МАЛИКОВ

1
Non so cosa stai usando per le revisioni del codice. La semplice risposta alla semplice domanda su come annullare il commit ègit reset HEAD^
Anonymoose

ho resettato HEAD. ma poi quando provo a spingere, mi dice D file1.py quando ho provato a psuh, poi di nuovo mi dice che il tuo ramo è in anticipo rispetto a origin / master di 1 commit
sam

Cosa intendi quando dici "Voglio inviare quei file per la revisione"? Vuoi che altre persone vedano il tuo impegno?
Jake Greene

il mio codice verrà prima rivisto e poi verrà confermato. quindi prima voglio spingere il codice per la revisione ma erroneamente mi sono impegnato
sam

Risposte:


128

Non puoi spingere nulla che non sia stato ancora commesso. L'ordine delle operazioni è:

  1. Fai il tuo cambiamento.
  2. git add - questo mette in scena le modifiche per il commit
  3. git commit - questo esegue il commit delle modifiche in fasi a livello locale
  4. git push - questo spinge le modifiche apportate a un telecomando

Se spingi senza impegnarti, nulla viene spinto. Se ti impegni senza aggiungere nulla, non viene eseguito alcun commit. Se aggiungi senza commit, non accade nulla, git si limita a ricordare che le modifiche che hai aggiunto dovrebbero essere considerate per il commit successivo.

Il messaggio che stai vedendo (il tuo ramo è avanti di 1 commit) significa che il tuo repository locale ha un commit che non è stato ancora inviato.

In altre parole: adde commitsono operazioni locali push, pulle fetchsono operazioni che interagiscono con un telecomando.

Dal momento che sembra esserci un flusso di lavoro di controllo della fonte ufficiale sul posto in cui lavori, dovresti chiedere internamente come dovrebbe essere gestito.


4
aha ok. quindi significa che dopo il commit, devo spingerlo
sam

4
Buona spiegazione: l'interrogante probabilmente non vuole effettivamente annullare il commit, ma piuttosto chiedere alle persone di rivedere il commit prima di inviarlo al originrepository. Consiglio anche di leggere alcuni dei tutorial / introduzioni su git su git-scm.com/documentation
dbr

1
Quando il mio stato git dice "Il tuo ramo è davanti a 'origine / sviluppo' di 1 commit." come vedo esattamente che i file sono stati modificati? git diff non sembra fare nulla
Tom

A volte c'è qualcun altro che ha lavorato lì. Fai un tiro prima della tua spinta
Adrian P.

68

git reset HEAD^ --soft (Salva le modifiche, torna all'ultimo commit)

git reset HEAD^ --hard (Annulla le modifiche, torna all'ultimo commit)


3
Qual è il significato della TESTA con una carota '^'? L'ho visto scrivere anche senza la carota.
Mugen

29

Se vuoi solo buttare via le modifiche e tornare all'ultimo commit (quello che volevi condividere):

git reset --hard HEAD~

Potresti voler controllare per essere assolutamente sicuro di volere questo ( git log), perché perderai tutte le modifiche.

Un'alternativa più sicura è correre

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 

21

Ho risolto questo problema semplicemente eseguendo un semplice:

git pull

Niente di più. Ora sta mostrando:

# On branch master
nothing to commit, working directory clean

Può causare problemi se ci sarà più di un ramo creato che non è richiesto.
Anil Kumar Arya

1
sei tornato nel tuo stato remoto e hai perso il tuo ultimo lavoro: D
Gucho Ca

13

git resetta HEAD ^

quindi i file modificati dovrebbero essere visualizzati.

Puoi spostare i file modificati in un nuovo ramo

uso,

git checkout -b newbranch

git checkout commit -m "files modified"

git push origin newbranch

git checkout master

allora dovresti essere su un ramo pulito e le tue modifiche dovrebbero essere memorizzate in newbranch. In seguito potresti semplicemente unire questa modifica al ramo principale


4
git reset HEAD <file1> <file2> ...

rimuove i file specificati dal commit successivo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.