Ho due commit sullo stesso ramo, uno subito dopo l'altro. Ho aggiunto le modifiche al file A al primo commit, quindi ho apportato alcune modifiche ad altri file e quindi eseguito un altro commit. Ora voglio che le modifiche al file A siano sul secondo commit piuttosto che sul primo. Qual è il modo più elegante?Come devo spostare le modifiche da un commit a un altro?
risposta
Se sono piccole commit, e si commette dovrebbe sempre essere piccolo in git, il modo più semplice è quello di git reset HEAD^^
e poi basta fare di nuovo. Nota che qualsiasi soluzione a questo comporta la riscrittura della cronologia e se hai già inserito questi commit da qualche parte, non dovresti farlo se non sai cosa stai facendo.
"e il commit dovrebbe essere sempre piccolo in git" Sicuro ... – Betamos
Risposta abbastanza coinvolgente ma fondamentalmente Squash e Rebase.
vedere qui: http://davidwalsh.name/squash-commits-git
Nell'evento, probabilmente improbabile, in cui sono stati appena creati tali commit, annullare il secondo commit con git reset HEAD^
e quindi aggiungere le modifiche al primo commit con git commit --amend
.
Nell'evento più probabile in cui si è passati e il commit è stato ad un certo punto nel passato, il rebasing è la scelta migliore. Senza conoscere la tua situazione esatta, citare un riferimento che lo spiega bene è probabilmente il migliore.
Sia nel primo che nel secondo evento, la sezione del libro di Pro Git sulla cronologia della riscrittura spiega bene le opzioni - sia quando devono essere utilizzate sia quando è necessario prestare attenzione.
Ho scritto uno script per soddisfare questo scopo. Puoi verificarlo here.
utilizzando lo script sarebbe semplice come:
mv-changes HEAD~ HEAD fileA
Un'altra soluzione a questo problema
- Trova il commit poco prima che i due commit (probabilmente questo è il ramo master)
- Eseguire
git rebase -i <commit before commits to be reordered>
(git rebase -i master
nella maggior parte dei casi) - Nell'editor di testo, scambiare l'ordine dei commit (per Vim, utilizzare la sequenza ENCE
ddp
mentre sulla linea che dovrebbe spostare verso il basso) - Salva, chiudere, e lasciare che git rebase fare il resto
- 1. come spostare le modifiche in commit-but-unpushed in un altro ramo?
- 2. Ripristina le modifiche a un file in un commit
- 3. Git: Come spostare le modifiche dall'ultimo commit a un nuovo ramo
- 4. git applica le modifiche da un commit su un altro ramo
- 5. Come visualizzare le modifiche a un file prima del commit?
- 6. Unisci tutte le modifiche da un altro ramo come singolo commit
- 7. Devo eseguire un commit dopo un rebase?
- 8. Spostare un file/directory, ma ancora unire facilmente le modifiche?
- 9. Git: spostare un commit "in primo piano"
- 10. Git: ottenere modifiche da un altro ramo
- 11. Come spostare tutti i commit da un ramo all'altro?
- 12. Da master, commit in un altro ramo
- 13. Come spostare la tabella da un tablespace a un altro in oracle 11g
- 14. In Mercurial, posso applicare le modifiche da un file a un altro file nello stesso ramo?
- 15. Come unire le modifiche da un contesto di oggetti gestito da bambino a un altro tramite un MOC principale?
- 16. Esportazione del registro delle modifiche da un commit su GitHub
- 17. Come spostare il repository git locale da un hdd a un altro hdd?
- 18. Come spostare html da un div a un altro con Jquery senza rompere javascript
- 19. Come devo spostare o eliminare file in un generatore Yeoman?
- 20. Utilizzando git, come si spostano alcune modifiche non salvate da un ramo a un altro ramo in una cartella diversa?
- 21. Devo cancellare un commit su un fork
- 22. Copia 1 commit da un ramo (dev) a un altro (stabile) con dir direttrice pulita
- 23. Come posso spostare i dati direttamente da un progetto di Google Cloud Storage a un altro?
- 24. Come spostare lo stato attivo da un pulsante a un altro in tvOS?
- 25. Come posso spostare elementi da un elenco a un altro elenco in C#?
- 26. Come spingere da un repository git nudo a un altro?
- 27. Spostare un valore in un altro ambiente
- 28. Il Docker commit non salva le modifiche
- 29. Come copiare un database da un computer a un altro?
- 30. Come inviare un valore da un componente a un altro?
è possibile controllare git rebase [qui] (https://git-scm.com/docs/git-rebase # _splitting_commits) – rumman0786
Questa domanda è un caso speciale di "Squash my last X commit insieme usando Git" https://stackoverflow.com/questions/5189560/squash-my-last-x-commits-together-using -gitare –