Megosztás a következőn keresztül:


A Git-előzmények egyszerűsítésének ismertetése

Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019

A Git-előzmények egyszerűsítése zavaró fenevad lehet. Az idő 99%-ában nem is fogja tudni, hogy létezik, de időnként kiugrik a Git sötét sarkaiból, és harap. Ebben a cikkben bemutatjuk, hogy mi az előzmények egyszerűsítése, és hogyan okozhat zavart a fájlelőzmények megtekintésekor.

Kezdjük egy gyakori forgatókönyvvel:

  1. A módosítást fájlba kell küldenie, majd egyesítenie kell a módosítást a fő fájllal.
  2. Néhány munkatársa is egyesíti az ágakat a főbe.
  3. Később visszatér, és észreveszi, hogy a módosítások hiányoznak.
  4. Ha a bűnöst keresi, nézze meg a fájlelőzményeket és figyelje meg... a módosítások nem is szerepelnek a listán!?

A Git véglegesítési előzményei egy fa. Néha az időrend nem ugyanaz, mint a tényleges fájlfaelőzmények. Ez a helyzet leggyakrabban akkor fordul elő, ha egy egyesítési véglegesítés visszaállít egy fájlt az eredeti állapotába. Ebben az esetben az alapértelmezett előzménynézet valójában nem jeleníti meg az összes módosítást, mert gyakorlatilag a fájl nem változott. Ebben a forgatókönyvben a Git rájön, hogy egyszerűsítheti az előzményeket, és a valószínűleg keresett "módosítások" törlődnek a naplóból.

Hacsak nem futott bele korábban, akkor lehet, hogy frusztrált, kíváncsi , hol a fene nem a változások ment?

Előzmények egyszerűsítése: Alapértelmezés szerint bekapcsolva

Alapértelmezés szerint a naplóparancs futtatása egy fájlon: git log file.txt automatikusan leegyszerűsíti az előzményeket, esetleg elrejt néhány véglegesítést a kimenetéből. További információ: git log man page.

Ami hozzáteszi, hogy a történelem egyszerűsítése nem történik meg, ha csak futgit log, mert az összes módosítást vizsgáljuk, nincs mit egyszerűsíteni.

Az előzmények egyszerűsítésének kikapcsolásához a parancssori kapcsolót --full-historykell használnia.

Példa a történelem egyszerűsítésére

Az egyszerűsítés működésének jobb megértése érdekében saját példát hozunk létre a történelem egyszerűsítésére. Először nézzük meg a létrehozandó előzmények diagramját:

Git-ágak

Amint láthatja, a következőt fogjuk tenni:

  1. Hozzon létre egy fájlt.
  2. Adjon hozzá egy sort a fájlhoz egy ágban (állatokban).
  3. Adjon hozzá egy másik sort a fájlhoz egy másik ágban (gyümölcs).
  4. Egyesítse az elágazási állatokat a főbe.
  5. Egyesítse újra az ág gyümölcsét a főágba, és válassza ki a fájl teljes példányát a gyümölcságból.
  6. Ellenőrizze a fájl előzményeit.

Git leegyszerűsíti a történelmünket. Itt az 5. lépés a kulcs. Figyelmen kívül hagytunk minden változást az állatágban . A Git megfigyeli, hogy a fájl lényegében nem változott az 1. és az 5. lépés között, így csak két előzménybejegyzés jelenik meg.

Először létrehozzuk a fájlt, és hozzáadjuk az adattárhoz:

> cd sample
> git init
> echo "some content" > test.txt
> git add test.txt
> git commit -m "Initial commit"

Most úgy döntünk, hogy hozzáfűzzük a "szamarak" szöveget a fájlhoz egy állatágban:

> git checkout -b animals
> echo "donkeys" >> test.txt
> git commit -am "We have added an animal"

Miközben kísérletezünk, úgy döntünk, hogy inkább gyümölcsöt szeretnénk használni a fájlban, ezért létrehozunk egy másik ágat, és a fájl végén hozzáfűzzük a "banán" szöveget:

> git checkout main -b fruit
> echo "bananas" >> test.txt
> git commit -am "We have added a fruit"

Elégedettnek érezzük magunkat a változásokkal, úgy döntünk, hogy az állatágat visszafésüljük a főágba:

> git checkout main
> git merge animals

Most nézzük meg a fájl naplóját test.txt :

> git log test.txt
    
    commit 6b33d99b996c430a60c9552b79245d1aa8320339
        Date:   Mon Feb 15 10:45:33 2016 -0500

        We have added an animal

    commit 206613ccd9a54b055b184c7b6c16f2ece8067e51
        Date:   Mon Feb 15 10:44:18 2016 -0500

        Initial commit

Eddig jó volt, ugye? Semmi sem tűnik ki a szokásosból a napló kimenetében. Tegyük fel, hogy meggondoltuk magunkat, és úgy döntöttünk, hogy egyesítjük a gyümölcságat:

>git merge fruit
    
    Auto-merging test.txt
    CONFLICT (content): Merge conflict in test.txt
    Automatic merge failed; fix conflicts and then commit the result.

Uh-oh, egy egyesítési ütközés. Némi megfontolás után úgy döntünk, hogy a gyümölcság test.txt teljes fájljának használatát választjuk. Általában valamilyen szövegszerkesztőt vagy egyesítési eszközt használna, de a teljes fájlt újra létrehozzuk, mivel csak két sorból áll:

> echo "some content" > test.txt
> echo "bananas" >> test.txt
> git commit -am "Fixed merge conflict"

Most tekintsük át a fájl előzményeit test.txt :

> git log test.txt
    
    commit fdd4dfd816c4efebc5bdb240f49e934e299db581
        Date:   Mon Feb 15 10:51:06 2016 -0500

        We have added a fruit

    commit 206613ccd9a54b055b184c7b6c16f2ece8067e51
        Date:   Mon Feb 15 10:44:18 2016 -0500

        Initial commit

Persze, nem látjuk az első kísérletünk módosításait a naplóban, és nem látjuk az egyesítést sem! Még mindig ott vannak? A Git teljesen megszüntette a módosításokat?

> git log --full-history test.txt

Mint látható, bár a jelölő nélkül egyszerűsítette a naplót, a full-history Git megtartotta az összes módosítást:

> commit 5d0bb77a24e265dc154654fb3b5be331b53bf977
    Merge: 6b33d99 fdd4dfd
        Date:   Mon Feb 15 10:59:34 2016 -0500

        Fixed merge conflict

    commit fdd4dfd816c4efebc5bdb240f49e934e299db581
        Date:   Mon Feb 15 10:51:06 2016 -0500

        We have added a fruit

    commit 6b33d99b996c430a60c9552b79245d1aa8320339
        Date:   Mon Feb 15 10:45:33 2016 -0500

        We have added an animal

    commit 206613ccd9a54b055b184c7b6c16f2ece8067e51
        Date:   Mon Feb 15 10:44:18 2016 -0500

        Initial commit

Git-előzmények egyszerűsítési összefoglalása

A történelem egyszerűsítése az, hogy az idő nagy részében soha nem fogja észrevenni. Ha azonban az egyesítési ütközés hibás, és tudni szeretné, hogy mi történt, előfordulhat, hogy megtekinti a gitnapló előzményeit, és kíváncsi arra, hogy hová mentek a módosítások.

Most, ahelyett, hogy pánik, tudod, hogy:

  • A fájlok előzményeinek egyszerűsítése alapértelmezés szerint be van kapcsolva
  • A --full-history jelölő átfogóbb fájlelőzményeket biztosít

Frissítés: Mivel ezt a cikket írtam, az Azure DevOps Services számos fantasztikus előzménymegtekintési lehetőséget vezetett be a weben. Ez azt jelenti, hogy ha nem szeretné végighaladni a parancssoron, egyszerűen lekérheti azt a fájlt, amelynek előzményeit meg szeretné tekinteni a böngészőben, és az alábbi előzményszűrővel fog megjelenni, ahol egyszerű vagy nem egyszerű előzménynézeteket adhat meg:

Git-szűrők

(c) 2016 Microsoft Corporation. Minden jog fenntartva. Ezt a dokumentumot a rendszer az "is"-ként adja meg. A dokumentumban kifejezett információk és nézetek, beleértve az URL-címet és más internetes webhelyhivatkozásokat, értesítés nélkül változhatnak. A használat kockázata Önt terheli.

A jelen dokumentum egyetlen Microsoft-termékben foglalt szellemi termékkel kapcsolatban sem biztosít Önnek jogokat. A dokumentumot belső segédanyag céljára lemásolhatja és felhasználhatja.