2012-04-16 5 views
66

Sono novizio in git e sto lavorando su git.git - Il tuo ramo è più avanti di "origine/master" di 1 commit

ho aggiunto alcuni file in git:

git add <file1> 
git add <file2> 

Poi volevo spingere che per la revisione, ma per errore ho fatto

git commit 

modo che i file che ho cambiato non andare per recensioni.
Ora, se io immettere il comando:

git status 

si dice

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

voglio tornare che si impegnano e voglio spingere i file per la revisione piuttosto che commettere. Qualcuno può farmi sapere come posso farlo?

+0

Se vuoi annullare il commit, dai un'occhiata alla [domanda simile] (http://stackoverflow.com/questions/927358/git-undo-last- commettere). –

+0

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

+0

ho resettato HEAD. ma poi quando provo a spingere, allora mi dice D file1.py quando ho provato a psuh poi di nuovo mi dice che il tuo ramo è avanti all'origine/master di 1 commit – sam

risposta

97

Non si può spingere tutto ciò che non è stato ancora commesso. L'ordine delle operazioni è:

  1. Apporta le tue modifiche.
  2. git add - questa stadi le modifiche per aver commesso
  3. git commit - questo impegna le modifiche messe in scena a livello locale
  4. git push - questo spinge le modifiche impegnata in una remota

Se si spinge senza commettere, nulla viene spinto . Se si commette senza aggiungere, non viene eseguito alcun commit. Se si aggiunge senza commit, non accade nulla, Git si limita a ricordare che le modifiche aggiunte devono essere considerate per il seguente commit.

Il messaggio che stai vedendo (la filiale è avanti di 1 commit) significa che il vostro repository locale ha un commit che non è stato ancora spinto.

In altre parole: add e commit sono operazioni locali, push, pull e fetch sono operazioni che interagiscono con un telecomando.

Dal momento sembra che ci sia un flusso di lavoro di controllo fonte ufficiale nel luogo in cui si lavora, si dovrebbe chiedere internamente come questo dovrebbe essere gestito.

+3

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

+4

Una buona spiegazione - probabilmente il questioner non vuole veramente annullare il commit, ma piuttosto che le persone riesaminano il commit prima di spingerlo al repository 'origin'. Consiglierei anche di leggere alcuni tutorial/introduzioni da git su http://git-scm.com/documentation – dbr

+0

Quando il mio stato git dice "Il tuo ramo è più avanti di" origine/sviluppo "di 1 commit". in che modo esattamente vedo che i file sono stati modificati? git diff non sembra fare nulla – Tom

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

rimuovere i file specificati dal prossimo commit

19

Se si desidera solo per buttare via le modifiche e ripristinare l'ultima commit (quello che si voleva condividere):

git reset --hard HEAD~ 

Potresti voler verificare di essere assolutamente sicuro di ciò (git log), perché perderai tutte le modifiche.

Un'alternativa più sicura è quello di eseguire

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 
32

git reset HEAD^ --soft (Salvare le modifiche, torna a durare impegnarsi)

git reset HEAD^ --hard (Annulla modifiche, torna a durare commit)

12

ho risolto questo da solo in esecuzione un semplice:

git pull 

Niente Di Più. Ora sta mostrando:

# On branch master 
nothing to commit, working directory clean 
+0

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

+0

sei tornato allo stato remoto e hai perso il tuo ultimo lavoro: D –

2

ripristino git HEAD^

quindi i file modificati dovrebbero presentarsi.

Si potrebbe spostare i file modificati in un nuovo ramo

uso, git checkout -b newbranch git checkout commit -m "file modificati" push origin git newbranch

maestro git checkout

quindi dovresti essere su un ramo pulito e le tue modifiche dovrebbero essere archiviate in newbranch. In seguito, puoi semplicemente unire questa modifica al ramo principale