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 07:00 | Nová verze

    Byl vydán svobodný kancelářský balík OnlyOffice Docs 7.0. Nově umožňuje vytvářet online formuláře, vylepšuje správu revizí dokumentů, přidává možnost zaheslovat tabulky, efekty v prezentacích či tmavý motiv vzhledu.

    Fluttershy, yay! | Komentářů: 2
    dnes 06:55 | Bezpečnostní upozornění

    Stránky s titulky OpenSubtitles.org byly hacknuty. Již v létě. Hacker získal emailové adresy a přihlašovací údaje všech uživatelů. Doporučena je změna hesla.

    Ladislav Hagara | Komentářů: 4
    včera 16:22 | Nová verze

    Monitorix (Wikipedie), svobodný software pro monitorování služeb a systémových zdrojů, byl vydán ve verzi 3.14.0. Přibyly tři nové moduly: nvme.pm, amdgpu.pm a nvidiagpu.pm.

    Ladislav Hagara | Komentářů: 0
    včera 15:55 | Komunita

    Spolek OpenAlt napsal otevřený dopis Národnímu úřadu pro kybernetickou a informační bezpečnost (NÚKIB) a Ministerstvu vnitra ČR k Bezpečnostním doporučením pro vývoj otevřeného software ve veřejné sféře: "Kromě samotného faktu, že takový dokument vůbec vzniká, velmi oceňujeme jeho zveřejnění a možnost zasílání připomínek formou komentářů (issues) i konkrétních návrhů na změny (pull requesty)".

    Ladislav Hagara | Komentářů: 1
    včera 08:00 | Komunita

    Do svidanija, Igor, a dík za NGINX. Igor Sysoev, autor webového serveru nginx (2002) a spoluzakladatel stejnojmenné společnosti (2011), opouští NGINX a F5. Chce trávit více času se svými přáteli a rodinou a věnovat se osobním projektům.

    Ladislav Hagara | Komentářů: 16
    včera 07:00 | Nová verze

    Wine, vrstva umožňující běh aplikací určených pro MS Windows, bylo vydáno v nové hlavní verzi 7.0. Novinky zahrnují vylepšenou podporu např. vstupních zařízení nebo motivů vzhledu, více v oznámení vydání.

    Fluttershy, yay! | Komentářů: 1
    včera 06:00 | Zajímavý software

    Open source syntezátor Surge XT byl vydán ve verzi 1.0.0. Zdrojové kódy jsou k dispozici na GitHubu pod licencí GPLv3. Více v dokumentaci.

    Ladislav Hagara | Komentářů: 0
    18.1. 15:33 | IT novinky

    Microsoft kupuje Activision Blizzard (Warcraft, Diablo, Overwatch, Call of Duty, Candy Crush, …) za 68,7 miliard dolarů.

    Ladislav Hagara | Komentářů: 33
    18.1. 13:33 | Zajímavý článek

    Fedora Magazine rozebírá restartování a offline aktualizování Fedora Linuxu. První Fedora s offline aktualizováním byla v lednu 2013 vydaná Fedora 18. Tenkrát ještě s kódovým označením Spherical Cow.

    Ladislav Hagara | Komentářů: 16
    18.1. 12:55 | IT novinky

    The Qt Company dnes představila platformu Qt Digital Advertising 1.0 pro monetizaci Qt aplikací.

    Ladislav Hagara | Komentářů: 3
    Jestliže jste používali distribuci CentOS Linux, jejíž konec byl oznámen před rokem, kam jste přešli?
     (33%)
     (1%)
     (6%)
     (17%)
     (1%)
     (5%)
     (37%)
    Celkem 175 hlasů
     Komentářů: 14, poslední 14.1. 14:44
    Rozcestník

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

    4.11.2021 13:30 | Přečteno: 1159× | 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: 29 | 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: 51 | 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: 51 | 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).
    Sex is distinct from gender. I didn't have gender with your mom last night.
    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.
    Sex is distinct from gender. I didn't have gender with your mom last night.
    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ší...
    Sex is distinct from gender. I didn't have gender with your mom last night.
    5.11.2021 09:31 Michal Kubeček | skóre: 72 | 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...
    Sex is distinct from gender. I didn't have gender with your mom last night.
    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: 72 | 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: 51 | 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: 72 | 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: 51 | 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: 51 | 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.