2012-12-21 11 views
30

Apportate modifiche a un commit, eseguite commit modify. Fare una spinta e ottengo l'errore:Git/gerrit, push remoto rifiutato nessuna modifica apportata

! [remote rejected] master -> refs/for/master (no changes made) 

Controllato l'ID cambiamento nel messaggio di commit e la sua ancora una valida commit.

Ho provato a cambiare un file, controllandolo appare come una modifica e poi aggiunto all'area di staging e fatto un altro commit di modifica. Prova nuovamente il push e ottieni lo stesso problema. Nessuna idea su questo.

Modifica: questo sta premendo per gerrit, non git direttamente.

sto correndo:

git push origin master:refs/for/master 

E il risultato di ottenere i dettagli di origine sono (con dati aziendali a cura out):

$ git remote show origin 
* remote origin 
    Fetch URL: ssh://[email protected]:29418/myrepo 
    Push URL: ssh://[email protected]:29418/myrepo 
    HEAD branch: master 
    Remote branch: 
    master tracked 
    Local branch configured for 'git pull': 
    master rebases onto remote master 
    Local ref configured for 'git push': 
    master pushes to master (up to date) 
+0

Quale comando push è in esecuzione e quale ramo si trova localmente? – Amber

+0

Sono su master localmente e sto eseguendo 'git push origin master: refs/for/master' e l'origine è impostata con URL di recupero e push validi. – edwardmlyte

+0

Dato che stai usando 'refs/for/...' piuttosto che la sintassi 'refs/heads/...', stai usando Gerrit? Se è così, ciò sarebbe molto rilevante per la tua domanda e dovrebbe essere menzionato. – Amber

risposta

45

Questo problema è dovuto alle azioni che avevo eseguito in precedenza. Stavo cercando di aggiungere una nuova modifica a push, in aggiunta a una modifica che era ancora in revisione, ma anche a chi era in attesa di revisione.

Trunk ------ Parent A ----- Parent B ----- New change 
(merged)  (unmerged)  (unmerged) 

avevo usato cherry-pick per ottenere questi due cambiamenti a livello locale (Parent A e genitore B), e poi un terzo cherry-pick per ottenere il mio cambiamento da una filiale locale prima di tentare di push. Questo è ciò che ha causato il problema, perché il mio cambiamento personale stava essenzialmente cercando di riscrivere la storia.

Il processo corretto sarebbe a solo pull Genitore B quando nella parte centrale. Questo automaticamente richiama qualsiasi commit tra il trunk e questo (in questo caso solo Parent A). Quindi cherry-pick la mia nuova modifica in cima a quella e push funzionerà correttamente.

+8

Abbiamo avuto un problema con questo oggi.Il problema era che avevamo gerrit: Change1 (unito) - Change2 (non modificato) - Change3 (non modificato) Volevamo applicare pubblica una nuova patch impostata su Change3 ma è stata negata. Messaggio: ''! [remoto rifiutato] master -> refs/for/master (nessuna modifica apportata) '' Dopo aver grattato le nostre teste abbiamo scoperto che avevamo rebasato localmente e che Change2 aveva ricevuto anche un nuovo hash di commit ma non aveva nuove modifiche. L'abbiamo risolto rebasando interattivamente localmente di nuovo e riformattato Change2 aggiungendo un carattere alla fine del messaggio di commit. Dopo di ciò andava bene pubblicare. – mortb

2

Suona come si sta facendo tutto correttamente come Per quanto riguarda la verifica, hai apportato un cambiamento che Gerrit dovrebbe raccogliere.

git push origin master:refs/for/master

Forse questo è il problema? Se le modifiche non sono sulla versione locale del ramo master, non si stanno spingendo le modifiche. Invece di cercare:

git push origin HEAD:refs/for/master

HEAD è una scorciatoia che rappresenta il vostro attuale commit in git.

+0

Stesso errore con quella scorciatoia. HEAD fa riferimento alle modifiche correnti nel ramo attuale o solo al cambio corrente nel ramo principale? – edwardmlyte

+1

HEAD si riferisce al tuo cambio attuale, periodo. Il ramo in cui ti trovi non ha importanza. Se la spinta con HEAD non aiuta, sospetto che il tuo emendamento non abbia modificato il commit. Prova ad aggiornare/cambiare il messaggio di commit quando modifichi e poi spingi di nuovo. – Brad

+0

Grazie per il tuo aiuto, Brad, ho scoperto che stavo usando git in modo errato. – edwardmlyte

2

Se si sta tentando di aggiornare una serie di recensioni, ognuna con il proprio ID di modifica che si desidera mantenere (ad esempio, dopo un rebase in cui si scambia l'ordine di due commit), si potrebbe essere rifiutati se alcuni di i commit nella pila rimangono invariati. Dovresti forzare la creazione di un nuovo hash riformulando i commit o qualcosa di simile.

+6

Ho dovuto fare un "git commit --amend" senza modifiche, e questo sembrava risolvere il mio problema. – Stuart

0

Ho avuto lo stesso problema. Allo stesso tempo c'era un altro commit non unito al master ed era in gerrit review e rebased in gerrit. , cioè codice inviato per la revisione. rebased in gerrit e review in attesa di finire. Una volta esaminato il codice, ero in grado di spingere senza errori.

0

Ho avuto lo stesso messaggio di errore, ma le modifiche che stavo cercando di spingere erano in cima a diversi commit dal set originale di modifiche (ho fatto alcuni trucchi magici con git cherry-pick e sembra che a Gerrit non piaccia). Ho abbandonato la mia modifica originale, quindi l'ho riaperta quando ho capito che potevo risolvere il problema, ma non sono riuscito a inviare a gerrit con git review.

A questo punto, la mia soluzione rapida è stato quello di abbandonare il cambiamento originale dal sito Gerrit, e creare un nuovo cambiamento, eliminando l'ultima change-Id: sha1 linea dal messaggio di commit con git commit --amend.

0

Con questo messaggio di errore Gerrit rifiuta di inviare un commit come nuova serie di patch per una modifica, se il commit push è identico all'attuale serie di patch di questa modifica.

Un spinto commit è considerata identica alla patch corrente impostato se

  • i file nella commettono,
  • il messaggio di commit,
  • l'autore del commit e
  • la i genitori del commit

sono tutti identici.

1

prega di fare riferimento alla documentazione ufficiale su questo tema qui:

https://gerrit-review.googlesource.com/Documentation/error-no-new-changes.html

Ho avuto lo stesso problema, il mio problema è che ho spinto il cambiamento, poi abbandonato che si fondono, poi ho fatto un paio di modifiche , erroneamente modificato il mio commit e spinto di nuovo. Ecco dove ho ottenuto l'errore.

mio fix:

  1. Se si desidera solo per ottenere rapidamente questo problema, fanno git commit --amend, rimuovere l'attuale change-Id, a patto di avere i ganci git impostati, è possibile completare il commit e un nuovo change-Id dovrebbe essere assegnato a voi.
  2. Entra in gerrit e cerca il tuo change-Id esistente, scopri cosa sta succedendo e aggiustalo di conseguenza. (consigliato)
Problemi correlati