Ik heb een script dat in de ene branch prima werkt en in een andere niet werkt. Ik wil de twee versies naast elkaar bekijken en zien wat er anders is. Is er een manier om dit te doen?
Voor alle duidelijkheidik ben niet op zoek naar een vergelijkingstool (ik gebruik Meer dan vergelijken). Ik ben op zoek naar een Git diff-opdracht waarmee ik de hoofdversie kan vergelijken met mijn huidige branchversie om te zien wat er is veranderd. Ik zit niet midden in een fusie of zo. Ik wil alleen iets zeggen als
git diff mybranch/myfile.cs master/myfile.cs
Antwoord 1, autoriteit 100%
git diff
kan je het verschil tussen twee commits laten zien:
git diff mybranch master -- myfile.cs
Of, equivalent:
git diff mybranch..master -- myfile.cs
Let op: u moet het relatieve pad naar het bestand opgeven. Dus als het bestand zich in de src-directory zou bevinden, zou je src/myfile.cs
zeggen in plaats van myfile.cs
.
Als een van beide zijden HEAD
is, mag deze worden weggelaten (bijv. master..
vergelijkt master
met HEAD
).
Misschien ben je ook geïnteresseerd in mybranch...master
(van git diff
documentatie):
Dit formulier is om de wijzigingen op de branch te bekijken die en tot en met de tweede
<commit>
bevatten, beginnend bij een gemeenschappelijke voorouder van beide<commit>
.git diff A...B
is gelijk aangit diff $(git-merge-base A B) B
.
Met andere woorden, dit geeft een verschil van wijzigingen in master
aangezien het afweek van mybranch
(maar zonder nieuwe wijzigingen sindsdien in mybranch
).
In alle gevallen geeft het --
scheidingsteken voor de bestandsnaam het einde van de opdrachtregelvlaggen aan. Dit is optioneel, tenzij Git in de war raakt als het argument verwijst naar een commit of een bestand, maar het opnemen ervan is geen slechte gewoonte om in te stappen. Zie Het antwoord van Dietrich Epp op Betekenis van Git checkout dubbele streepjesvoor een paar voorbeelden.
Dezelfde argumenten kunnen worden doorgegeven aan git difftool
als je er een hebt geconfigureerd.
Antwoord 2, autoriteit 19%
U kunt dit doen:
git diff branch1:path/to/file branch2:path/to/file
Als je difftool hebt geconfigureerd, kun je ook:
git difftool branch1:path/to/file branch2:path/to/file
Verwante vraag:
Hoe bekijk ik ‘git diff ‘ output met mijn favoriete diff tool/viewer?
Antwoord 3, autoriteit 7%
Moderne syntaxis:
git diff ..master path/to/file
Het voorvoegsel met dubbele punt betekent “van de huidige werkmap naar”. Je kunt ook zeggen:
master..
, d.w.z. het omgekeerde van hierboven. Dit is hetzelfde alsmaster
.mybranch..master
, expliciet verwijzend naar een andere status dan de huidige werkboom.v2.0.1..master
, d.w.z. verwijzend naar een tag.[refspec]..[refspec]
, eigenlijk alles dat identificeerbaar is als een codestatus voor Git.
Antwoord 4
Er zijn veel manieren om bestanden van twee verschillende branches te vergelijken:
-
Optie 1:Als u het bestand van een specifieke vertakking wilt vergelijken met een andere specifieke vertakking:
git diff branch1name branch2name path/to/file
Voorbeeld:
git diff mybranch/myfile.cs mysecondbranch/myfile.cs
In dit voorbeeld vergelijk je het bestand in de tak mybranch met de
bestand in de tak mysecondbranch . -
Optie 2:Eenvoudige manier:
git diff branch1:file branch2:file
Voorbeeld:
git diff mybranch:myfile.cs mysecondbranch:myfile.cs
Dit voorbeeld is vergelijkbaar met optie 1.
-
Optie 3:Als je je huidige werkdirectory wilt vergelijken met een vertakking:
git diff ..someBranch path/to/file
Voorbeeld:
git diff ..master myfile.cs
In dit voorbeeld vergelijk je het bestand van je huidige branch met
het bestand in de master branch.
Antwoord 5
Als je een diff wilt maken tegen de huidige branch, kun je deze committen en gebruiken:
git diff $BRANCH -- path/to/file
Op deze manier zal het verschillen van de huidige branch naar de branch waarnaar wordt verwezen ($BRANCH
).
Antwoord 6
Ik doe gewoon git diff branch1 branch2 path/to/file
Dit controleert op verschillen tussen de bestanden. Wijzigingen in branch1
zijn in rood weergegeven. Wijzigingen in branch2
zijn groen.
Er wordt aangenomen dat branch1
het verleden is en branch2
de toekomst. Je kunt dit omkeren door de volgorde van de branches in de diff om te keren: git diff branch2 branch1
Antwoord 7
Ik ga akkoord met het antwoord van dahlbyk. Als je wilt dat de diff naar een diff-bestand wordt geschreven voor codebeoordelingen, gebruik dan de volgende opdracht.
git diff branch master -- filepath/filename.extension > filename.diff --cached
Antwoord 8
Er zijn twee scenario’s om bestanden te vergelijken:
Scenario 1:Vergelijk bestanden op externe vertakkingen (beide vertakkingen zouden in de externe repository moeten bestaan)
Scenario 2:Vergelijk lokale bestanden (kopie in het lokale werkgebied) met de bestanden in de externe repository.
De logica is eenvoudig. Als je twee vertakkingsnamen aan diff geeft, zal het altijd de vertakkingen op afstand vergelijken, en als je slechts één vertakkingsnaam opgeeft, zal het altijd je lokale werkkopie vergelijken met de verre repository (degene die je hebt opgegeven). U kunt bereik gebruiken om externe opslagplaatsen aan te bieden.
Bijvoorbeeld, bekijk een filiaal:
git checkout branch1
git diff branch2 [filename]
In dit geval, als je bestandsnaamopgeeft, zal het je lokale kopie van bestandsnaamvergelijken met de remote branch genaamd “branch2“.
git diff branch1 branch2 [filename]
In dit geval vergelijkt het bestandsnaamvan externe branches met de naam “branch1” versus “branch2“
git diff ..branch2 [filename]
Ook in dit geval vergelijkt het de bestandsnaam van externe branches met de naam “branch1” versus “branch2“. Het is dus hetzelfde als hierboven. Als je echter net een branch van een andere branch hebt gemaakt, zeg “master” en je huidige branch bestaat niet in de remote repository, dan zal het remote “master” vergelijken met remote “tak2“.
Antwoord 9
In mijn geval gebruik ik het onderstaande commando:
git diff <branch name> -- <path + file name>
Deze opdracht kan je helpen hetzelfde bestand in twee verschillende branches te vergelijken.
Antwoord 10
De beste manier om dit te doen is door git diff
op de volgende manier te gebruiken:
git diff <source_branch> <target_branch> -- file_path
Het zal het verschil tussen bestanden in die branches controleren. Bekijk dit artikel voor meer informatie over Git-commando’sen hoe ze werken.
Antwoord 11
Gebruik commit-hashes als volgt:
git diff <hash1> <hash2> <filename>
waar hash1elke commit van elke branch kan zijn, en hetzelfde voor hash2.
Antwoord 12
Als je twee bestanden in Git Bashwilt vergelijken, heb je om de opdracht te gebruiken:
git diff <Branch name>..master -- Filename.extension
Dit commando laat het verschil zien tussen de twee bestanden in Bash zelf.
Antwoord 13
Er is nog een interessant punt over deze verschillende manieren om de vergelijking uit te voeren: ik wil een bestand in mijn huidige branch vergelijken met hetzelfde bestand in een andere branch. Als ik gebruik
git difftool otherbranch.. filespec
Ik vergelijk uiteindelijk twee bestanden die in mijn tijdelijke map staan. Als ik echter
git difftool otherbranch filespec
Ik vergelijk uiteindelijk een bestand in mijn tijdelijke map (de versie op otherbranch) met het daadwerkelijke bestand in mijn Git-map, wat a) het veel gemakkelijker maakt om te zien wat wat is, en b ) betekent dat ik de diff-tool (Beyond Compare 4 in mijn geval) kan gebruiken om wijzigingen van mijn andere branch naar mijn huidige branch te kopiëren.