abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:00 | Bezpečnostní upozornění

    Byly publikovány informace (technické detaily) o bezpečnostním problému Snapu. Jedná se o CVE-2026-3888. Neprivilegovaný lokální uživatel může s využitím snap-confine a systemd-tmpfiles získat práva roota.

    Ladislav Hagara | Komentářů: 4
    dnes 03:33 | Zajímavý software

    Nightingale je open-source karaoke aplikace, která z jakékoliv písničky lokálního alba (včetně videí) dokáže oddělit vokály, získat text a vše přehrát se synchronizací na úrovni jednotlivých slov a hodnocením intonace. Pro separaci vokálů využívá UVR Karaoke model s Demucs od Mety, texty písní stahuje z lrclib.net (LRCLIB), případně extrahuje pomocí whisperX, který rovněž využívá k načasování slov. V případě audiosouborů aplikace na

    … více »
    NUKE GAZA! 🎆 | Komentářů: 2
    včera 18:22 | Nová verze

    Po půl roce vývoje od vydání verze 49 bylo vydáno GNOME 50 s kódovým názvem Tokyo (Mastodon). Podrobný přehled novinek i s náhledy v poznámkách k vydání a v novinkách pro vývojáře.

    Ladislav Hagara | Komentářů: 14
    včera 17:22 | Nová verze

    Článek na stránkách Fedora Magazinu informuje o vydání Fedora Asahi Remixu 43, tj. linuxové distribuce pro Apple Silicon vycházející z Fedora Linuxu 43.

    Ladislav Hagara | Komentářů: 1
    včera 13:33 | Pozvánky

    Byl zveřejněn program konference Installfest 2026. Konference proběhne o víkendu 28. a 29. března v Praze na Karlově náměstí 13. Vstup zdarma.

    Ladislav Hagara | Komentářů: 3
    včera 03:55 | Nová verze

    Byla vydána Java 26 / JDK 26. Nových vlastností (JEP - JDK Enhancement Proposal) je 10. Odstraněno bylo Applet API.

    Ladislav Hagara | Komentářů: 12
    17.3. 23:55 | Nová verze

    Byla vydána nová verze 260 správce systému a služeb systemd (Wikipedie, GitHub). Odstraněna byla podpora skriptů System V. Aktualizovány byly závislosti. Minimální verze Linuxu z 5.4 na 5.10, OpenSSL z 1.1.0 na 3.0.0, Pythonu z 3.7.0 na 3.9.0…

    Ladislav Hagara | Komentářů: 27
    17.3. 18:11 | Nová verze

    Byla vydána nová verze 5.1 svobodného 3D softwaru Blender. Přehled novinek i s náhledy a videi v poznámkách k vydání. Videopředstavení na YouTube.

    Ladislav Hagara | Komentářů: 0
    17.3. 04:55 | Nová verze

    Bylo oznámeno vydání nové verze 8.1 "Hoare" kolekce svobodného softwaru umožňujícího nahrávání, konverzi a streamovaní digitálního zvuku a obrazu FFmpeg (Wikipedie). Doprovodný příspěvek na blogu Khronosu rozebírá kódování a dekódování videa pomocí Vulkan Compute Shaders v FFmpeg.

    Ladislav Hagara | Komentářů: 12
    17.3. 04:33 | Zajímavý projekt

    Byl představen open-source a open-hardware prototyp nízkonákladového raketometu kategorie MANPADS, který byl sestaven z běžně dostupné elektroniky a komponent vytištěných na 3D tiskárně. Raketa využívá skládací stabilizační křidélka a canardovou stabilizaci aktivně řízenou palubním letovým počítačem ESP32, vybaveným inerciální měřicí jednotkou MPU6050 (gyroskop a akcelerometr). Přenosné odpalovací zařízení obsahuje GPS,

    … více »
    NUKE GAZA! 🎆 | Komentářů: 49
    Které desktopové prostředí na Linuxu používáte?
     (16%)
     (7%)
     (1%)
     (11%)
     (29%)
     (2%)
     (5%)
     (1%)
     (13%)
     (24%)
    Celkem 1111 hlasů
     Komentářů: 27, poslední 17.3. 19:26
    Rozcestník

    git – jak udělat commit dílčí změny

    4.11.2021 13:30 | Přečteno: 1479× | Za vším hledej Linux | poslední úprava: 4.11.2021 13:32

    Potřeboval jsem po delším čase přejet nějaké soubory přes svůj skript djvutool, když tu na mě začala konzole opět pindat, že příkaz tempfile je deprecated, tak abych místo něj použil mktemp. Ok. Tak jsem skočil do repozitáře kde ho mám a zjistil, že jsem do něj už v minulosti udělal několik drobných změn, které jsem ale necommitoval. Byly to drobné úpravy, ale vzájmně nesouvisely. Tak jsem je chtěl commitnout samostatně.

    Nebylo to poprvé, co jsem někde něco ladil a při tom nadělal víc změn, které by zasluhovaly samostatný commit. Ostatně, víc jsem se o tom rozkecal v blogpostu na téma Počítačová archeologie. Zkrátka jsem se dopálil, že takhle už to dál nejde a obrátil se na Pavla Píšu, který má přeci jenom s gitem víc zkušeností než já.

    Zajímalo mne vyloženě konzolové řešení a tak mne překvapilo, že pro commitování takových dílčích změn používá git gui. Nicméně do háje mne neposlal, nýbrž odkázal na stránku Git Tools - Interactive Staging, kde bylo přesně to co jsem hledal.

    Jako obvykle, je to stupidně prosté a z mého pohledu dokonce mnohem lepší řešení než přes grafické klikátko. Takže to popíšu jen několika slovy a odkážu na ilustrační screenshot v příloze.

    1. Dílčí změny lze přidávat v interaktivním režimu, který se aktivuje volbou -i
      $ git add -i
    2. Pokud čekají na commit nějaké změny, spustí se automaticky příkaz [s]tatus, který vypíše přehled souborů ve kterých jsou nějaké změny co čekají na commit.
      Stiskem klávesy p, nebo odentrováním čísla 5, se spustí příkaz [p]atch, který opět vypíše přehled souborů, ve kterých jsou změny.

      Po uvedení pořadového čísla souboru a jeho odklepnutí, začne vypisovat dílčí rozdílové soubory, s tím, že se pokaždé zeptá co s tím. Na ilustračním screenshotu tak můžete vidět, že jsem přeskočil všechny změny, až na tu poslední, kterou jsem vložil do stage

      Před ukončením jsem příkazem [d]iff překontroloval, že změna připravená ve stage, obsahuje to co jsem chtěl commitnout. A protože vše bylo ok, mohl jsem interaktivní mód pro přidání změn ukončit příkazem [q]uit.
    3. Ještě jsem se ujistil, že se bude commitovat pouze část změn.
      $ git status
      On branch master
      Your branch is ahead of 'github/master' by 15 commits.
        (use "git push" to publish your local commits)
      
      Changes to be committed:
        (use "git restore --staged <file>..." to unstage)
              modified:   djvutool
      
      Changes not staged for commit:
        (use "git add <file>..." to update what will be committed)
        (use "git restore <file>..." to discard changes in working directory)
              modified:   djvutool
      
      Untracked files:
        (use "git add <file>..." to include in what will be committed)
              COPYING
              djvu_foreground_encoding_examples.txt
              djvuchanges.txt
              djvutosvg_poznamky.txt
              historie_djvu_wiki.txt
              wiki-djvu.txt
      
      
      A teprve pak přišel na řadu commit připravené stage
           

    Hodnocení: 67 %

            špatnédobré        

    Obrázky

    git – jak udělat commit dílčí změny, obrázek 1

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    4.11.2021 15:21 jiwopene | skóre: 31 | blog: Od každého trochu…
    Rozbalit Rozbalit vše Re: git – jak udělat commit dílčí změny
    Toto používám celkem často (nadělám změny třeba ve více nesouvisejících souborech a až potom je po kouskách commituji). Pokud ale třeba mám necommitované změny a chci provést jinou, nesouviseící, změnu, tak používám git stash (uložení rozpracovaného stavu na zásobník, vrátí se to git stash pop) a commituji potom.
    .sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky.
    4.11.2021 16:36 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
    Rozbalit Rozbalit vše Re: git – jak udělat commit dílčí změny
    Tak tohle je určitě dobré při práci. Mně se častěji stává – a netýká se to zrovna programování zdrojového kódu – že něco dělám, přijde někdo kdo mne vyruší s tím, že mám jít udělat něco jiného a pak už ten commit neudělám protože se k tomu nedostanu, nebo na to zapomenu. Když o nic nejde, commitnu to pak později i s jinými změnami. Také se mi nechce commitovat každou dílčí změnu. Dřív jsem to takhle dělal ale pak už jsem se ztrácel v tom, která změna byla ok, a která se ukázala jako slepá cesta.
    4.11.2021 18:11 podlesh
    Rozbalit Rozbalit vše Re: git – jak udělat commit dílčí změny
    Proto zásadně používám PS1 se scriptem zobrazujícím stav git repository a pokud někde vidím že je cokoliv necommitnuto, tak nedělám další změny než provedu commit. I kdyby to mělo být jenom git commmit -a -m 'WIP'
    4.11.2021 20:19 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
    Rozbalit Rozbalit vše Re: git – jak udělat commit dílčí změny
    Bohužel, ne vždy realizovatelné. Nejsem vývojář co by se věnoval pouze prgání.
    4.11.2021 20:30 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: git – jak udělat commit dílčí změny
    Já se stashování odnaučil a radši udělám nějaké WIP commity a pak si to přeházim/transformuju rebasem do správný podoby. Přijde mi, že Super jsou na tohle fixup commity (+ následně rebase --autosquash), akorát si člověk musí dát pozor, aby neopakoval stejnou commit message vícekrát, protože fixup commit se váže na commit message, ne na hash (což mi přijde jako blbý rozhodnutí, ale nic s tim neudělám).

    git add -i je určitě fajn, ale git gui umožňuje stagovat s vyšší granularitou (jednotlivé řádky).
    4.11.2021 20:30 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: git – jak udělat commit dílčí změny
    *Přijde mi, že stash zbytečně neumožňuje běžné operace jako branching atd.
    4.11.2021 23:05 xxx
    Rozbalit Rozbalit vše Re: git – jak udělat commit dílčí změny
    protože fixup commit se váže na commit message, ne na hash (což mi přijde jako blbý rozhodnutí, ale nic s tim neudělám).
    Protoze to ma implikace, ze pak musis umet ty fixup commity mit svazane s tim fixovanym, i kdyz udelas treba rebase bez toho autosqashe, atp. A muj tip je, ze kdyz se tim smerem vydas, tak skoncis zpatky ve stavu, ze ktereho si vysel. Ze nejjednodusi (mozna i jedinny) zpusob, jak toho dosahnout, je normalni commit se specialnim jmenem.

    A trochu se obavam, ze neco podobneho by se ti stalo i s tim zasobnikem, kde by to vlastne bylo to same akorat by to byla fixup vetev.
    5.11.2021 11:32 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: git – jak udělat commit dílčí změny
    Protoze to ma implikace, ze pak musis umet ty fixup commity mit svazane s tim fixovanym, i kdyz udelas treba rebase bez toho autosqashe, atp.
    Rebase by to mohl celkem snadno umět aktualizovat, stejně už IIRC upravuje časový razítko u všech commitů... A u nějakýho jinýho způsobu úpravy historie by to bylo holt na tobě.

    Ale souhlasim, že to je implementačně/koncepčně složitější...
    5.11.2021 09:31 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: git – jak udělat commit dílčí změny
    akorát si člověk musí dát pozor, aby neopakoval stejnou commit message vícekrát

    Celý commit message stejný, to je při rozumně napsaných prakticky nemožné, pokud nejde o cherry pick. I úplně stejný subject je na pováženou, pokud je to v jedné sérii.

    5.11.2021 11:36 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: git – jak udělat commit dílčí změny
    U finálních, slušně naformátovaných samozřejmě jo, měl jsem na mysli situaci, kdy mam rozdělanou nějakou práci lokálně a dělám commity á la "WIP něco něco", kde typicky tam dám jenom hodně stručnou sumarizaci, třeba jméno modulu/funkce apod., takže když pak pokračuju v tom samým, commit message má tendenci být stejný... takže tam dávám třeba číslo nebo něco...
    cezz avatar 4.11.2021 23:58 cezz | skóre: 24 | blog: dm6
    Rozbalit Rozbalit vše Re: git – jak udělat commit dílčí změny
    Ja tieto ciastocne commity vyuzivam velmi casto - napriklad na to, ked chcem oddelit funkcne zmeny v kode od uprav citatelnosti do samostatnych commitov. Lahsie sa potom robi review PR.

    A musim povedat, ze v tomto smere je Magit v Emacse naozaj magicky. Clovek poste v diff view vyznaci konkretne zmeny a stlaci stage. V tomto konkretnom pripade by bol napriklad problem s git add -i commitnut samostatne len niektore riadky z prveho hunku a asi by bolo treba pouzit git add -e, co uz zacina byt trochu komplikovane.

    Neverim, ze niekto kto pouziva Emacs este o Magite nepocul, ale ak niekto uvazuje Emacs skusit, tak uz len pre ten Magit by som odporucal tomu dat sancu napriklad s niecim ako Doom Emacs.
    Computers are not intelligent. They only think they are.
    5.11.2021 08:00 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: git – jak udělat commit dílčí změny
    Musím se přiznat, že jakkoli pro tyhle účely většinou preferuji textové rozhraní, "git add -i" mi k srdci nepřirostl a i když jsem se mu párkrát snažil dát šanci, "git gui" je z hlediska uživatelského komfortu úplně jiná liga.
    5.11.2021 08:19 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
    Rozbalit Rozbalit vše Re: git – jak udělat commit dílčí změny
    Vzhledem k tomu že 90% času tohle potřebuji řešit na vzdáleném stroji s minimalistickou instalací, je pro mne cokoliv závislé na okením prostředí nepoužitelné.

    Stejně tak nemám zapotřebí řešit jednotlivé řádky. Důležitý je pro mne commit komplexní změny. Situace že by se mi těsně vedle sebe sešly dvě různé věci, tak že by je bylo nutné separovat po řádcích, je pro mne velmi nepravděpodobné.
    5.11.2021 09:25 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: git – jak udělat commit dílčí změny
    90% času tohle potřebuji řešit na vzdáleném stroji s minimalistickou instalací

    Pak je asi na místě otázka, jestli je rozumné ten git spouštět přímo tam. Já jsem třeba poměrně dlouho z lenosti z domova používal git na počítači v práci (včetně "git gui" přes "ssh -X") a teprve to, že jsem dočasně musel používat jiný VPN endpoint, a s tím související nárůst latencí mne donutil zařídit si to tak, abych tohle dělat nemusel. S odstupem času je to samozřejmě praktičtější, ale kdyby mne k tomu nedonutily okolnosti, nejspíš bych to tím krkolomným způsobem dělal dodnes.

    Situace že by se mi těsně vedle sebe sešly dvě různé věci, tak že by je bylo nutné separovat po řádcích, je pro mne velmi nepravděpodobné.

    Mně se to naopak děje docela často. Což ale možná souvisí s…

    Důležitý je pro mne commit komplexní změny.

    Commit by právě pokud možno moc komplexní být neměl. Naopak, měla by to být co nejmenší změna, která sama o sobě ještě dává smysl. Jak kdysi podotkl jeden maintainer, pokud píšete commit message a chystáte se začít větu slovem "Also", je to obvykle znamení, že byste měl commit rozdělit.

    5.11.2021 11:19 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
    Rozbalit Rozbalit vše Re: git – jak udělat commit dílčí změny
    Pak je asi na místě otázka, jestli je rozumné ten git spouštět přímo tam.
    To teda rozhodně je ;-) Je to nejrychlejší způsob, jak zjistit jestli, nebo kdy někde nastala nějaká nežádoucí změna. Často toho využívám při dohledávání změn realizovaných někdy v minulosti.
    5.11.2021 11:22 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
    Rozbalit Rozbalit vše Re: git – jak udělat commit dílčí změny
    A komplexní znamená několik souvisejících změn na různých místech. Ne sadu různých, vzájemně nesouvisejících změn. Právě o tom, jak se tomu vyhnout, je tenhle blogpost.
    dolik.rce avatar 5.11.2021 18:00 dolik.rce
    Rozbalit Rozbalit vše Re: git – jak udělat commit dílčí změny
    Vida, git add -i jsem ani neznal. Osobně používám git add -p (případně i s cestou), který spustí rovnou tu interaktivní "patchovací" část.
    7.11.2021 10:55 ttttttttttt
    Rozbalit Rozbalit vše Re: git – jak udělat commit dílčí změny
    Používám https://github.com/bigH/git-fuzzy založený na fzf, výborný pokud jsou změny v různých souborech. Pro stejný soubor pak taky interaktivní git.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.