/ / Aké sú rozdiely medzi dvojbodkami „..“ a trojbodkami „…“ v rozsahu rozsahov potvrdenia Git? - git, diff, git-diff

Aké sú rozdiely medzi dvojitým bodom ".." a trojitým bodom "..." v rozmedziach Git diff commit? - git, diff, git-diff

Aké sú rozdiely medzi nasledujúcimi príkazmi ?:

git diff foo master   # a
git diff foo..master  # b
git diff foo...master # c

Príručka diff hovorí o tom:

Porovnávanie odvetví

$ git diff topic master    <1>
$ git diff topic..master   <2>
$ git diff topic...master  <3>
  1. Zmeny medzi tipmi témy a hlavnými vetvami.
  2. Rovnaké ako vyššie.
  3. Zmeny, ktoré sa vyskytli na hlavnej vetve od jej spustenia.

ale nie je mi úplne jasné.

odpovede:

226 pre odpoveď č. 1

Keďže som tieto obrázky už vytvoril, myslel som si, že by bolo užitočné ich použiť v inej odpovedi, hoci opis rozdielu medzi nimi .. (dot-dot) a ... (dot-dot-dot) je v podstate rovnaká ako v bode manojldsova odpoveď.

Príkaz git diff typicky¹ iba ukazuje rozdiel medzi stavmi stromu medzi presne dvoma bodmi v grafe potvrdenia. .. a ... zápisy v git diff majú nasledujúci význam:

Ilustrácia rôznych spôsobov špecifikovania záväzkov pre git diff

Inými slovami, git diff foo..bar je presne to isté ako git diff foo bar; obidve vám ukážu rozdiel medzi koncami oboch vetiev foo a bar, Na druhej strane, git diff foo...bar vám ukáže rozdiel medzi „zlúčenou základňou“ oboch vetiev a špičkou bar, „Zlučovacia základňa“ je zvyčajne posledným spoločným záväzkom medzi týmito dvoma vetvami, takže tento príkaz vám ukáže zmeny, na ktorých pracujete. bar uviedla, pričom ignoruje všetko, čo sa stalo foo medzitým.

To je všetko, čo potrebujete vedieť o .. a ... zápisy v git diff, Avšak ...


... tu je častým zdrojom zmätku .. a ... znamenajú jemne odlišné veci, keď sa používajú v príkaze, ako napríklad git log ktorý očakáva súbor záväzkov ako jeden alebo viac argumentov. (Všetky tieto príkazy nakoniec skončia pomocou git rev-list analyzovať zoznam záväzkov z ich argumentov.)

Význam .. a ... pre git log graficky znázornené nižšie:

Ilustrácia rôznych spôsobov určovania rozsahu záväzkov pre protokol git

takže, git rev-list foo..bar ukazuje všetko na vetve bar to tiež nie je na vetve foo, Na druhej strane, git rev-list foo...bar ukáže všetky záväzky, ktoré sú v oboch foo alebo bar, ale nie oboje, Tretí obrázok len ukazuje, že ak uvediete zoznam dvoch vetiev, dostanete potvrdenia, ktoré sú v jednej alebo oboch z nich.

No, zistil som, že všetko trochu mätúce, tak ako tak, a myslím, že grafy diagramu odovzdania pomoci :)

¹ Hovorím iba „zvyčajne“, pretože pri riešení zlúčených konfliktov napríklad git diff vám ukáže trojcestné zlúčenie.


22 pre odpoveď č. 2

git diff foo master Rozdiel medzi hornými (hlavami) previneniami foo a master.

git diff foo..master Ďalším spôsobom, ako urobiť to isté.

git diff foo...master Líši sa od spoločného predka (git merge-base foo master) foo a master na špičku master. Inými slovami, ukazuje iba zmeny, ktoré nadradená vetva zaviedla od svojho spoločného predka s foo.

V tomto príklade od spoločnosti GitHub vysvetľuje, kedy použiť tieto dve možnosti:

Napríklad, ak vytvoríte vetvu „dev“ a do funkcie pridáte funkciu súbor, potom sa vráťte do hlavnej vetvy a odstráňte riadok z PREČÍTAJTE a potom spustite niečo také:

$ git diff master dev

To vám povie, že funkcia bola pridaná odprvý súbor a riadok bol pridaný do README. Prečo? Pretože na vetve je README stále má pôvodný riadok, ale na „master“ ste ho odstránili - tak priame porovnanie snímok vyzerá ako „dev“.

To, čo skutočne chcete porovnať, je to, čo sa od začiatku zmenilo pobočky sa rozchádzali. Na to má Git peknú krátku skratku:

$ git diff master...dev

19 pre odpoveď č. 3

Moja konsolidovaná verzia .. proti ... s diff proti záznam

Diff vs Log & .. vs ..


6 pre odpoveď č. 4
git diff foo master

zobrazí rozdiely medzi témou a hlavnou vetvou v danom okamihu

git diff foo..master

to tiež ukáže rozdiely medzi témou a hlavnou vetvou v danom časovom okamihu

git diff foo...master

to ukáže všetky rozdiely medzi tým, kedy bola téma vytvorená z vetvy a po nej

takže prvé dva príkazy sú rovnaké a posledný iba zobrazuje širší pohľad v histórii diferenci