/ / Ako môže byť git diff medzi zlúčením commit a jedným z jeho rodičov prázdny? - git, merge, diff, git-diff

Ako môže byť git diff medzi zlúčením a jedným z rodičov prázdny? - git, merge, diff, git-diff

Som zmätený týmto logom git commit. Myslím, že relevantné fakty sú na obrazovke nižšie. Zábery obrazovky sú zo zdrojového stromu. Mám však rovnaké prázdne rozdiely, ak spustím git diff na príkazovom riadku.

rozdiel medzi 1 a 4

rozdiel medzi 1 a 2

(Ak je to jednoduché zvoľte oddelenie 4, rozdiel je tiež prázdny.)

Čo nemôžem pochopiť, je dôvod, prečo je rozdiel prázdny medzi dopytom 1 a 4. Alebo prečo sa zaviazať 4, ktorý je zlúčenie, nebude obsahovať rozdiely v súboroch.

Commit 2 zavádza zmeny súboru na fialovú vetvu a nemôžem vidieť, ako by to nebolo súčasťou rozdielu medzi 1 a 4.

(Commit 3 je zlúčenie z pobočky, ktorá je ahistorická verzia ľavej vetvy (kmeň). Takže si nemyslím, že to má zmysel tam mať, ak by to bolo zlúčenie zo súčasného stavu trupu, dovolilo by to zlúčenie 4 rýchlo vpred, teraz je to len zlúčenie podskupiny kmeň.)

edit: Pracovný postup je plynulý. Takže riadky vpravo sú vetvy funkcií a naľavo je rozvinutá vetva, ku ktorej sa zlúčia vetvy funkcií.

odpovede:

0 pre odpoveď č. 1

[...] ako môžu dva po sebe nasledujúce záväzky obsahovať žiadny rozdiel, keď druhý z dvoch je zlúčenie spáchania, ktoré obsahuje históriu, ktorá nie je súčasťou odvetvia?

Rozdiel medzi zlúčením a jedným z rodičov môcť byť prázdny.

Tu je vymyslený príklad, ktorý ilustruje, ako môže táto situácia nastať. V podstate vytvorte a vyriešte konflikt zlúčenia jednoduchou výmenou súboru s verziou z jedného z rodičovských záväzkov:

$ mkdir git_test && cd git_test
$ git init
$ touch README
$ git add README
$ git commit -m "add README"
$ printf "foon" > README
$ git commit -am "write "foo""
$ git checkout -b other master~
$ printf "barn" > README
$ git commit -am "write "bar""
$ git log --oneline --decorate --graph --branches
* 0565bb3 (HEAD -> other) write "bar"
| * 3868f74 (master) write "foo"
|/
* cd5a795 add README

# now merge master into other to cause a merge conflict...
$ git merge master

# ... and resolve the conflict by replacing the contents of README by
# its contents as stored in master"s tip
$ printf "foon" > README
$ git commit -a
$ git log --oneline --decorate --graph --branches
*   0d87700 (HEAD -> other) Merge branch "master" into other
|
| * 3868f74 (master) write "foo"
* | 0565bb3 write "bar"
|/
* cd5a795 add README

# Empty diff. QED
$ git diff master other
$

0 pre odpoveď č. 2

Moja chyba. V skutočnosti sa domnievam, že podľa môjho opisu situácie by nemalo byť možné, že zlúčenie v komite 4 bude prázdne, rovnako ako by nemalo byť možné, aby rozdiel medzi 1 a 4 bol prázdny. Vysvetlenie toho, prečo to bolo, bolo to, že záväzok 3, na rozdiel od toho, čo som napísal, nebol len zlúčenie z predchádzajúceho stavu rozvíjajúceho sa odvetvia. Z dôvodu nejakého neznámeho dôvodu sa toto zlúčenie spája so zmenami súboru vykonanými v programe commit 2. A v tomto novom svetle už nie je zvláštne, že rozdiel je prázdny.

Ospravedlňujeme sa, že ste zbytočne strácali čas.