„Git“ skiriasi nuo paskutinio pakeitimo

Ar galima gauti gitą, kad būtų sukurtas skirtumas tarp konkretaus failo, kaip jis egzistuoja ir kaip jis egzistavo prieš paskutinį įvykį, kuris jį pakeitė?

Tai yra, jei žinome:

 $ git log --oneline myfile 123abc Fix some stuff 456def Frobble the foos 789dba Initial commit 

Tada git diff 456def myfile rodo paskutinį mano failo pakeitimą. Ar galima tai padaryti ir be git log sukurtų žinių; Kas pasikeitė 123abc?

156
16 апр. „Chowlett“ nustatytas balandžio 16 d 2012-04-16 17:59 '12, 17:59, 2012-04-17 17:59
@ 3 atsakymai

Jis egzistuoja, bet iš tikrųjų tai yra git log funkcija:

 git log -p [--follow] [-1] <path> 

Atkreipkite dėmesį, kad -p taip pat gali būti naudojamas norint parodyti integruotą skirtumą iš vieno įvykio:

 git log -p -1 <commit> 

Naudotos parinktys:

  • -p (taip pat -u arba --patch ) yra paslėptas deeeeeeeep git-log man puslapyje ir iš tikrųjų yra „ git-diff rodymo parinktis. Naudojant su log , faktiškai rodomas pleistras, kuris bus sukurtas kiekvienam įvykiui kartu su įsipareigojimo informacija, ir slepia įsipareigojimus, kurie neliečia nurodyto <path> . (Šis elgesys yra aprašytas --full-diff , kuri lemia visišką kiekvieno įsipareigojimo atskyrimą.)
  • -1 rodo tik paskutinį nurodyto failo pakeitimą ( -n 1 gali būti naudojamas vietoj -1 ); kitaip rodomi visi nulinės šio failo skirtumai.
  • --follow reikia norint pamatyti pakeitimus, įvykusius prieš pervadinant.

Kiek aš galiu pasakyti, tai yra vienintelis būdas nedelsiant pamatyti paskutinį failo pakeitimų rinkinį, nenaudojant „ git log (ar panašių), kad būtų galima skaičiuoti tarpinių pataisymų skaičių arba nustatyti maišos atlikimą.

Jei norite matyti senesnių versijų pakeitimus, tiesiog peržiūrėkite žurnalą arba nurodykite pataisą arba žymą, iš kurios norite paleisti žurnalą. (Žinoma, nurodant įsipareigojimą ar žymę, grįšite į pradinę problemą, nustatančią, kas yra teisingas įsipareigojimas ar žyma.)

Paskola, kuria turėtų būti suteikta paskola:

  • Dėl šio atsakymo rasta log -p .
  • FranciscoPuga kreditas ir šis atsakymas parodys man galimybę - --follow .
  • „ChrisBetti“ kreditas paminėjo -n 1 ir atatko parinktis, nurodydamas -1 variantą.
  • Ačiū sweaver2112 už faktiškai skaitytą dokumentaciją ir sužinoti, kad -p reiškia "semantiškai".
123
14 марта '14 в 20:47 2014-03-14 20:47 atsakymą pateikė Kyle Strand, kovo 14 d., 14 d., 20:47, 2014-03-14 20:47

Vienas iš būdų naudoti „git diff“ yra:

 git diff <commit> <path> 

Ir bendras vieno paskutinio fiksavimo fiksavimo metodas yra santykinis kelias į faktinį HEAD. Ankstesnius įrašus galite peržiūrėti kaip HEAD ^ (jūsų pavyzdyje, tai bus 123abc) arba HEAD ^^ (456def jūsų pavyzdyje) ir kt.

Taigi, atsakymas į jūsų klausimą:

 git diff HEAD^^ myfile 
187
16 апр. Atsakymas duotas Francisco Puga balandžio 16 d 2012-04-16 18:08 '12, 18:08, 2012-04-16 18:08

Jei naudojate grafinį įrankį, jis veikia labai gerai:

 gitk <file> 

„gitk“ dabar rodo visus įvykius, kai failas buvo atnaujintas. Fiksavimo žymėjimas parodys skirtumą su ankstesniu įrašu sąraše. Tai taip pat veikia ir katalogams, bet tada galite pasirinkti ir failą, skirtą skirtingoms parinktims. Labai naudinga!

3
17 авг. atsakymas duotas Martin 17 rug. 2016-08-17 21:20 '16 at 21:20 2016-08-17 21:20

Peržiūrėkite kitus klausimus apie „ žymes arba užduokite klausimą