CINXE.COM

Git - Prepisovanje zgodovine

<!DOCTYPE html> <html lang="sl"> <head> <meta charset='utf-8'> <meta content='IE=edge,chrome=1' http-equiv='X-UA-Compatible'> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Git - Prepisovanje zgodovine</title> <link href="/favicon.ico" rel='shortcut icon' type='image/x-icon'> <link rel="stylesheet" href="/application.min.css"> <script src="/js/modernizr.js"></script> <script src="/js/modernize.js"></script> </head> <body id="documentation"> <div class="inner"> <header> <a href="/"><img src="/images/logo@2x.png" width="110" height="46" alt="Git" /></a> <span id="tagline"></span> <script type="text/javascript"> const taglines = [ "fast-version-control", "everything-is-local", "distributed-even-if-your-workflow-isnt", "local-branching-on-the-cheap", "distributed-is-the-new-centralized" ]; var tagline = taglines[Math.floor(Math.random() * taglines.length)]; document.getElementById('tagline').innerHTML = '--' + tagline; </script> <form id="search" action="/search/results"> <input id="search-text" name="search" placeholder="Type / to search entire site…" autocomplete="off" type="text" /> </form> <div id="search-results"></div> </header> </div> <div class="inner"> <div id="content-wrapper"> <div tabindex="1" class="sidebar-btn"></div> <aside class="sidebar" id="sidebar"> <nav> <ul> <li> <a href="/about">About</a> <ul> </ul> </li> <li> <a href="/doc" class="active">Documentation</a> <ul class="expanded"> <li> <a href="/docs">Reference</a> </li> <li> <a href="/book" class="active">Book</a> </li> <li> <a href="/videos">Videos</a> </li> <li> <a href="/doc/ext">External Links</a> </li> </ul> </li> <li> <a href="/downloads">Downloads</a> <ul > <li> <a href="/downloads/guis">GUI Clients</a> </li> <li> <a href="/downloads/logos">Logos</a> </li> </ul> </li> <li> <a href="/community">Community</a> </li> </ul> <hr class="sidebar"> <p> This book is available in <a href="/book/en/v2/Git-Tools-Rewriting-History">English</a>. </p> <p> Full translation available in <table> <tr><td><a href="/book/az/v2/Git-Al%c9%99tl%c9%99ri-Tarixi-Yenid%c9%99n-Yazmaq">azərbaycan dili</a>,</td></tr> <tr><td><a href="/book/bg">български език</a>,</td></tr> <tr><td><a href="/book/de/v2/Git-Tools-Den-Verlauf-umschreiben">Deutsch</a>,</td></tr> <tr><td><a href="/book/es/v2/Herramientas-de-Git-Reescribiendo-la-Historia">Español</a>,</td></tr> <tr><td><a href="/book/fr/v2/Utilitaires-Git-R%c3%a9%c3%a9crire-l%e2%80%99historique">Français</a>,</td></tr> <tr><td><a href="/book/gr">Ελληνικά</a>,</td></tr> <tr><td><a href="/book/ja/v2/Git-%e3%81%ae%e3%81%95%e3%81%be%e3%81%96%e3%81%be%e3%81%aa%e3%83%84%e3%83%bc%e3%83%ab-%e6%ad%b4%e5%8f%b2%e3%81%ae%e6%9b%b8%e3%81%8d%e6%8f%9b%e3%81%88">日本語</a>,</td></tr> <tr><td><a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-%ed%9e%88%ec%8a%a4%ed%86%a0%eb%a6%ac-%eb%8b%a8%ec%9e%a5%ed%95%98%ea%b8%b0">한국어</a>,</td></tr> <tr><td><a href="/book/nl/v2/Git-Tools-Geschiedenis-herschrijven">Nederlands</a>,</td></tr> <tr><td><a href="/book/ru/v2/%d0%98%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d1%8b-Git-%d0%9f%d0%b5%d1%80%d0%b5%d0%b7%d0%b0%d0%bf%d0%b8%d1%81%d1%8c-%d0%b8%d1%81%d1%82%d0%be%d1%80%d0%b8%d0%b8">Русский</a>,</td></tr> <tr><td><a href="/book/sl/v2/Orodja-Git-Prepisovanje-zgodovine">Slovenščina</a>,</td></tr> <tr><td><a href="/book/tl/v2/Mga-Git-na-Kasangkapan-Pagsulat-muli-ng-Kasaysayan">Tagalog</a>,</td></tr> <tr><td><a href="/book/uk/v2/%d0%86%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Git-%d0%9f%d0%b5%d1%80%d0%b5%d0%bf%d0%b8%d1%81%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d1%96%d1%81%d1%82%d0%be%d1%80%d1%96%d1%97">Українська</a></td></tr> <tr><td><a href="/book/zh/v2/Git-%e5%b7%a5%e5%85%b7-%e9%87%8d%e5%86%99%e5%8e%86%e5%8f%b2">简体中文</a>,</td></tr> </table> </p> <p> Partial translations available in <table> <tr><td><a href="/book/cs/v2/Git-Tools-Rewriting-History">Čeština</a>,</td></tr> <tr><td><a href="/book/mk/v2/Git-%d0%90%d0%bb%d0%b0%d1%82%d0%ba%d0%b8-Rewriting-History">Македонски</a>,</td></tr> <tr><td><a href="/book/pl/v2/Narz%c4%99dzia-Gita-Przepisywanie-historii">Polski</a>,</td></tr> <tr><td><a href="/book/sr/v2/%d0%93%d0%b8%d1%82-%d0%b0%d0%bb%d0%b0%d1%82%d0%b8-%d0%9f%d0%be%d0%bd%d0%be%d0%b2%d0%bd%d0%be-%d0%b8%d1%81%d0%bf%d0%b8%d1%81%d0%b8%d0%b2%d0%b0%d1%9a%d0%b5-%d0%b8%d1%81%d1%82%d0%be%d1%80%d0%b8%d1%98%d0%b5">Српски</a>,</td></tr> <tr><td><a href="/book/uz/v2/Git-Tools-Rewriting-History">Ўзбекча</a>,</td></tr> <tr><td><a href="/book/zh-tw/v2/Git-%e5%b7%a5%e5%85%b7-Rewriting-History">繁體中文</a>,</td></tr> </table> </p> <p> Translations started for <table> <tr><td><a href="/book/be/v2/Git-Tools-Rewriting-History">Беларуская</a>,</td></tr> <tr><td><a href="/book/fa/v2/Git-Tools-Rewriting-History" dir="rtl">فارسی</a>,</td></tr> <tr><td><a href="/book/id/v2/Git-Tools-Rewriting-History">Indonesian</a>,</td></tr> <tr><td><a href="/book/it/v2/Git-Tools-Rewriting-History">Italiano</a>,</td></tr> <tr><td><a href="/book/ms/v2/Git-Tools-Rewriting-History">Bahasa Melayu</a>,</td></tr> <tr><td><a href="/book/pt-br/v2/Git-Tools-Rewriting-History">Português (Brasil)</a>,</td></tr> <tr><td><a href="/book/pt-pt/v2/Ferramentas-do-Git-Rewriting-History">Português (Portugal)</a>,</td></tr> <tr><td><a href="/book/sv/v2/Git-Tools-Rewriting-History">Svenska</a>,</td></tr> <tr><td><a href="/book/tr/v2/Git-Ara%c3%a7lar%c4%b1-Ge%c3%a7mi%c5%9fi-Yeniden-Yazma">Türkçe</a>.</td></tr> </table> </p> <hr class="sidebar"/> <p> The source of this book is <a href="https://github.com/progit/progit2-sl">hosted on GitHub.</a></br> Patches, suggestions and comments are welcome. </p> </nav> </aside> <div id="content"> <div id="book-chapters"> <a class="dropdown-trigger" id="book-chapters-trigger" data-panel-id="chapters-dropdown" href="#">Chapters ▾</a> <div class='dropdown-panel' id='chapters-dropdown'> <div class='three-column'> <div class="column-left"> <ol class='book-toc'> <li class='chapter'> <h2>1. <a href="/book/sl/v2/Za%c4%8detek-O-nadzoru-razli%c4%8dic">Začetek</a></h2> <ol> <li> 1.1 <a href="/book/sl/v2/Za%c4%8detek-O-nadzoru-razli%c4%8dic">O nadzoru različic</a> </li> <li> 1.2 <a href="/book/sl/v2/Za%c4%8detek-Kratka-zgodovina-Gita">Kratka zgodovina Gita</a> </li> <li> 1.3 <a href="/book/sl/v2/Za%c4%8detek-Kaj-je-Git%3F">Kaj je Git?</a> </li> <li> 1.4 <a href="/book/sl/v2/Za%c4%8detek-Ukazna-vrstica">Ukazna vrstica</a> </li> <li> 1.5 <a href="/book/sl/v2/Za%c4%8detek-Namestitev-Gita">Namestitev Gita</a> </li> <li> 1.6 <a href="/book/sl/v2/Za%c4%8detek-Prva-nastavitev-Gita">Prva nastavitev Gita</a> </li> <li> 1.7 <a href="/book/sl/v2/Za%c4%8detek-Pridobivanje-pomo%c4%8di">Pridobivanje pomoči</a> </li> <li> 1.8 <a href="/book/sl/v2/Za%c4%8detek-Povzetek">Povzetek</a> </li> </ol> </li> <li class='chapter'> <h2>2. <a href="/book/sl/v2/Osnove-Git-Pridobivanje-repozitorija-Git">Osnove Git</a></h2> <ol> <li> 2.1 <a href="/book/sl/v2/Osnove-Git-Pridobivanje-repozitorija-Git">Pridobivanje repozitorija Git</a> </li> <li> 2.2 <a href="/book/sl/v2/Osnove-Git-Snemanje-sprememb-v-repozitorij">Snemanje sprememb v repozitorij</a> </li> <li> 2.3 <a href="/book/sl/v2/Osnove-Git-Pregled-zgodovine-potrditev">Pregled zgodovine potrditev</a> </li> <li> 2.4 <a href="/book/sl/v2/Osnove-Git-Razveljavljanje-stvari">Razveljavljanje stvari</a> </li> <li> 2.5 <a href="/book/sl/v2/Osnove-Git-Delo-z-daljavami">Delo z daljavami</a> </li> <li> 2.6 <a href="/book/sl/v2/Osnove-Git-Ozna%c4%8devanje">Označevanje</a> </li> <li> 2.7 <a href="/book/sl/v2/Osnove-Git-Aliasi-Git">Aliasi Git</a> </li> <li> 2.8 <a href="/book/sl/v2/Osnove-Git-Povzetek">Povzetek</a> </li> </ol> </li> <li class='chapter'> <h2>3. <a href="/book/sl/v2/Veje-Git-Veje-na-kratko">Veje Git</a></h2> <ol> <li> 3.1 <a href="/book/sl/v2/Veje-Git-Veje-na-kratko">Veje na kratko</a> </li> <li> 3.2 <a href="/book/sl/v2/Veje-Git-Osnove-vej-in-zdru%c5%beevanja">Osnove vej in združevanja</a> </li> <li> 3.3 <a href="/book/sl/v2/Veje-Git-Upravljanje-vej">Upravljanje vej</a> </li> <li> 3.4 <a href="/book/sl/v2/Veje-Git-Poteki-dela-z-vejami">Poteki dela z vejami</a> </li> <li> 3.5 <a href="/book/sl/v2/Veje-Git-Oddaljene-veje">Oddaljene veje</a> </li> <li> 3.6 <a href="/book/sl/v2/Veje-Git-Ponovno-baziranje">Ponovno baziranje</a> </li> <li> 3.7 <a href="/book/sl/v2/Veje-Git-Povzetek">Povzetek</a> </li> </ol> </li> <li class='chapter'> <h2>4. <a href="/book/sl/v2/Git-na-stre%c5%beniku-Protokoli">Git na strežniku</a></h2> <ol> <li> 4.1 <a href="/book/sl/v2/Git-na-stre%c5%beniku-Protokoli">Protokoli</a> </li> <li> 4.2 <a href="/book/sl/v2/Git-na-stre%c5%beniku-Pridobitev-Gita-na-stre%c5%beniku">Pridobitev Gita na strežniku</a> </li> <li> 4.3 <a href="/book/sl/v2/Git-na-stre%c5%beniku-Generiranje-va%c5%a1ih-javnih-klju%c4%8dev-SSH">Generiranje vaših javnih ključev SSH</a> </li> <li> 4.4 <a href="/book/sl/v2/Git-na-stre%c5%beniku-Nastavitev-stre%c5%benika">Nastavitev strežnika</a> </li> <li> 4.5 <a href="/book/sl/v2/Git-na-stre%c5%beniku-Prikriti-proces-Git">Prikriti proces Git</a> </li> <li> 4.6 <a href="/book/sl/v2/Git-na-stre%c5%beniku-Pametni-HTTP">Pametni HTTP</a> </li> <li> 4.7 <a href="/book/sl/v2/Git-na-stre%c5%beniku-GitWeb">GitWeb</a> </li> <li> 4.8 <a href="/book/sl/v2/Git-na-stre%c5%beniku-GitLab">GitLab</a> </li> <li> 4.9 <a href="/book/sl/v2/Git-na-stre%c5%beniku-Mo%c5%benosti-gostovanja-pri-tretjih-ponudnikih">Možnosti gostovanja pri tretjih ponudnikih</a> </li> <li> 4.10 <a href="/book/sl/v2/Git-na-stre%c5%beniku-Povzetek">Povzetek</a> </li> </ol> </li> <li class='chapter'> <h2>5. <a href="/book/sl/v2/Porazdeljeni-Git-Porazdeljeni-poteki-dela">Porazdeljeni Git</a></h2> <ol> <li> 5.1 <a href="/book/sl/v2/Porazdeljeni-Git-Porazdeljeni-poteki-dela">Porazdeljeni poteki dela</a> </li> <li> 5.2 <a href="/book/sl/v2/Porazdeljeni-Git-Prispevek-k-projektu">Prispevek k projektu</a> </li> <li> 5.3 <a href="/book/sl/v2/Porazdeljeni-Git-Vzdr%c5%beevanje-projekta">Vzdrževanje projekta</a> </li> <li> 5.4 <a href="/book/sl/v2/Porazdeljeni-Git-Povzetek">Povzetek</a> </li> </ol> </li> </ol> </div> <div class='column-middle'> <ol class='book-toc'> <li class='chapter'> <h2>6. <a href="/book/sl/v2/GitHub-Namestitev-in-konfiguracija-ra%c4%8duna">GitHub</a></h2> <ol> <li> 6.1 <a href="/book/sl/v2/GitHub-Namestitev-in-konfiguracija-ra%c4%8duna">Namestitev in konfiguracija računa</a> </li> <li> 6.2 <a href="/book/sl/v2/GitHub-Prispevek-k-projektu">Prispevek k projektu</a> </li> <li> 6.3 <a href="/book/sl/v2/GitHub-Vzdr%c5%beevanje-projekta">Vzdrževanje projekta</a> </li> <li> 6.4 <a href="/book/sl/v2/GitHub-Upravljanje-organizacije">Upravljanje organizacije</a> </li> <li> 6.5 <a href="/book/sl/v2/GitHub-Skriptni-GitHub">Skriptni GitHub</a> </li> <li> 6.6 <a href="/book/sl/v2/GitHub-Povzetek">Povzetek</a> </li> </ol> </li> <li class='chapter'> <h2>7. <a href="/book/sl/v2/Orodja-Git-Izbira-revizije">Orodja Git</a></h2> <ol> <li> 7.1 <a href="/book/sl/v2/Orodja-Git-Izbira-revizije">Izbira revizije</a> </li> <li> 7.2 <a href="/book/sl/v2/Orodja-Git-Interaktivno-pripravljanje">Interaktivno pripravljanje</a> </li> <li> 7.3 <a href="/book/sl/v2/Orodja-Git-Shranjevanje-na-varno-angl-stashing-in-%c4%8di%c5%a1%c4%8denje">Shranjevanje na varno (angl. stashing) in čiščenje</a> </li> <li> 7.4 <a href="/book/sl/v2/Orodja-Git-Podpisovanje-va%c5%a1ega-dela">Podpisovanje vašega dela</a> </li> <li> 7.5 <a href="/book/sl/v2/Orodja-Git-Iskanje">Iskanje</a> </li> <li> 7.6 <a href="/book/sl/v2/Orodja-Git-Prepisovanje-zgodovine" class="active">Prepisovanje zgodovine</a> </li> <li> 7.7 <a href="/book/sl/v2/Orodja-Git-Demistifikacija-ponastavitve">Demistifikacija ponastavitve</a> </li> <li> 7.8 <a href="/book/sl/v2/Orodja-Git-Napredno-zdru%c5%beevanje">Napredno združevanje</a> </li> <li> 7.9 <a href="/book/sl/v2/Orodja-Git-Rerere">Rerere</a> </li> <li> 7.10 <a href="/book/sl/v2/Orodja-Git-Razhro%c5%a1%c4%8devanje-z-Gitom">Razhroščevanje z Gitom</a> </li> <li> 7.11 <a href="/book/sl/v2/Orodja-Git-Podmoduli">Podmoduli</a> </li> <li> 7.12 <a href="/book/sl/v2/Orodja-Git-Povezovanje-v-pakete">Povezovanje v pakete</a> </li> <li> 7.13 <a href="/book/sl/v2/Orodja-Git-Zamenjava">Zamenjava</a> </li> <li> 7.14 <a href="/book/sl/v2/Orodja-Git-Shramba-poverilnic">Shramba poverilnic</a> </li> <li> 7.15 <a href="/book/sl/v2/Orodja-Git-Povzetek">Povzetek</a> </li> </ol> </li> <li class='chapter'> <h2>8. <a href="/book/sl/v2/Prilagoditev-Gita-Konfiguracija-Git">Prilagoditev Gita</a></h2> <ol> <li> 8.1 <a href="/book/sl/v2/Prilagoditev-Gita-Konfiguracija-Git">Konfiguracija Git</a> </li> <li> 8.2 <a href="/book/sl/v2/Prilagoditev-Gita-Atributi-Git">Atributi Git</a> </li> <li> 8.3 <a href="/book/sl/v2/Prilagoditev-Gita-Kljuke-Git">Kljuke Git</a> </li> <li> 8.4 <a href="/book/sl/v2/Prilagoditev-Gita-Primer-pravilnika,-ki-ga-uveljavlja-Git">Primer pravilnika, ki ga uveljavlja Git</a> </li> <li> 8.5 <a href="/book/sl/v2/Prilagoditev-Gita-Povzetek">Povzetek</a> </li> </ol> </li> <li class='chapter'> <h2>9. <a href="/book/sl/v2/Git-in-ostali-sistemi-Git-kot-odjemalec">Git in ostali sistemi</a></h2> <ol> <li> 9.1 <a href="/book/sl/v2/Git-in-ostali-sistemi-Git-kot-odjemalec">Git kot odjemalec</a> </li> <li> 9.2 <a href="/book/sl/v2/Git-in-ostali-sistemi-Migracija-na-Git">Migracija na Git</a> </li> <li> 9.3 <a href="/book/sl/v2/Git-in-ostali-sistemi-Povzetek">Povzetek</a> </li> </ol> </li> <li class='chapter'> <h2>10. <a href="/book/sl/v2/Notranjost-Gita-Napeljava-in-keramika">Notranjost Gita</a></h2> <ol> <li> 10.1 <a href="/book/sl/v2/Notranjost-Gita-Napeljava-in-keramika">Napeljava in keramika</a> </li> <li> 10.2 <a href="/book/sl/v2/Notranjost-Gita-Objekti-Git">Objekti Git</a> </li> <li> 10.3 <a href="/book/sl/v2/Notranjost-Gita-Reference-Git">Reference Git</a> </li> <li> 10.4 <a href="/book/sl/v2/Notranjost-Gita-Packfiles-datoteke-zmanj%c5%a1anih-podatkov">Packfiles (datoteke zmanjšanih podatkov)</a> </li> <li> 10.5 <a href="/book/sl/v2/Notranjost-Gita-Refspec">Refspec</a> </li> <li> 10.6 <a href="/book/sl/v2/Notranjost-Gita-Protokoli-prenosa">Protokoli prenosa</a> </li> <li> 10.7 <a href="/book/sl/v2/Notranjost-Gita-Vzdr%c5%beevanje-in-obnovitev-podatkov">Vzdrževanje in obnovitev podatkov</a> </li> <li> 10.8 <a href="/book/sl/v2/Notranjost-Gita-Spremenljivke-okolja">Spremenljivke okolja</a> </li> <li> 10.9 <a href="/book/sl/v2/Notranjost-Gita-Povzetek">Povzetek</a> </li> </ol> </li> </ol> </div> <div class='column-right'> <ol class='book-toc'> <li class='chapter'> <h2>A1. <a href="/book/sl/v2/Dodatek-A:-Git-v-drugih-okoljih-Grafi%c4%8dni-vmesniki">Dodatek A: Git v drugih okoljih</a></h2> <ol> <li> A1.1 <a href="/book/sl/v2/Dodatek-A:-Git-v-drugih-okoljih-Grafi%c4%8dni-vmesniki">Grafični vmesniki</a> </li> <li> A1.2 <a href="/book/sl/v2/Dodatek-A:-Git-v-drugih-okoljih-Git-v-Visual-Studio">Git v Visual Studio</a> </li> <li> A1.3 <a href="/book/sl/v2/Dodatek-A:-Git-v-drugih-okoljih-Git-v-Visual-Studio-Code">Git v Visual Studio Code</a> </li> <li> A1.4 <a href="/book/sl/v2/Dodatek-A:-Git-v-drugih-okoljih-Git-v-IntelliJ-/-PyCharm-/-WebStorm-/-PhpStorm-/-RubyMine">Git v IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine</a> </li> <li> A1.5 <a href="/book/sl/v2/Dodatek-A:-Git-v-drugih-okoljih-Git-v-Sublime-Text">Git v Sublime Text</a> </li> <li> A1.6 <a href="/book/sl/v2/Dodatek-A:-Git-v-drugih-okoljih-Git-v-Bashu">Git v Bashu</a> </li> <li> A1.7 <a href="/book/sl/v2/Dodatek-A:-Git-v-drugih-okoljih-Git-v-Zsh">Git v Zsh</a> </li> <li> A1.8 <a href="/book/sl/v2/Dodatek-A:-Git-v-drugih-okoljih-Git-v-Powershellu">Git v Powershellu</a> </li> <li> A1.9 <a href="/book/sl/v2/Dodatek-A:-Git-v-drugih-okoljih-Povzetek">Povzetek</a> </li> </ol> </li> <li class='chapter'> <h2>A2. <a href="/book/sl/v2/Dodatek-B:-Vdelava-Gita-v-va%c5%a1o-aplikacijo-Git-v-ukazni-vrstici">Dodatek B: Vdelava Gita v vašo aplikacijo</a></h2> <ol> <li> A2.1 <a href="/book/sl/v2/Dodatek-B:-Vdelava-Gita-v-va%c5%a1o-aplikacijo-Git-v-ukazni-vrstici">Git v ukazni vrstici</a> </li> <li> A2.2 <a href="/book/sl/v2/Dodatek-B:-Vdelava-Gita-v-va%c5%a1o-aplikacijo-Libgit2">Libgit2</a> </li> <li> A2.3 <a href="/book/sl/v2/Dodatek-B:-Vdelava-Gita-v-va%c5%a1o-aplikacijo-JGit">JGit</a> </li> <li> A2.4 <a href="/book/sl/v2/Dodatek-B:-Vdelava-Gita-v-va%c5%a1o-aplikacijo-go-git">go-git</a> </li> <li> A2.5 <a href="/book/sl/v2/Dodatek-B:-Vdelava-Gita-v-va%c5%a1o-aplikacijo-Dulwich">Dulwich</a> </li> </ol> </li> <li class='chapter'> <h2>A3. <a href="/book/sl/v2/Dodatek-C:-Ukazi-Git-Nastavitev-in-konfiguracija">Dodatek C: Ukazi Git</a></h2> <ol> <li> A3.1 <a href="/book/sl/v2/Dodatek-C:-Ukazi-Git-Nastavitev-in-konfiguracija">Nastavitev in konfiguracija</a> </li> <li> A3.2 <a href="/book/sl/v2/Dodatek-C:-Ukazi-Git-Pridobivanje-in-ustvarjanje-projektov">Pridobivanje in ustvarjanje projektov</a> </li> <li> A3.3 <a href="/book/sl/v2/Dodatek-C:-Ukazi-Git-Osnove-posnetkov">Osnove posnetkov</a> </li> <li> A3.4 <a href="/book/sl/v2/Dodatek-C:-Ukazi-Git-Veje-in-zdru%c5%beevanje">Veje in združevanje</a> </li> <li> A3.5 <a href="/book/sl/v2/Dodatek-C:-Ukazi-Git-Deljenje-in-posodabljanje-projektov">Deljenje in posodabljanje projektov</a> </li> <li> A3.6 <a href="/book/sl/v2/Dodatek-C:-Ukazi-Git-Pregled-in-primerjava">Pregled in primerjava</a> </li> <li> A3.7 <a href="/book/sl/v2/Dodatek-C:-Ukazi-Git-Razhro%c5%a1%c4%8devanje">Razhroščevanje</a> </li> <li> A3.8 <a href="/book/sl/v2/Dodatek-C:-Ukazi-Git-Popravljanje">Popravljanje</a> </li> <li> A3.9 <a href="/book/sl/v2/Dodatek-C:-Ukazi-Git-E-po%c5%a1ta">E-pošta</a> </li> <li> A3.10 <a href="/book/sl/v2/Dodatek-C:-Ukazi-Git-Zunanji-sistemi">Zunanji sistemi</a> </li> <li> A3.11 <a href="/book/sl/v2/Dodatek-C:-Ukazi-Git-Administracija">Administracija</a> </li> <li> A3.12 <a href="/book/sl/v2/Dodatek-C:-Ukazi-Git-Orodja-za-sisteme-napeljave">Orodja za sisteme napeljave</a> </li> </ol> </li> </ol> </div> </div> </div> <span class="light" id="edition"> 2nd Edition </span> </div> <div id="main" data-pagefind-filter="category:book" data-pagefind-meta="category:Book" data-pagefind-weight="0.05" data-pagefind-body class="book edition2"> <h1>7.6 Orodja Git - Prepisovanje zgodovine</h1> <div> <h2 id="_rewriting_history">Prepisovanje zgodovine</h2> <div class="paragraph"> <p>Pri delu z Gitom se pogosto zgodi, da želite spremeniti zgodovino lokalnih potrditev. Ena od prednosti Gita je, da vam omogoča sprejemanje odločitev v zadnjem trenutku. Lahko se odločite, katere datoteke gredo v katero potrditev, tik preden jih potrdite s področjem priprave, lahko se odločite, da še ne želite delati na določenem delu z <code>git stash</code> in prepišete lahko potrditve, ki so se že zgodile, tako da izgledajo, kot da so se zgodile drugače. To lahko vključuje spreminjanje vrstnega reda potrditev, spreminjanje sporočil ali datotek v potrditvi, stiskanje skupaj ali razcepitev potrditev, ali pa popolno odstranjevanje potrditev — vse to, preden svoje delo delite z drugimi.</p> </div> <div class="paragraph"> <p>V tem razdelku boste videli, kako izvesti te naloge, tako da lahko svojo zgodovino potrditev uredite po želji, preden jo delite z drugimi.</p> </div> <div class="admonitionblock note"> <table> <tr> <td class="icon"> <div class="title">Opomba</div> </td> <td class="content"> <div class="title">Ne potisnite svojega dela dokler niste z njim zadovoljni</div> <div class="paragraph"> <p>Ena izmed ključnih pravil Gita je, da imate zaradi tega, ker je veliko dela lokalno v vašem klonu, veliko svobode pri spreminjanju vaše zgodovine lokalno. Vendar pa je to povsem druga zgodba, ko enkrat potisnete svoje delo, in takrat morate objavljeno delo obravnavati kot končno, razen če imate dober razlog za njegovo spreminjanje. Skratka, izogibati se morate potiskanju svojega dela, dokler niste z njim zadovoljni in ga pripravljeni deliti z ostalim svetom.</p> </div> </td> </tr> </table> </div> <div class="sect3"> <h3 id="_git_amend">Spreminjanje zadnje potrditve</h3> <div class="paragraph"> <p>Spreminjanje vaše zadnje potrditve je verjetno najpogostejše prepisovanje zgodovine, ki ga boste naredili. Pogosto boste želeli narediti dve osnovni stvari na svoji zadnji potrditvi: preprosto spremeniti sporočilo potrditve, ali pa spremeniti njeno dejansko vsebino z dodajanjem, odstranjevanjem in spreminjanjem datotek.</p> </div> <div class="paragraph"> <p>Če želite preprosto spremeniti sporočilo zadnje potrditve, je to precej enostavno:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git commit --amend</code></pre> </div> </div> <div class="paragraph"> <p>Zgoraj navedeni ukaz naloži sporočilo prejšnje potrditve v sejo urejevalnika, kjer lahko spremenite sporočilo, shranite spremembe in izstopite. Ko shranite in zaprete urejevalnik, se ustvari nova potrditev s posodobljenim sporočilom in postane vaša nova zadnja potrditev.</p> </div> <div class="paragraph"> <p>Če pa želite spremeniti dejansko <em>vsebino</em> zadnje potrditve, postopek deluje na enak način — najprej naredite spremembe, ki ste jih pozabili, shranite te spremembe in nato z uporabo ukaza <code>git commit --amend</code> <em>zamenjate</em> zadnjo potrditev z vašo novo in izboljšano potrditvijo.</p> </div> <div class="paragraph"> <p>Pri tej tehniki morate biti previdni, saj spremeni vrednost SHA-1 potrditve. Gre za zelo majhno ponovno baziranje — ne spreminjajte zadnje potrditve, če ste jo že potisnili.</p> </div> <div class="admonitionblock tip"> <table> <tr> <td class="icon"> <div class="title">Namig</div> </td> <td class="content"> <div class="title">Spremenjena potrditev lahko (ali pa ne) potrebuje spremenjeno sporočilo potrditve</div> <div class="paragraph"> <p>Ko popravljate potrditev, imate možnost spremeniti tako sporočilo potrditve kot tudi njeno vsebino. Če bistveno spremenite vsebino potrditve, bi morali skoraj zagotovo posodobiti njeno sporočilo, da odraža to spremenjeno vsebino.</p> </div> <div class="paragraph"> <p>Po drugi strani če so vaše spremembe ustrezno nepomembne (popravljanje neumne tipkarske napake ali dodajanje datoteke, ki ste jo pozabili dati v področje priprave), tako da je prejšnje sporočilo potrditve v redu, lahko preprosto opravite spremembe, jih postavite v področje priprave in se v celoti izognete nepotrebnemu urejevalniku z:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git commit --amend --no-edit</code></pre> </div> </div> </td> </tr> </table> </div> </div> <div class="sect3"> <h3 id="_changing_multiple">Spreminjanje več sporočil potrditev</h3> <div class="paragraph"> <p>Če želite spremeniti potrditev, ki je dlje nazaj v zgodovini, morate uporabiti bolj zapletena orodja. Git nima orodja za spreminjanje zgodovine, vendar lahko uporabite orodje ponovnega baziranja, da na novo nanesete serijo potrditev na HEAD, na kateri so bile prvotno zasnovane, namesto da jih premikate na drugo glavo. Z interaktivnim orodjem ponovnega baziranja se lahko nato ustavite po vsaki potrditvi, ki jo želite spremeniti, in spremenite sporočilo, dodate datoteke, ali karkoli drugega želite narediti tam. Ponovno baziranje lahko poganjate interaktivno tako, da dodate ukazu <code>git rebase</code> možnost <code>-i</code>. Morali boste navesti, kako daleč nazaj želite preoblikovati potrditve, tako da ukazu poveste, na katero potrditev naj se ponovno baziranje izvaja.</p> </div> <div class="paragraph"> <p>Na primer, če želite spremeniti zadnja tri sporočila potrditev, ali katero koli sporočilo v tej skupini, argumentu <code>git rebase -i</code> podate nadrejeno zadnje potrditve, ki jo želite urediti, kar je <code>HEAD~2^</code> ali <code>HEAD~3</code>. Lahko si zapomnite <code>~3</code>, ker poskušate urediti zadnje tri potrditve, vendar imejte v mislih, da dejansko določate štiri potrditve nazaj, nadrejeno zadnje potrditve, ki jo želite urediti:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git rebase -i HEAD~3</code></pre> </div> </div> <div class="paragraph"> <p>Ponovno poudarjamo, da gre za ukaz ponovnega baziranja — vsaka potrditev v območju <code>HEAD~3..HEAD</code> s spremenjenim sporočilom in <em>vsi njeni potomci</em> bodo preoblikovani. Ne vključite nobene potrditve, ki ste jo že potisnili na osrednji strežnik — to bo druge razvijalce zmedlo z zagotavljanjem alternativne različice iste spremembe.</p> </div> <div class="paragraph"> <p>Zagon tega ukaza vam da seznam potrditev v urejevalniku besedil, ki je videti nekako takole:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code>pick f7f3f6d Change my name a bit pick 310154e Update README formatting and add blame pick a5f4a0d Add cat-file # Rebase 710f0f8..a5f4a0d onto 710f0f8 # # Commands: # p, pick &lt;commit&gt; = use commit # r, reword &lt;commit&gt; = use commit, but edit the commit message # e, edit &lt;commit&gt; = use commit, but stop for amending # s, squash &lt;commit&gt; = use commit, but meld into previous commit # f, fixup &lt;commit&gt; = like "squash", but discard this commit's log message # x, exec &lt;command&gt; = run command (the rest of the line) using shell # b, break = stop here (continue rebase later with 'git rebase --continue') # d, drop &lt;commit&gt; = remove commit # l, label &lt;label&gt; = label current HEAD with a name # t, reset &lt;label&gt; = reset HEAD to a label # m, merge [-C &lt;commit&gt; | -c &lt;commit&gt;] &lt;label&gt; [# &lt;oneline&gt;] # . create a merge commit using the original merge commit's # . message (or the oneline, if no original merge commit was # . specified). Use -c &lt;commit&gt; to reword the commit message. # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. # # Note that empty commits are commented out</code></pre> </div> </div> <div class="paragraph"> <p>Pomembno je opozoriti, da so te potrditve navedene v obratnem vrstnem redu, kot jih običajno vidite z uporabo ukaza <code>log</code>. Če zaženete <code>log</code>, boste videli nekaj takega:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git log --pretty=format:"%h %s" HEAD~3..HEAD a5f4a0d Add cat-file 310154e Update README formatting and add blame f7f3f6d Change my name a bit</code></pre> </div> </div> <div class="paragraph"> <p>Opazite obratni vrstni red. Interaktivno ponovno baziranje vam da skript, ki ga bo izvedel. Začelo se bo pri potrditvi, ki jo določite v ukazni vrstici (<code>HEAD~3</code>) in bo od vrha navzdol ponovilo spremembe, uvedene v vsaki od teh potrditev. Najstarejšo potrditev na seznamu postavi na vrh, namesto najnovejše, ker jo bo najprej ponovilo.</p> </div> <div class="paragraph"> <p>Skript morate urediti, da se ustavi pri potrditvi, ki jo želite urediti. Da bi to naredili, spremenite besedo <code>pick</code> v besedo <code>edit</code> za vsako potrditev, za katero želite, da se skript ustavi po njej. Na primer, če želite spremeniti samo sporočilo tretje potrditve, spremenite datoteko, da je videti tako:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code>edit f7f3f6d Change my name a bit pick 310154e Update README formatting and add blame pick a5f4a0d Add cat-file</code></pre> </div> </div> <div class="paragraph"> <p>Ko shranite in zapustite urejevalnik, vas Git previje nazaj na zadnjo potrditev na seznamu in vas postavi v ukazno vrstico z naslednjim sporočilom:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git rebase -i HEAD~3 Stopped at f7f3f6d... Change my name a bit You can amend the commit now, with git commit --amend Once you're satisfied with your changes, run git rebase --continue</code></pre> </div> </div> <div class="paragraph"> <p>Ta navodila vam povedo točno, kar morate narediti. Vpišite:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git commit --amend</code></pre> </div> </div> <div class="paragraph"> <p>Spremenite sporočilo potrditve in zapustite urejevalnik. Nato poženite:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git rebase --continue</code></pre> </div> </div> <div class="paragraph"> <p>Ta ukaz bo samodejno uporabil drugi dve potrditvi in potem ste končali. Če na več vrsticah spremenite <code>pick</code> v <code>edit</code>, lahko za vsako potrditev, ki jo spremenite v <code>edit</code>, ponovite te korake. Vsakič se bo Git ustavil, vam dovolil popraviti potrditev in nadaljeval, ko končate.</p> </div> </div> <div class="sect3"> <h3 id="_preurejanje_potrditev">Preurejanje potrditev</h3> <div class="paragraph"> <p>Interaktivna ponovna baziranja lahko uporabite tudi za preureditev ali popolno odstranitev potrditev. Če želite odstraniti potrditev »Add cat-file« in spremeniti vrstni red, v katerem sta uvedeni drugi dve potrditvi, lahko spremenite skript ponovnega baziranja iz tega:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code>pick f7f3f6d Change my name a bit pick 310154e Update README formatting and add blame pick a5f4a0d Add cat-file</code></pre> </div> </div> <div class="paragraph"> <p>na to:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code>pick 310154e Update README formatting and add blame pick f7f3f6d Change my name a bit</code></pre> </div> </div> <div class="paragraph"> <p>Ko shranite in zaprete urejevalnik, Git previje vašo vejo nazaj na nadrejeno teh potrditev, uporabi <code>310154e</code> in nato <code>f7f3f6d</code> ter se nato ustavi. Učinkovito ste spremenili vrstni red teh potrditev in popolnoma odstranili potrditev »Add cat-file«.</p> </div> </div> <div class="sect3"> <h3 id="_squashing">Stiskanje potrditev skupaj</h3> <div class="paragraph"> <p>Z interaktivnim orodjem ponovnega baziranja je možno združiti tudi serijo potrditev v eno samo potrditev. Skript v sporočilu ponovnega baziranja vključuje uporabna navodila:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code># # Commands: # p, pick &lt;commit&gt; = use commit # r, reword &lt;commit&gt; = use commit, but edit the commit message # e, edit &lt;commit&gt; = use commit, but stop for amending # s, squash &lt;commit&gt; = use commit, but meld into previous commit # f, fixup &lt;commit&gt; = like "squash", but discard this commit's log message # x, exec &lt;command&gt; = run command (the rest of the line) using shell # b, break = stop here (continue rebase later with 'git rebase --continue') # d, drop &lt;commit&gt; = remove commit # l, label &lt;label&gt; = label current HEAD with a name # t, reset &lt;label&gt; = reset HEAD to a label # m, merge [-C &lt;commit&gt; | -c &lt;commit&gt;] &lt;label&gt; [# &lt;oneline&gt;] # . create a merge commit using the original merge commit's # . message (or the oneline, if no original merge commit was # . specified). Use -c &lt;commit&gt; to reword the commit message. # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. # # Note that empty commits are commented out</code></pre> </div> </div> <div class="paragraph"> <p>Če namesto <code>pick</code> ali <code>edit</code> navedete <code>squash</code>, Git uporabi tako spremembo kot tudi spremembo neposredno pred njo in vas prosi, da združite sporočila potrditev. Če želite na primer ustvariti eno samo potrditev iz teh treh potrditev, lahko skript oblikujete na ta način:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code>pick f7f3f6d Change my name a bit squash 310154e Update README formatting and add blame squash a5f4a0d Add cat-file</code></pre> </div> </div> <div class="paragraph"> <p>Ko shranite in zapustite urejevalnik, bo Git uporabil vse tri spremembe in vas nato vrnil nazaj v urejevalnik, da združite tri sporočila potrditev.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code># This is a combination of 3 commits. # The first commit's message is: Change my name a bit # This is the 2nd commit message: Update README formatting and add blame # This is the 3rd commit message: Add cat-file</code></pre> </div> </div> <div class="paragraph"> <p>Ko to shranite, boste imeli eno potrditev, ki vsebuje spremembe vseh treh prejšnjih potrditev.</p> </div> </div> <div class="sect3"> <h3 id="_razdelitev_potrditve">Razdelitev potrditve</h3> <div class="paragraph"> <p>Razdelitev (angl. <em>splitting</em>) potrditve razveljavi potrditev in jo delno doda v področje priprave ter nato potrdi tolikokrat s kolikor potrditev želite končati. Na primer, če želite razdeliti srednjo potrditev iz svojih treh potrditev. Namesto »Update README formatting and add blame« jo želite razdeliti na dve potrditvi: »Update README formatting« za prvo in »Add blame« za drugo. To lahko storite v skriptu <code>rebase -i</code>, tako da spremenite navodila na potrditvi, ki jo želite razdeliti, na <code>edit</code>:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">pick f7f3f6d Change my name a bit edit 310154e Update README formatting and add blame pick a5f4a0d Add cat-file</code></pre> </div> </div> <div class="paragraph"> <p>Nato, ko vas skript spusti v ukazno vrstico, ponastavite to potrditev, vzamete spremembe, ki so bile ponastavljene, in iz njih ustvarite več potrditev. Ko shranite in zaprete urejevalnik, se Git premakne nazaj na nadrejeno prve potrditve na vašem seznamu, uporabi prvo potrditev (<code>f7f3f6d</code>), uporabi drugo (<code>310154e</code>) in vas spusti v konzolo. Tam lahko naredite mešano ponastavitev te potrditve z <code>git reset HEAD^</code>, ki učinkovito razveljavi to potrditev in pusti spremenjene datoteke izven področja priprave. Sedaj lahko označite in potrdite datoteke, dokler ne dobite več potrditev, in ko končate, zaženete <code>git rebase --continue</code>:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git reset HEAD^ $ git add README $ git commit -m 'Update README formatting' $ git add lib/simplegit.rb $ git commit -m 'Add blame' $ git rebase --continue</code></pre> </div> </div> <div class="paragraph"> <p>Git uporabi zadnjo potrditev v skriptu (<code>a5f4a0d</code>) in vaša zgodovina je videti takole:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git log -4 --pretty=format:"%h %s" 1c002dd Add cat-file 9b29157 Add blame 35cfb2b Update README formatting f7f3f6d Change my name a bit</code></pre> </div> </div> <div class="paragraph"> <p>To spremeni SHA-1 treh najnovejših potrditev na vašem seznamu, zato poskrbite, da nobena spremenjena potrditev, ki se pojavi na tem seznamu, že ni bila potisnjena v skupno rabo. Opazite, da je zadnja potrditev na seznamu (<code>f7f3f6d</code>) nespremenjena. Kljub temu, da je ta potrditev prikazana v skriptu, ker je bila označena kot <code>pick</code> in je bila uporabljena pred vsemi spremembami ponovnega baziranja, Git pusti potrditev nespremenjeno.</p> </div> </div> <div class="sect3"> <h3 id="_brisanje_potrditve">Brisanje potrditve</h3> <div class="paragraph"> <p>Če želite odstraniti potrditev, jo lahko izbrišete s pomočjo skripta <code>rebase -i</code>. Na seznamu potrditev pred tisto, ki jo želite izbrisati, vnesite besedo <code>drop</code> (ali pa samo izbrišite to vrstico iz skripta za ponovno baziranje):</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">pick 461cb2a This commit is OK drop 5aecc10 This commit is broken</code></pre> </div> </div> <div class="paragraph"> <p>Zaradi načina, kako Git gradi objekte potrditev, bo brisanje ali spreminjanje potrditve povzročilo ponovno pisanje vseh potrditev, ki sledijo. Bolj, ko se pomikate nazaj v zgodovino svojega repozitorija, več potrditev bo treba ustvariti. Če imate v zaporedju veliko potrditev, ki so odvisne od tiste, ki ste jo pravkar izbrisali, lahko to povzroči veliko konfliktov med združevanjem.</p> </div> <div class="paragraph"> <p>Če se nekje na sredini ponovnega baziranja odločite, da to ni dobra ideja, se lahko vedno ustavite. Vpišite <code>git rebase --abort</code> in vaš repozitorij se bo povrnil v stanje, v katerem je bil pred začetkom ponovnega baziranja.</p> </div> <div class="paragraph"> <p>Če končate ponovno baziranje in se odločite, da to ni to, kar želite, lahko uporabite <code>git reflog</code>, da obnovite prejšnjo različico svoje veje. Glejte razdelek <a href="/book/sl/v2/ch00/_data_recovery">Obnovitev podatkov</a> za več informacij o ukazu <code>reflog</code>.</p> </div> <div class="admonitionblock note"> <table> <tr> <td class="icon"> <div class="title">Opomba</div> </td> <td class="content"> <div class="paragraph"> <p>Drew DeVault je pripravil praktični vodnik z vajami, ki vam pomaga se naučiti uporabljati <code>git rebase</code>. Najdete ga na: <a href="https://git-rebase.io/" class="bare" target="_blank" rel="noopener">https://git-rebase.io/</a></p> </div> </td> </tr> </table> </div> </div> <div class="sect3"> <h3 id="_jedrska_možnost_filter_branch">Jedrska možnost: filter-branch</h3> <div class="paragraph"> <p>Obstaja še ena možnost spreminjanja zgodovine, ki jo lahko uporabite, če morate na neki skriptni način spremeniti večje število potrditev — na primer globalno spremeniti svoj e-poštni naslov ali odstraniti datoteko iz vsake potrditve. Ukaz je <code>filter-branch</code> in lahko ponovno napiše ogromne dele vaše zgodovine, zato ga verjetno ne bi smeli uporabljati, razen če vaš projekt še ni javen in drugi ljudje še niso temeljili na delu, ki ste ga ravno nameravali spremeniti. Vendar pa je lahko zelo uporaben. Naučili se boste nekaj običajnih uporab, da boste dobili predstavo o nekaterih stvareh, ki jih lahko naredi.</p> </div> <div class="admonitionblock caution"> <table> <tr> <td class="icon"> <div class="title">Pozor</div> </td> <td class="content"> <div class="paragraph"> <p><code>git filter-branch</code> ima veliko pasti in ni več priporočen način za spreminjanje zgodovine. Namesto tega razmislite o uporabi skripta Python <code>git-filter-repo</code>, ki v večini aplikacij, kjer bi se običajno obrnili na <code>filter-branch</code>, opravi boljšo nalogo. Dokumentacija in izvorna koda sta na voljo na spletnem naslovu <a href="https://github.com/newren/git-filter-repo" class="bare" target="_blank" rel="noopener">https://github.com/newren/git-filter-repo</a>.</p> </div> </td> </tr> </table> </div> <div class="sect4"> <h4 id="_removing_file_every_commit">Odstranjevanje datoteke iz vsake potrditve</h4> <div class="paragraph"> <p>To se zgodi pogostokrat. Nekdo naključno doda veliko binarno datoteko z nepremišljenim <code>git add .</code> in želite jo odstraniti povsod. Morda ste nenamerno dali v repozitorij datoteko, ki vsebuje geslo, in želite svoj projekt narediti odprtokodni. <code>filter-branch</code> je orodje, ki ga verjetno želite uporabiti, da očistite celotno zgodovino. Če želite iz celotne zgodovine odstraniti datoteko z imenom <code>passwords.txt</code>, lahko uporabite možnost <code>--tree-filter</code> v <code>filter-branch</code>:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd (21/21) Ref 'refs/heads/master' was rewritten</code></pre> </div> </div> <div class="paragraph"> <p>Možnost <code>--tree-filter</code> po vsakem izvleku projekta izvede navedeni ukaz in nato ponovno potrdi rezultate. V tem primeru odstranite datoteko <code>passwords.txt</code> iz vsakega posnetka, ne glede na to, ali obstaja ali ne. Če želite odstraniti vse naključno dodane datoteke varnostnih kopij urejevalnika, lahko zaženete nekaj takega kot <code>git filter-branch --tree-filter 'rm -f *~' HEAD</code>.</p> </div> <div class="paragraph"> <p>Lahko spremljate Git, ko ponovno piše drevesa in potrditve, nato pa premaknete kazalnik veje na konec. Na splošno je dobra ideja to storiti v testni veji in nato trdo ponastaviti vašo vejo <code>master</code>, ko ugotovite, da je rezultat tisto, kar resnično želite. Če želite zagnati <code>filter-branch</code> na vseh vejah, lahko ukazu podate <code>--all</code>.</p> </div> </div> <div class="sect4"> <h4 id="_izdelava_podimenika_v_novi_koren">Izdelava podimenika v novi koren</h4> <div class="paragraph"> <p>Recimo, da ste uvozili projekt iz drugega sistema za nadzor nad izvorno kodo in imate poddirektorije, ki nimajo smisla (<code>trunk</code>, <code>tags</code> itd.). Če želite narediti poddirektorij <code>trunk</code> za nov koren projekta za vsako potrditev, vam lahko <code>filter-branch</code> pomaga tudi pri tem:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git filter-branch --subdirectory-filter trunk HEAD Rewrite 856f0bf61e41a27326cdae8f09fe708d679f596f (12/12) Ref 'refs/heads/master' was rewritten</code></pre> </div> </div> <div class="paragraph"> <p>Zdaj je vaš novi projekt osnovna mapa, ki je bila vsakič v podmapi <code>trunk</code>. Git bo samodejno odstranil tudi potrditve, ki niso vplivale na podmapo.</p> </div> </div> <div class="sect4"> <h4 id="_globalno_spreminjanje_e_poštnih_naslovov">Globalno spreminjanje e-poštnih naslovov</h4> <div class="paragraph"> <p>Še en pogost primer je, da ste pozabili zagnati <code>git config</code>, da bi nastavili vaše ime in e-poštni naslov, preden ste začeli delati, ali pa morda želite objaviti projekt na delovnem mestu in spremeniti vse delovne e-poštne naslove v svoj osebni naslov. V vsakem primeru lahko s <code>filter-branch</code> spremenite e-poštne naslove v več potrditvah naenkrat. Paziti morate, da spremenite samo tiste e-poštne naslove, ki so vaši, zato uporabite <code>--commit-filter</code>:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console?prompt=$" data-lang="console?prompt=$">$ git filter-branch --commit-filter ' if [ "$GIT_AUTHOR_EMAIL" = "schacon@localhost" ]; then GIT_AUTHOR_NAME="Scott Chacon"; GIT_AUTHOR_EMAIL="schacon@example.com"; git commit-tree "$@"; else git commit-tree "$@"; fi' HEAD</code></pre> </div> </div> <div class="paragraph"> <p>To gre skozi in prepiše vsako potrditev z vašim novim naslovom. Ker potrditve vsebujejo vrednosti SHA-1 njihovih nadrejenih, ta ukaz spremeni vrednosti SHA-1 vsake potrditve v vaši zgodovini, ne samo tistih, ki imajo prilegajoči se naslov e-pošte.</p> </div> </div> </div> <div id="nav"><a href="/book/sl/v2/Orodja-Git-Iskanje">prev</a> | <a href="/book/sl/v2/Orodja-Git-Demistifikacija-ponastavitve">next</a></div> </div> </div> </div> </div> <footer> <div class="site-source"> <a href="/site">About this site</a><br> Patches, suggestions, and comments are welcome. </div> <div class="sfc-member"> Git is a member of <a href="/sfc">Software Freedom Conservancy</a> </div> </footer> <a href="#top" class="no-js scrollToTop" id="scrollToTop" data-label="Scroll to top"> <img src="/images/icons/chevron-up@2x.png" width="20" height="20" alt="scroll-to-top"/> </a> <script src="/js/jquery-1.7.1.min.js"></script> <script src="/js/jquery-ui-1.8.18.custom.min.js"></script> <script src="/js/jquery.defaultvalue.js"></script> <script src="/js/session.min.js"></script> <script src="/js/application.min.js"></script> </div> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10