2016-02-21 8 views
8

Quindi sto lavorando a un progetto sensibile con un gruppo e tutte le nostre fonti sono su Github. Recentemente ho spinto un commit e in seguito ho capito che c'erano molti errori nella mia spinta. Da allora ho corretto tutti quegli errori sulla mia copia locale e sto per spingere di nuovo. Comunque c'è un modo in cui posso spingere e sovrascrivere il mio ultimo commit? Essendo la mia ragione, non voglio che gli altri cerchino il mio commit iniziale e le modifiche che aveva ...come sovrascrivere il commit con uno nuovo su git?

Fondamentalmente voglio sovrascrivere il vecchio commit con il mio nuovo .. quindi nessuna informazione sul vecchio commit rimane visibile agli altri membri del gruppo.

Qualsiasi aiuto sarà apprezzato! Grazie.

NOTA: ho notato che questa domanda è stata contrassegnata come duplicata. Per chiarire, la mia domanda riguarda la sovrascrittura di un commit che è già stato spinto. La mia domanda NON riguarda la modifica di un messaggio di commit errato.

+1

È possibile modificare il commit ('git commit --amend'), o se i dati sono più sensibili ci sono le istruzioni su https://help.github.com/articles/remove-sensitive-data/. – adrianbanks

+1

Questo sta cambiando la storia. Inoltre, dal momento che hai già effettuato un altro commit, molto probabilmente sarà un po 'più difficile. Per riferimento futuro, per cambiare l'ultimo commit che hai fatto, puoi usare 'git commit --amend'; questo richiederà anche una spinta forzata. –

+0

@ABMagil La mia domanda non ha nulla a che fare con il messaggio di commit. Riguarda i cambiamenti e la storia. – sparta93

risposta

12

Di solito, una volta che qualcosa è fuori su Github (o un repo pubblico), non c'è alcun modo per rendere sicuri nessun altro ha la cattiva commettere.

Se si desidera semplicemente una cronologia del codice più pulita, il modo per fare ciò che si richiede richiede di sovrascrivere la cronologia sia a livello locale che sul progetto remoto.

Quello che vuoi è fare uno git commit --amend per modificare il vecchio commit se non hai già creato un nuovo commit con le tue modifiche.

Se hai già creato un nuovo commit, ti consigliamo di utilizzare git rebase -i per schiacciare il tuo commit su quello vecchio.

Dopo aver apportato questa modifica localmente e verificato che il commit sia come desiderato, sarà necessario git push --force per sovrascrivere la cronologia sul telecomando Github.

Ecco un tutorial su come riscrivere la cronologia in git, spiega entrambi gli approcci elencati in this answer.

+0

'git push --force', pericoloso ma lo adoro – Hoto

0

Non consiglierei di farlo in quanto GIT non ha lo scopo di rimuovere e/o modificare commit. Si potrebbe semplicemente ripristinare il commit precedente e quindi eseguire nuovamente il commit del codice "valido".

Oppure puoi Rebase il tuo ramo. Oppure dai un'occhiata a questo Answer.

+1

" GIT non è inteso a rimuovere e/o modificare commit "Direi che buone pratiche di sviluppo sconsigliano tali azioni, ma GIT è" pensato per "in quel è capace e ci sono ottime ragioni per questo; come quando si commettono informazioni sensibili che non dovrebbero essere. – rainabba