Vraag Bekijk de wijzigingsgeschiedenis van een bestand met Git versioning


Hoe kan ik de wijzigingsgeschiedenis van een afzonderlijk bestand in Git bekijken, details invullen met wat er is gewijzigd?

Ik heb zo ver als:

git log -- [filename]

die me de commit-geschiedenis van het bestand laat zien, maar hoe kom ik bij de inhoud van elk van de bestandswijzigingen?

Ik probeer de overstap te maken van MS SourceSafe en dat was vroeger een simpele right-click → show history.


2502
2017-11-10 15:42


oorsprong


antwoorden:


Hiervoor zou ik gebruiken:

gitk [filename]

of om bestandsnamen te volgen die voorbij hernoemingen zijn

gitk --follow [filename]

1947
2017-08-24 12:05



Je kunt gebruiken

git log -p filename

om git de patches voor elk logboekinvoer te laten genereren.

Zien

git help log

voor meer opties - het kan eigenlijk heel veel leuke dingen doen :) Om alleen de diff te krijgen voor een specifieke commit die je kunt

git show HEAD 

of een andere revisie per identifier. Of gebruik

gitk

om visueel door de wijzigingen te bladeren.


1832
2017-11-10 15:56



git log --follow -p -- file

Dit toont de geheel geschiedenis van het bestand (inclusief geschiedenis voorbij hernamen en met diff's voor elke verandering).

Met andere woorden, als het bestand met de naam bar werd ooit genoemd foo, dan git log -p bar (zonder de --follow optie) toont alleen de geschiedenis van het bestand tot het punt waar het werd hernoemd - het zal de geschiedenis van het bestand niet tonen toen het bekend stond als foo. Gebruik makend van git log --follow -p bar toont de volledige geschiedenis van het bestand, inclusief eventuele wijzigingen in het bestand wanneer dit bekend was foo. De -p optie zorgt ervoor dat diff's worden opgenomen voor elke wijziging.


1184
2018-03-30 23:25



Als u liever tekst-gebaseerd blijft, wilt u misschien gebruiken tig.

Snelle installatie:

  • apt-get: # apt-get install tig 
  • Homebrew (OS X): $ brew install tig

Gebruik het om de geschiedenis in een enkel bestand te bekijken: tig [filename]
Of blader door de gedetailleerde repogeschiedenis: tig

Gelijkwaardig aan gitk maar op tekst gebaseerd. Ondersteunt kleuren in terminal!


146
2018-06-07 10:23



git whatchanged -p filename is ook equivalent aan git log -p filename in dit geval.

U kunt ook zien wanneer een specifieke regel code in een bestand is gewijzigd git blame filename. Dit zal een korte commit-id, de auteur, tijdstempel en complete regel code voor elke regel in het bestand afdrukken. Dit is erg handig nadat je een bug hebt gevonden en je wilt weten wanneer deze is geïntroduceerd (of wie de fout was).


101
2017-11-11 06:12



SourceTree-gebruikers

Als u SourceTree gebruikt om uw repository te visualiseren (het is gratis en vrij goed), kunt u met de rechtermuisknop op een bestand klikken en selecteren Geselecteerd log

enter image description here

Het scherm (hieronder) is veel vriendelijker dan gitk en de meeste andere genoemde opties. Helaas (op dit moment) is er geen eenvoudige manier om deze weergave vanaf de opdrachtregel te starten - SourceTree's CLI opent momenteel alleen repo's.

enter image description here


91
2017-07-30 18:55



Om aan te geven welke revisie en auteur als laatste elke regel van een bestand hebben gewijzigd:

git blame filename

of als je de krachtige GUI voor verwijten wilt gebruiken:

git gui blame filename

56
2017-08-11 13:01



Samenvatting van andere antwoorden na het lezen en een beetje spelen:

Het gebruikelijke opdrachtregelcommando zou zijn

git log --follow --all -p dir/file.c

Maar je kunt ook gitk (gui) of tig (text-ui) gebruiken om veel menselijker leesbare manieren te geven om ernaar te kijken.

gitk --follow --all -p dir/file.c

tig --follow --all -p dir/file.c

Onder debian / ubuntu is de installatieopdracht voor deze mooie gereedschappen zoals verwacht:

sudo apt-get install gitk tig

En ik gebruik momenteel:

alias gdf='gitk --follow --all -p'

zodat ik gewoon kan typen gdf dir om een ​​gefocuste geschiedenis van alles in de subdirectory te krijgen dir.


39
2017-12-05 18:38



Voeg dit alias toe aan uw .gitconfig:

[alias]
    lg = log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\n--abbrev-commit --date=relative

En gebruik het commando als volgt:

> git lg
> git lg -- filename

De uitvoer ziet er bijna exact hetzelfde uit als de gitk-uitvoer. Genieten.


22
2018-06-26 20:12