Quindi, ho un caso d'uso molto semplice; Voglio distruggere tutti i commit che devono tornare al master dal mio ramo di "lavoro di oggi".Come faccio a schiacciare commit in git con una data di commit che non è nel passato?
Fino ad ora ho utilizzato git rebase -i
per questo, ma non funziona correttamente; il timestamp sul commit finale non è corretto.
Ecco un esempio di fare questo:
[work1] git checkout master
Switched to branch 'master'
[work1] git rebase today
First, rewinding head to replay your work on top of it...
Fast-forwarded master to today.
[work1] git log --pretty=format:"%h%x09%an%x09%ad%x09%s"
5ad95ff Doug Wed Nov 7 10:12:42 2012 +0800 Updated TODO again
abb891c Doug Wed Nov 7 10:12:24 2012 +0800 Added more work
c5fd35c Doug Wed Nov 7 10:11:50 2012 +0800 Added more work
a98facd Doug Wed Nov 7 10:11:22 2012 +0800 Add work
b4465be Doug Tue Nov 6 21:38:53 2012 -0800 Updated TODO
403cea9 Doug Fri Jan 2 21:38:53 2009 -0800 Added todo
Destra, ora voglio schiacciare questi ultimi quattro impegna in uno commettere.
[work2] date
Wed 7 Nov 2012 10:39:39 WST
[work2] git rebase -i b4465be
pick a98facd Add work
squash c5fd35c Added more work
squash abb891c Added more work
squash 5ad95ff Updated TODO to reflect todays work
E il risultato:
[work2] git log
commit 3f7f1d2eb4ef23c73dce95f718152c7d5683a926
Author: Doug <[email protected]>
Date: Wed Nov 7 10:11:22 2012 +0800
Add work
Added more work
Added more work
Updated TODO to reflect todays work
commit b4465bee5b278214704edcfef3f6e222b5b52964
Author: Doug <[email protected]>
Date: Tue Nov 6 21:38:53 2012 -0800
Updated TODO
non Dannazione! Quello è non quello che volevo. Il timestamp del commit risultante è il timestamp del commit che abbiamo schiacciato; quello che volevo era che la nuova data di commit fosse l'ora corrente.
solo per mostrare esattamente quello che sto parlando:
[work2] date
Wed 7 Nov 2012 10:39:39 WST
Author: Doug <[email protected]>
Date: Wed Nov 7 10:11:22 2012 +0800
voglio la risultante impegnano a essere data per il momento in unione, vale a dire. ora, non il tempo del commit.
Per quanto ne so, è possibile schiacciare verso il basso in un commit precedente, non verso l'alto in un nuovo commit, ma c'è un modo per farlo?
La soluzione corretta sembra essere 1) creare un nuovo commit con il messaggio di unione e la data di commit corretta, 2) ??? < --- in qualche modo schiaccia i precedenti commit in questo.
Come posso fare?
Questo è uno dei tanti motivi per cui non sono un fan dello schiacciamento. a –
Inoltre. C'è una differenza tra la data del commit e la data dell'autore. Dipende da cosa stai facendo. –
Possibile duplicato di [git squash e preservare la data/ora dell'ultimo commit] (https://stackoverflow.com/questions/10020641/git-squash-and-preserve-last-commits-timestamp) –