Hoe vergelijk je een lokale Git branch met zijn remote branch

Hoe kan ik de diffzien tussen een lokale vestiging en een externe vestiging?


Antwoord 1, autoriteit 100%

Om remote tracking branches bij te werken, moet je eerst git fetchtypen en daarna:

git diff <mainbranch_path> <remotebranch_path>

Je kunt git branch -agebruiken om alle branches (lokaal en remote) weer te geven en dan de branchnaam uit de lijst te kiezen (verwijder gewoon remotes/uit de remote branch naam.

Voorbeeld: git diff main origin/main(waarbij “main” de lokale main branch is en “origin/main” een remote is, namelijk de origin en main branch.)


Antwoord 2, autoriteit 92%

git diff <local branch> <remote>/<remote branch>

Bijvoorbeeld git diff main origin/main, of git diff featureA origin/next

Om de remote-tracking branchte hebbenmoet je eerst git fetchhebben; en je hebt het nodig om up-to-date informatie te hebben over branches in de remote repository.


Antwoord 3, autoriteit 26%

Eerste type

git branch -a

om de lijst met beschikbare branches te krijgen. Op de uitvoer zie je misschien iets als

* master
  remotes/main/master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/mt
  remotes/upstream/master
  remotes/upstream/mt

Toon vervolgens het verschil

git diff --stat --color remotes/main/master..origin/master
git diff remotes/main/master..origin/master

Antwoord 4, autoriteit 25%

Als je in een bepaalde branch zit en je wilt je werkkopievergelijken met de upstream branch die je volgt, gebruik dan:

git diff @{upstream}

Als u uw huidige hoofd wilt vergelijken met de stroomopwaartse tak (bedankt @arijoon ):

git diff @ @{upstream}

Als uw stroomopwaartse niet is ingesteld, kunt u @{push}gebruiken om een ​​diff tegen de tak te krijgen waaraan u bent ingesteld Druk op (ook van @arijoon ‘s commentaar):

git diff @{push}

Courtesy van dit antwoord , de git-documentatie voor Opgeven van revisies heeft:

<branchname>@{upstream}, b.v. master@{upstream}, @{u}
Het achtervoegsel
@{upstream}naar een filiaal (korte vorm <branchname>@{u}) verwijst naar
de tak die de tak gespecificeerd door branchnameis ingesteld om op te bouwen
Bovenaan (geconfigureerd met branch.<name>.remoteen branch.<name>.merge).
Een ontbrekende branchnamestandaardinstellingen op de huidige.


Antwoord 5, Autoriteit 6%

Ik begrijp veel beter de uitvoer van:

git diff <remote-tracking branch> <local branch>

Dat laat me zien wat er wordt gevallen en wat er wordt toegevoegd als ik de lokale tak duw. Natuurlijk is het hetzelfde, alleen de omgekeerde, maar voor mij is het meer leesbaar, en ik kijk comfortabel naar wat er gaat gebeuren.


Antwoord 6, Autoriteit 4%

De eenvoudige manier:

git fetch
git log -p HEAD..FETCH_HEAD

Hiermee worden eerst de wijzigingen opgehaald van uw standaard afstandsbediening (oorsprong). Deze wordt automatisch aangemaakt wanneer u een repository kloont. Je kunt ook expliciet zijn: git fetch origin master.

Vervolgens wordt git loggebruikt om je huidige branch te vergelijken met degene die zojuist is opgehaald. (De optie -p(patch genereren) laat de verschillenzien.)


Antwoord 7, autoriteit 2%

Dit is hoe ik het doe.

# To update your local.
git fetch --all

Dit haalt alles op van de remote, dus als je het verschil controleert, vergelijkt het het verschil met de remote branch.

# To list all branches
git branch -a

De bovenstaande opdracht geeft alle takken weer.

# To go to the branch you want to check difference
git checkout <branch_name>
# To check on which branch you are in, use
git branch
    (or)
git status

Nu kunt u de verschillen als volgt controleren.

git diff origin/<branch_name>

Hiermee wordt uw lokale vestiging vergeleken met de externe vestiging.


Antwoord 8, autoriteit 2%

TLDR: git diff <local branch> <remote branch>

Als ik Git in de shell gebruik, oriënteer ik me eerst door rond te kijken.

Hier is een commando om alle takken te tonen

$ git branch -a  # (or git branch --all)
* my-branch
  master
  remotes/origin/some-branch
  remotes/origin/HEAD -> origin/master
  remotes/origin/my-branch
  remotes/origin/some-other-branch
  remotes/origin/master

Hier heb ik twee lokale takken (my-branchen master) en vier externe takken (some-branch, some-other-branch, master, EN my-branch).

Ook, het asterisk naast my-branchsignaleert het feit dat ik momenteel in die branche ben (u zou ook weten door de opdracht git statusdat te gebruiken zou uitgaan: On branch my-branch.).

Opmerking: de externe takken in de git bash Shell wordt in het rood getoond terwijl de lokale in groen worden getoond.

Als u gewoon op afstand wilt tonen :

$ git branch -r # (or git branch --remotes)
  origin/some-branch
  origin/HEAD -> origin/master
  origin/my-branch
  origin/some-other-branch
  origin/master

Om alleen lokale takken te tonen, kunt u in de verleiding komen om git branch -lte gebruiken, maar dat is een heel ander opdracht. Naar Toon lokale takken Gebruik git branchzonder opties

$ git branch
* my-branch
  master

Om een ​​beoordeling van de standaardtakopties te voltooien, is er de --listdat, in tegenstelling tot wat u zou verwachten, er is om filteren toe te staan. Gebruik het met een patroon als volgt:

$ git branch --list 'my*'
* my-branch

U kunt ook --listcombineren met de opties -aEN -r, maar zorg ervoor dat u uw patroon dienovereenkomstig aanpast (Denk eraan: externe takken beginnen met “afstandsbediening” ).

Voorbeeld:

# This will show all branches (local & remote) that start with my
$ git branch --list 'my*' -a
* my-branch
# Better: the pattern includes the remote
$ git branch --list '*my*' -a
* my-branch
  remotes/origin/my-branch

Documentatie: git-branch

Je kunt nu twee filialen vergelijkenvan alle beschikbare (je kunt ook twee lokale bewoners of twee afstandsbedieningen vergelijken).

Hier vergelijk ik de lokale met de externe my-branch. Ze zijn gesynchroniseerd, dus ik krijg geen output:

$ git diff my-branch remotes/origin/my-branch

Opmerking: u moet de volledige namen van de takken opgeven zonder aanhalingstekens.

Ik kan de lokale my-branchook vergelijken met de externe master. Hier krijg ik wat output, omdat de remote my-branchniet is gemerged in de master branch.

$ git diff my-branch remotes/origin/master
diff --git a/src/controllers/call.controller.js b/src/controllers/call.controller.js
index fd79b98..df3d798 100644
--- a/src/controllers/call.controller.js
+++ b/src/controllers/call.controller.js
@@ -261,7 +261,7 @@ function callController() {
   /*
    *  Function: doCall
[ . . . ]

Antwoord 9

Laat uw werkende tak ontwikkelingzijn en u wilt onderscheid maken tussen de lokale ontwikkelingstak en de externe ontwikkelingstak. In dat geval zou de syntaxis als volgt moeten zijn:

git diff remotes/origin/development..development

Of

git fetch origin
git diff origin/development

Antwoord 10

Als je het verschil wilt zien omdat alleen de namen van de bestanden zijn veranderd, gebruik dan:

git diff --name-status <remote-branch> <local-branch>

Anders zou dit alle verschillen tussen de twee takken tonen:

git diff <remote-branch> <local-branch>

Antwoord 11

Hier is een verkort antwoord als je je huidige branch vergelijkt met iets dat je wilt git pull.

git fetch
git diff FETCH_HEAD

Het eerste commando zal uitzoeken welke remote branch overeenkomt met je huidige branch. Een artefact van die berekening in de FETCH_HEADreferentie. Dan gebruikt het tweede commando die referentie om te vergelijken met wat je huidige branch heeft.


Antwoord 12

In mijn geval heb ik een tweede afstandsbediening genaamd herokudie nietde originis en omdat deze niet synchroon liep, kreeg ik deze fout bij het uitvoeren van de git diff master heroku/master:

fataal: dubbelzinnig argument ‘heroku/master’: onbekende revisie of pad niet in de werkboom.

Of dit bij het proberen van de andere benadering git diff master..heroku/master:

fataal: slechte revisie ‘master..heroku/master’

De oplossing was het expliciet vermelden van de externe naam in git fetchvoordat git diffwerd uitgevoerd, in mijn geval:

$ git fetch heroku
$ git diff master heroku/master

Antwoord 13

git difftool <commit> .

Dit zal de commit die je wilt vergelijken met je lokale bestanden. Vergeet de punt op het einde niet (voor lokaal).

Bijvoorbeeld om je lokale bestanden te vergelijken met een bepaalde commit:

git difftool 1db1ef2490733c1877ad0fb5e8536d2935566341 .

(en je hebt git fetch niet nodig, tenzij vergelijken met nieuwe commits nodig is)


Antwoord 14

Voorbeeld

git diff 'master' 'testlocalBranch'

Als u een editor zoals WebStormgebruikt, kunt u met de rechtermuisknop op een bestand, selecteer vergelijken met vertakking en typ/selecteer uw vertakking.


Antwoord 15

Ik vraag me af of er een verandering is in mijn masterbranch…

  1. Eerst moet je je branch wijzigen (als je al onder deze branch zit, hoef je dit niet te doen!):

    git checkout master
    
  2. Je kunt met dit commando zien welk bestand is gewijzigd onder je master branch:

    git status
    
  3. Laat de takken zien

    git branch -a
    
    • meester
      afstandsbedieningen/oorsprong/master
  4. Zoek de verschillen

    git diff origin/master
    

Antwoord 16

Probeer:

git diff origin HEAD

Ervan uitgaande dat je de HEADvan je huidige lokalebranch wilt vergelijken met de oorsprong.
En ervan uitgaande dat je op het lokale filiaal zit. 🙂


Antwoord 17

Dit is vrij eenvoudig. U kunt gebruiken: git diff remote/my_topic_branch my_topic_branch

Waar my_topic_branchje onderwerpbranch is.


Antwoord 18

Stel dat je je original hebt ingesteld als de externe repository. Dan,

git diff <local branch> <origin>/<remote branch name>


Antwoord 19

Voer in Visual Studio 2019gewoon ophalen. Gebruik geen trekcode.

Dit is wat ik deed. Ik heb het onderstaande toegevoegd aan het bestand .gitconfigzodat ik Beyond Compare

File location: C:\Users\[username]\.gitconfig

Hieronder toegevoegd

[diff]
    tool = bc
[difftool "bc"]
    path = c:/Program Files/Beyond Compare 4/bcomp.exe

Open een opdrachtprompt en ga naar de werkmap. Ik gaf het onderstaande om de lokale devbranch te vergelijken met de remote devbranch:

git difftool dev origin/dev --dir-diff

Dit zal Beyond Compare openen en mappen openen die bestanden hebben die verschillen. Als er geen wijzigingen zijn, wordt Beyond Compare niet gestart.


Antwoord 20

Instellen

git config alias.udiff 'diff @{u}'

HEAD verwisselen met HEAD@{upstream}

git fetch  # Do this if you want to compare with the network state of upstream; if the current local state is enough, you can skip this
git udiff

Verschillen met een willekeurige externe vertakking

Dit beantwoordt de vraag in uw kop (“zijn afstandsbediening”); als je wilt differentiëren tegen “a remote” (die niet is geconfigureerd als de upstream voor de branch), moet je deze direct targeten. U kunt alle externe vertakkingen zien met het volgende:

git branch -r

U kunt alle geconfigureerde afstandsbedieningen zien met het volgende:

git remote show

U kunt de vertakkings-/trackingconfiguratie voor een enkele afstandsbediening (bijv. oorsprong) als volgt bekijken:

git remote show origin

Zodra je de juiste oorsprongstak hebt bepaald, doe je gewoon een normale diff 🙂

git diff [MY_LOCAL] MY_REMOTE_BRANCH


Antwoord 21

In Android Studiois het mogelijk om het verschil tussen branches te zien met behulp van een grafische interface.

Selecteer uw externe tak en en “Vergelijk met huidig” in de lijst. Vanaf dat moment kunt u het tabblad bestanden selecteren om te zien of er bestanden zijn met een inhoudsverschil tussen beide takken. Als er geen bestand wordt gezien, zijn beide takken up-to-date met elkaar.


Antwoord 22

Voor het tellen van de verschillende commits van HEAD naar origin/master:

git remote update
git rev-list HEAD..origin/master --count

Om de huidige HEAD commit hash-ID te krijgen:

git rev-parse HEAD

Om de hash-ID van origin/master commit op afstand te krijgen:

git rev-parse origin/master

Antwoord 23

Als u TortoiseGitgebruikt (het biedt een GUI voor Git), kunt u met de rechtermuisknop op uw Git-repositorymap klikken en klik vervolgens op Git Sync.

U kunt uw vestigingen selecteren om te vergelijken als ze niet zijn geselecteerd. Dan kun je de verschillen commit bekijken. Je kunt ook met de rechtermuisknop op een vastlegging klikken en dan Vergelijken met vorige revisieom de verschillen naast elkaar te bekijken.

Other episodes