2012-01-23 3 views
6

So che i rebite GIT riscriveranno la cronologia, ovvero gli ID commit cambieranno. Tuttavia, esiste un modo per rintracciare quando un ramo è stato ridefinito e da quale ramo?Rebases log Git

MODIFICA: Ho un ramo di sviluppo 'A' e un ramo di argomento 'B'. 'A' è condiviso dal team. A un certo punto, "A" è stato ri-basato con una branca mainstream. Come risultato della ri-base (e dei successivi commit), quando ho aggiornato il ramo dell'argomento, ho visto delle discrepanze. Sto cercando di trovare la persona giusta con cui parlare per risolvere i problemi.

risposta

8

Probabilmente puoi dire chi è stato! Quando esegui il rebase, dal momento che i commit vengono riscritti, le informazioni sul committer saranno dalla persona che sta eseguendo il rebase, non dall'autore originale. (Questo è separato dalle informazioni dell'autore.)

È possibile visualizzare queste informazioni in gitk (nel pannello differenze in basso a sinistra) o nell'output di git log --pretty=fuller (come in più pieno che pieno). Esempio di output del registro:

commit b8624718b97a39a04637c91ec3517c109f3f681d 
Author:  Original Author <[email protected]> 
AuthorDate: Sun Aug 8 02:15:10 2010 -0300 
Commit:  New Committer <[email protected]> 
CommitDate: Mon Jan 23 17:29:39 2012 -0800 

    a lovely commit message 

... 

Il nome del committer, l'e-mail e la data provengono dall'operazione che ha effettivamente scritto il commit. Nota che se è stato riscritto più volte, avrai solo le informazioni più recenti.

Per quanto riguarda dove è stato ribattezzato da ... se la versione originale dei commit rebased sono anche nella cronologia, è facile.Basta cercare la cronologia completa per un abbinamento commettere, per esempio, da un frammento del messaggio di commit, o da qualcosa che è stato modificato nel commettere:

git log --all --grep='commit subject from a rebased commit' 
git log --all -S'void this_function_was_added() {' 

Se non avete l'originale commit ovunque nella storia più , sarà più difficile. Spero che sarete in grado di scoprire rintracciando la persona che l'ha fatto e, se non lo sanno, chiedendo loro di eseguire git reflog show <branch> nel loro repository, per vedere la storia di quel ramo.

2

Reflog è un meccanismo per registrare quando viene aggiornata la punta dei rami. Questo comando è per gestire le informazioni registrate in esso.

"Fondamentalmente ogni azione che si esegue all'interno del Git in cui sono memorizzati i dati, si può trovare all'interno del reflog. Git cerca veramente difficile non perdere i vostri dati, quindi se per qualche motivo si ritiene vi sia, è probabile che tu possa estrarlo usando git reflog. Ciò significa che puoi usarlo come rete di sicurezza: non dovresti essere preoccupato che un'unione, un rebase o qualche altra azione distruggeranno il tuo lavoro dal momento che puoi trovarlo di nuovo usando questo comando. "

Maggiori informazioni su questo argomento in

+3

Solo un commento che questa cronologia esiste solo sul repository in cui è stata eseguita l'azione. Non troverai la storia di qualcun altro nel tuo repository. –

5
git reflog 

vi permetterà di guardare la storia di tutto il vostro flusso di lavoro git. Su un progetto su cui sto lavorando, ecco le prime tre voci di reflog:

151a1da [email protected]{0}: filter-branch: rewrite 
db8c822 [email protected]{1}: checkout: moving from fixes to master 
db8c822 [email protected]{2}: checkout: moving from master to fixes 

La prima colonna mostra SHAID. Quindi puoi usare i comandi git standard su questo SHAID ad es. git show 151a1da