Ho usato Git pesantemente per circa 7 anni. Qualche giorno fa ho trovato un comportamento che mi ha sorpreso. Ho trovato git log
, git blame
e git bisect
per mostrare questo strano comportamento. A friend fammi sapere del flag --full-history
su git log
che ha risolto il mio problema. Voglio sapere, per la mia istruzione, se esiste una soluzione equivalente per git blame
e git bisect
.Git: Equivalente di `--full-history` per` git bisect` e `git blame`
Sentitevi liberi di vedere il problema da soli con questo repo: https://dl.dropboxusercontent.com/u/1927707/problematic_repo.7z
Qui è il suo registro:
$ git log --graph
* commit b7a8d7aa001d06eb7491ab5fb447a8dd3aa421a8
| Author: Ram Rachum <[email protected]>
| Date: Tue Apr 19 17:45:01 2016 +0300
|
| adding more to some-file
|
* commit 0aa833916e908ea93902a6c4c227f9a884a1bcef
|\ Merge: 2413945 3068c7d
| | Author: Ram Rachum <[email protected]>
| | Date: Tue Apr 19 17:44:31 2016 +0300
| |
| | Merge branch 'master' into development
| |
| * commit 3068c7d2548f1798b6840f73b13a649937339f28
| | Author: Ram Rachum <[email protected]>
| | Date: Tue Apr 19 16:02:27 2016 +0300
| |
| | Adding sugar to coffee
| |
* | commit 24139451ab954b1f0a9ef616775a3dba0ac81669
|/ Author: Ram Rachum <[email protected]>
| Date: Tue Apr 19 16:01:28 2016 +0300
|
| Creating some-file
|
* commit cf02fbbc40104cd02eea4c7c6f134ef1fd7b5661
Author: Ram Rachum <[email protected]>
Date: Tue Apr 19 16:00:47 2016 +0300
Create coffee
Nel primo commit, è stato aggiunto il file coffee
. Nel commit 3068c7d
, ho aggiunto una riga "zucchero" al file coffee
. Ma poi ho unito questo ramo nel ramo development
e in questa unione è stato commesso un errore e la riga "zucchero" è stata rimossa, lasciando coffee
vuoto. Quindi un altro commit b7a8d7a
, apportando una modifica non correlata, è stato aggiunto per buona misura.
Ora sto guardando il mio caffè e non trovo zucchero. Ricordo distintamente di aggiungere zucchero al mio caffè. Corro git log coffee
, ed ottengo questo output:
$ git log coffee
commit cf02fbbc40104cd02eea4c7c6f134ef1fd7b5661
Author: Ram Rachum <[email protected]>
Date: Tue Apr 19 16:00:47 2016 +0300
Create coffee
Questo è tutto. git log
non mostra né il mio commit originale che ha aggiunto lo zucchero, né l'unione che lo ha rimosso. Due commit molto rilevanti che mancano.
Sono stato frustrato per circa un'ora da questo problema, perché è successo in un enorme repo aziendale, dove i commit sono molto più difficili da trovare manualmente.
Ho anche provato a utilizzare git bisect
e git blame
per bloccare i due commit, ma entrambi questi strumenti ignoravano i due commit. git bisect
mi ha indirizzato al commit sbagliato dopo aver completato tutte le azioni git bisect bad
e git bisect good
.
Poi, come ho detto all'inizio, un amico mi ha segnalato verso la bandiera --full-history
:
$ git log --full-history --graph coffee
* commit 0aa833916e908ea93902a6c4c227f9a884a1bcef
|\ Merge: cf02fbb 3068c7d
| | Author: Ram Rachum <[email protected]>
| | Date: Tue Apr 19 17:44:31 2016 +0300
| |
| | Merge branch 'master' into development
| |
| * commit 3068c7d2548f1798b6840f73b13a649937339f28
|/ Author: Ram Rachum <[email protected]>
| Date: Tue Apr 19 16:02:27 2016 +0300
|
| Adding sugar to coffee
|
* commit cf02fbbc40104cd02eea4c7c6f134ef1fd7b5661
Author: Ram Rachum <[email protected]>
Date: Tue Apr 19 16:00:47 2016 +0300
Create coffee
Questo mi rende felice perché mostra i due commit rilevanti, quello di zucchero aggiungendo e l'unione che ha rimosso esso. Quindi il mio problema è risolto. Ma mi piacerebbe davvero sapere come si comportano anche git bisect
e git blame
. Qualcuno capita di saperlo?
'git blame' può ben permettere' --full-storia 'direttamente qui (lo proverei sul tuo repository ma non posso decomprimere un file 7zip). Bisect potrebbe rifiutarsi di toccare le unioni poiché le gestisce da sé. In generale non si vedono queste cose perché 'git rev-list' salta un sacco di fusioni: vedere la discussione della documentazione su TREESAME e unire la gestione (e in che modo --full-history lo altera). – torek
@torek L'ho provato ora, 'blame' sembra accettare la bandiera ma sembra che non cambi nulla. Provando entrambi git blame --full-history' e 'git blame --full-history --reverse' non hanno mostrato risultati. Per quanto riguarda l'impossibilità di aprire archivi 7z, qui è in zip: https://dl.dropboxusercontent.com/u/1927707/foo.zip –
@torek Anche provato 'git blame --reverse HEAD ^^^ .. HEAD --full-history coffee', ancora senza ottenere nulla. –