Vraag Hoe toon ik de veranderingen die zijn geënsceneerd?


Ik heb een aantal veranderingen geïmplementeerd om te worden vastgelegd; hoe kan ik de diff van alle bestanden zien die worden geënsceneerd voor de volgende commit? ik ben bewust van git status, maar ik zou graag de werkelijke diff willen zien - niet alleen de namen van bestanden die in scène zijn gezet.

Ik zag dat het git-diff (1) man pagina zegt

git diff [--opties] [-] [...]

Dit formulier is om de wijzigingen te bekijken die u hebt aangebracht ten opzichte van de index (staging-gebied voor de volgende commit). Met andere woorden, de verschillen zijn wat jij kon vertel git om verder aan de index toe te voegen, maar dat heb je nog steeds niet. Je kunt deze veranderingen uitvoeren met git-add (1).

Helaas begrijp ik dit niet helemaal. Er moet een handige one-liner zijn waar ik een alias voor kan maken, toch?


1694
2017-10-19 09:57


oorsprong


antwoorden:


Het zou gewoon moeten zijn:

git diff --cached

--cached betekent de wijzigingen in de cache / index (dat wil zeggen getrapte wijzigingen) ten opzichte van de stroom HEAD. --staged is een synoniem voor --cached.

--staged en --cached wijst niet naar HEAD, gewoon verschil met betrekking tot HEAD. Als je weet wat je wilt committen git add --patch (of git add -p) --staged zal teruggeven wat er wordt opgevoerd.


2095
2017-10-19 10:07



Een eenvoudige afbeelding maakt dit duidelijker:

Simple Git diffs

git diff

Toont de wijzigingen tussen de werkdirectory en de index. Dit laat zien wat er is veranderd, maar is niet geënsceneerd voor een commit.

git diff --cached

Toont de veranderingen tussen de index en de HEAD (wat de laatste commit in deze branch is). Dit toont wat is toegevoegd aan de index en in scène gezet voor een commit.

git diff HEAD

Toont alle wijzigingen tussen de werkdirectory en HEAD (inclusief wijzigingen in de index). Dit toont alle veranderingen sinds de laatste commit, ongeacht of ze al of niet zijn gefotografeerd voor commit.

Ook:

Er is een beetje meer informatie over 365Git.


1410
2017-10-24 21:05



Als u geïnteresseerd bent in een visueel zij-aan-zij-aanzicht, is het diffuus visuele diff-tool kan dat doen. Het toont zelfs drie vensters als sommige, maar niet alle, wijzigingen zijn doorgevoerd. In het geval van conflicten zullen er zelfs vier panelen zijn.

Screenshot of diffuse with staged and unstaged edits

Roep het aan

diffuse -m

in je Git-werkkopie.

Als je het mij vraagt, verschillen de beste visuele verschillen die ik heb gezien voor een decennium. Het is ook niet specifiek voor Git: het werkt samen met een overvloed aan andere VCS, waaronder SVN, Mercurial, Bazaar, ...

Zie ook: Toon zowel geënsceneerde als werkende boom in git diff?


51
2018-03-18 07:22



Let daar op git status -v  ook toont de geënsceneerde veranderingen! (wat betekent dat je moet worden opgevoerd - git add - enkele wijzigingen. Geen geënsceneerde wijzigingen, geen diff met git status -v.
Het doet dat sindsdien Git 1.2.0, februari 2006)

In zijn lange vorm (standaard), git status heeft een "verbose" -optie zonder papieren die feitelijk de diff tussen HEAD en index weergeeft.

En het wordt nog completer: zie "Toon zowel geënsceneerde als werkende boom in git diff?"(git 2.3.4+, Q2 2015):

git status -v -v

37
2017-08-31 10:05



U kunt deze opdracht gebruiken.

git diff --cached --name-only

De --cachedoptie van git diff betekent om gefaseerde bestanden te krijgen, en de --name-only optie betekent alleen namen van de bestanden.


22
2017-07-19 17:39



Vanaf versie 1.7 en later zou het moeten zijn:

git diff --staged

14
2017-08-14 23:33



GEBRUIK VAN EEN VISUEEL DIFF TOOL

Het standaardantwoord (op de opdrachtregel)

De beste antwoorden hier laten zien hoe de gecachte / gefaseerde veranderingen in de Index:

$ git diff --cached

of $ git diff --staged wat een alias is.


In plaats daarvan start de Visual Diff-tool

Het standaardantwoord spuugt de diff-veranderingen uit bij de git bash (dus op de opdrachtregel of in de console). Voor diegenen die een visuele representatie van de geënsceneerde bestandsverschillen verkiezen, is er een script beschikbaar binnen git dat een visuele diff-tool voor elk bekeken bestand start in plaats van ze op de opdrachtregel weer te geven, genaamd difftool:

$ git difftool --staged

Dit zal hetzelfde doen als git diff --staged, behalve wanneer het diff-gereedschap wordt uitgevoerd (dat wil zeggen elke keer dat een bestand wordt verwerkt door diff), wordt het standaard visuele diff-hulpmiddel gestart (in mijn omgeving is dit kdiff3).

Nadat de tool is gestart, zal het git diff-script worden onderbroken totdat je visuele diff-tool wordt gesloten. Daarom moet u elk bestand sluiten om het volgende te kunnen zien.


Je kunt altijd gebruiken difftool in plaats van diff in git-commando's

Voor al uw visuele diff-behoeften, git difftool zal werken in plaats van een git diff commando, inclusief alle opties.

Als u bijvoorbeeld de visuele diff-tool wilt starten zonder te vragen of dit voor elk bestand wordt gedaan, voegt u het toe -y optie (ik denk dat je dit meestal wel wilt !!):

$ git difftool -y --staged

In dit geval zal het elk bestand in het visuele diff-gereedschap een voor een omhoogtrekken en de volgende optellen nadat het gereedschap is gesloten.

Of om te kijken naar de diff van een bepaald bestand dat wordt geënsceneerd in de Index:

$ git difftool -y --staged <<relative path/filename>>

Voor alle opties, zie de man-pagina:

$ git difftool --help


Visual Git-tool instellen

Als u een andere visuele git-tool dan de standaard gebruikt, gebruikt u de -t <tool> keuze:

$ git difftool -t <tool> <<other args>>

Of kijk op de pagina difftool man voor het configureren van git om een ​​ander standaard visueel diff-hulpmiddel te gebruiken.


10
2018-03-14 14:30



Als u meer dan één bestand met gefaseerde wijzigingen hebt, is het misschien praktischer om te gebruiken git add -ien selecteer vervolgens 6: diffen kies uiteindelijk het bestand (en) waarin je geïnteresseerd bent.


7
2017-10-14 18:32



Als je van plan bent om een ​​remote repo branch te pushen en je eerste pass in een commit change log onvolledig was, kun je de commit-statement corrigeren voordat je op deze manier pusht.

plaatselijk

... een paar wijzigingen aanbrengen ...

git diff # look at unstaged changes

git commit -am"partial description of changes"

... meer wijzigingen oproepen die niet zijn vermeld in commit ...

git diff origin / master # kijken naar geënsceneerde maar niet gepushte wijzigingen

... wijzig de gefaseerde commit-instructie ...

git commit --amend -m"i missed mentioning these changes ...."

git push

7
2018-02-25 21:16



Gebruik voor vergelijkingen tussen Staging Area en Repository

$git diff --staged

Voor gebruik versus Repository vergelijking gebruik

$ git diff 

maar als een bestand wordt gewijzigd en toegevoegd aan het fasegebied ($ git add fileName) en we proberen het verschil te zien met ( $ git diff). Het zal geen verschil opleveren, omdat het bestand zich in het faseringsgebied bevindt en het niet zal worden vergeleken met de repository.


7
2017-11-20 06:30