2013-03-05 7 views
6

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?

+1

è possibile controllare git rebase [qui] (https://git-scm.com/docs/git-rebase # _splitting_commits) – rumman0786

+0

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 –

risposta

6

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.

+2

"e il commit dovrebbe essere sempre piccolo in git" Sicuro ... – Betamos

0

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.

6.4 Git Tools - Rewriting History

3

Ho scritto uno script per soddisfare questo scopo. Puoi verificarlo here.

utilizzando lo script sarebbe semplice come:

mv-changes HEAD~ HEAD fileA 
0

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
Problemi correlati