Perché non posso inviare un commit vuoto?


35
  git commit --amend --allow-empty

poi

  git push origin master

lo ha detto

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'remoteurl'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

Perché? Come risolvere questo?

git 

Risposte:


56

Il problema non è che stai spingendo un commit vuoto .
Si tratta di inviare un commit diverso (uno con un SHA1 diverso) rispetto a quello già inviato.
Questo è ciò che git commit --amendfa: ha modificato l'ultimo commit, non ne crea uno nuovo.

Ciò significa che stai spingendo una storia diversa da quella che gli altri potrebbero aver già clonato.
Se sei sicuro che non sarà un problema, devi forzare la spinta:

git push -f origin master

Avresti dovuto fare:

git commit --allow-empty

Avresti creato un nuovo commit (vuoto), che avresti potuto inviare senza alcun problema.


5

Se vuoi creare una richiesta pull su Github. Puoi:

git commit --allow-empty -m "make pull request"

Quindi creare una richiesta pull senza modifiche.


3

Per chiarire la risposta accettata, dal momento che non ho abbastanza reputazione per commentare:

Quando si usa

git commit --amend

si fa creare un nuovo commit. Tuttavia, non lo aggiunge al commit corrente, lo aggiunge al genitore del commit corrente. Visivamente, sembrerebbe una forchetta.

  O (old commit)
 /
O-O (amended commit)

Git interpreta questo come una divergenza dal telecomando. Ecco perché non ti permetterà di spingerlo senza forzare.


0

Assicurarsi che il ramo remoto che si sta tentando di inviare non sia attualmente estratto. Una volta ho creato un repository git su uno dei miei server e non sono riuscito a capire perché non potevo spingere su di esso. Dopo circa un giorno di risoluzione dei problemi, ho scoperto che non potevo eseguire il push sul repository (o sul ramo che volevo) mentre era stato estratto sul repository del server. Quindi, ho semplicemente creato un nuovo ramo che ho verificato quando ho finito di apportare modifiche sul server e quindi posso inviare al server. Questo potrebbe non essere il tuo problema, ma stavo ricevendo un errore simile a questo quando ho avuto un problema a spingere verso un git vuoto sul mio server.

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.