Hoe bestanden van twee verschillende branches te vergelijken

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 diffkan 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.cszeggen in plaats van myfile.cs.

Als een van beide zijden HEADis, mag deze worden weggelaten (bijv. master..vergelijkt mastermet HEAD).

Misschien ben je ook geïnteresseerd in mybranch...master(van git diffdocumentatie):

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...Bis gelijk aan git diff $(git-merge-base A B) B.

Met andere woorden, dit geeft een verschil van wijzigingen in masteraangezien 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 difftoolals 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 als master.
  • 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 branch1zijn in rood weergegeven. Wijzigingen in branch2zijn groen.

Er wordt aangenomen dat branch1het verleden is en branch2de 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 diffop 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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes