CINXE.COM

Git - Манипулация на историята

<!DOCTYPE html> <html lang="bg"> <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 - Манипулация на историята</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">English</a>. </p> <p> Full translation available in <table> <tr><td><a href="/book/az">azərbaycan dili</a>,</td></tr> <tr><td><a href="/book/bg/v2/Git-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-%d0%9c%d0%b0%d0%bd%d0%b8%d0%bf%d1%83%d0%bb%d0%b0%d1%86%d0%b8%d1%8f-%d0%bd%d0%b0-%d0%b8%d1%81%d1%82%d0%be%d1%80%d0%b8%d1%8f%d1%82%d0%b0">български език</a>,</td></tr> <tr><td><a href="/book/de">Deutsch</a>,</td></tr> <tr><td><a href="/book/es">Español</a>,</td></tr> <tr><td><a href="/book/fr">Français</a>,</td></tr> <tr><td><a href="/book/gr">Ελληνικά</a>,</td></tr> <tr><td><a href="/book/ja">日本語</a>,</td></tr> <tr><td><a href="/book/ko">한국어</a>,</td></tr> <tr><td><a href="/book/nl">Nederlands</a>,</td></tr> <tr><td><a href="/book/ru">Русский</a>,</td></tr> <tr><td><a href="/book/sl">Slovenščina</a>,</td></tr> <tr><td><a href="/book/tl">Tagalog</a>,</td></tr> <tr><td><a href="/book/uk">Українська</a></td></tr> <tr><td><a href="/book/zh">简体中文</a>,</td></tr> </table> </p> <p> Partial translations available in <table> <tr><td><a href="/book/cs">Čeština</a>,</td></tr> <tr><td><a href="/book/mk">Македонски</a>,</td></tr> <tr><td><a href="/book/pl">Polski</a>,</td></tr> <tr><td><a href="/book/sr">Српски</a>,</td></tr> <tr><td><a href="/book/uz">Ўзбекча</a>,</td></tr> <tr><td><a href="/book/zh-tw">繁體中文</a>,</td></tr> </table> </p> <p> Translations started for <table> <tr><td><a href="/book/be">Беларуская</a>,</td></tr> <tr><td><a href="/book/fa" dir="rtl">فارسی</a>,</td></tr> <tr><td><a href="/book/id">Indonesian</a>,</td></tr> <tr><td><a href="/book/it">Italiano</a>,</td></tr> <tr><td><a href="/book/ms">Bahasa Melayu</a>,</td></tr> <tr><td><a href="/book/pt-br">Português (Brasil)</a>,</td></tr> <tr><td><a href="/book/pt-pt">Português (Portugal)</a>,</td></tr> <tr><td><a href="/book/sv">Svenska</a>,</td></tr> <tr><td><a href="/book/tr">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-bg">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/bg/v2/%d0%9d%d0%b0%d1%87%d0%b0%d0%bb%d0%be-%d0%97%d0%b0-Version-Control-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b8%d1%82%d0%b5">Начало</a></h2> <ol> <li> 1.1 <a href="/book/bg/v2/%d0%9d%d0%b0%d1%87%d0%b0%d0%bb%d0%be-%d0%97%d0%b0-Version-Control-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b8%d1%82%d0%b5">За Version Control системите</a> </li> <li> 1.2 <a href="/book/bg/v2/%d0%9d%d0%b0%d1%87%d0%b0%d0%bb%d0%be-%d0%9a%d1%80%d0%b0%d1%82%d0%ba%d0%b0-%d0%b8%d1%81%d1%82%d0%be%d1%80%d0%b8%d1%8f-%d0%bd%d0%b0-Git">Кратка история на Git</a> </li> <li> 1.3 <a href="/book/bg/v2/%d0%9d%d0%b0%d1%87%d0%b0%d0%bb%d0%be-%d0%9a%d0%b0%d0%ba%d0%b2%d0%be-%d0%b5-Git">Какво е Git</a> </li> <li> 1.4 <a href="/book/bg/v2/%d0%9d%d0%b0%d1%87%d0%b0%d0%bb%d0%be-%d0%9a%d0%be%d0%bd%d0%b7%d0%be%d0%bb%d0%b0%d1%82%d0%b0-%d0%bd%d0%b0-Git">Конзолата на Git</a> </li> <li> 1.5 <a href="/book/bg/v2/%d0%9d%d0%b0%d1%87%d0%b0%d0%bb%d0%be-%d0%98%d0%bd%d1%81%d1%82%d0%b0%d0%bb%d0%b8%d1%80%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-Git">Инсталиране на Git</a> </li> <li> 1.6 <a href="/book/bg/v2/%d0%9d%d0%b0%d1%87%d0%b0%d0%bb%d0%be-%d0%9f%d1%8a%d1%80%d0%b2%d0%be%d0%bd%d0%b0%d1%87%d0%b0%d0%bb%d0%bd%d0%b0-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%bd%d0%b0-Git">Първоначална настройка на Git</a> </li> <li> 1.7 <a href="/book/bg/v2/%d0%9d%d0%b0%d1%87%d0%b0%d0%bb%d0%be-%d0%9f%d0%be%d0%bc%d0%be%d1%89%d0%bd%d0%b0-%d0%b8%d0%bd%d1%84%d0%be%d1%80%d0%bc%d0%b0%d1%86%d0%b8%d1%8f-%d0%b2-Git">Помощна информация в Git</a> </li> <li> 1.8 <a href="/book/bg/v2/%d0%9d%d0%b0%d1%87%d0%b0%d0%bb%d0%be-%d0%9e%d0%b1%d0%be%d0%b1%d1%89%d0%b5%d0%bd%d0%b8%d0%b5">Обобщение</a> </li> </ol> </li> <li class='chapter'> <h2>2. <a href="/book/bg/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-%d0%bd%d0%b0-Git-%d0%a1%d1%8a%d0%b7%d0%b4%d0%b0%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-Git-%d1%85%d1%80%d0%b0%d0%bd%d0%b8%d0%bb%d0%b8%d1%89%d0%b5">Основи на Git</a></h2> <ol> <li> 2.1 <a href="/book/bg/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-%d0%bd%d0%b0-Git-%d0%a1%d1%8a%d0%b7%d0%b4%d0%b0%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-Git-%d1%85%d1%80%d0%b0%d0%bd%d0%b8%d0%bb%d0%b8%d1%89%d0%b5">Създаване на Git хранилище</a> </li> <li> 2.2 <a href="/book/bg/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-%d0%bd%d0%b0-Git-%d0%97%d0%b0%d0%bf%d0%b8%d1%81-%d0%bd%d0%b0-%d0%bf%d1%80%d0%be%d0%bc%d0%b5%d0%bd%d0%b8-%d0%b2-%d1%85%d1%80%d0%b0%d0%bd%d0%b8%d0%bb%d0%b8%d1%89%d0%b5%d1%82%d0%be">Запис на промени в хранилището</a> </li> <li> 2.3 <a href="/book/bg/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-%d0%bd%d0%b0-Git-%d0%9f%d1%80%d0%b5%d0%b3%d0%bb%d0%b5%d0%b4-%d0%bd%d0%b0-%d0%b8%d1%81%d1%82%d0%be%d1%80%d0%b8%d1%8f%d1%82%d0%b0-%d0%bd%d0%b0-%d0%b4%d0%b5%d0%b9%d1%81%d1%82%d0%b2%d0%b8%d1%8f%d1%82%d0%b0">Преглед на историята на действията</a> </li> <li> 2.4 <a href="/book/bg/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-%d0%bd%d0%b0-Git-%d0%92%d1%8a%d0%b7%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d1%8f%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-%d0%bd%d0%b0%d0%bf%d1%80%d0%b0%d0%b2%d0%b5%d0%bd%d0%b8-%d0%b4%d0%b5%d0%b9%d1%81%d1%82%d0%b2%d0%b8%d1%8f">Възстановяване на направени действия</a> </li> <li> 2.5 <a href="/book/bg/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-%d0%bd%d0%b0-Git-%d0%a0%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d1%81-%d0%be%d1%82%d0%b4%d0%b0%d0%bb%d0%b5%d1%87%d0%b5%d0%bd%d0%b8-%d1%85%d1%80%d0%b0%d0%bd%d0%b8%d0%bb%d0%b8%d1%89%d0%b0">Работа с отдалечени хранилища</a> </li> <li> 2.6 <a href="/book/bg/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-%d0%bd%d0%b0-Git-%d0%a2%d0%b0%d0%b3%d0%be%d0%b2%d0%b5-%d0%b2-Git">Тагове в Git</a> </li> <li> 2.7 <a href="/book/bg/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-%d0%bd%d0%b0-Git-%d0%9f%d1%81%d0%b5%d0%b2%d0%b4%d0%be%d0%bd%d0%b8%d0%bc%d0%b8-%d0%b2-Git">Псевдоними в Git</a> </li> <li> 2.8 <a href="/book/bg/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-%d0%bd%d0%b0-Git-%d0%9e%d0%b1%d0%be%d0%b1%d1%89%d0%b5%d0%bd%d0%b8%d0%b5">Обобщение</a> </li> </ol> </li> <li class='chapter'> <h2>3. <a href="/book/bg/v2/%d0%9a%d0%bb%d0%be%d0%bd%d0%be%d0%b2%d0%b5-%d0%b2-Git-%d0%9d%d0%b0%d0%ba%d1%80%d0%b0%d1%82%d0%ba%d0%be-%d0%b7%d0%b0-%d1%80%d0%b0%d0%b7%d0%ba%d0%bb%d0%be%d0%bd%d0%b5%d0%bd%d0%b8%d1%8f%d1%82%d0%b0">Клонове в Git</a></h2> <ol> <li> 3.1 <a href="/book/bg/v2/%d0%9a%d0%bb%d0%be%d0%bd%d0%be%d0%b2%d0%b5-%d0%b2-Git-%d0%9d%d0%b0%d0%ba%d1%80%d0%b0%d1%82%d0%ba%d0%be-%d0%b7%d0%b0-%d1%80%d0%b0%d0%b7%d0%ba%d0%bb%d0%be%d0%bd%d0%b5%d0%bd%d0%b8%d1%8f%d1%82%d0%b0">Накратко за разклоненията</a> </li> <li> 3.2 <a href="/book/bg/v2/%d0%9a%d0%bb%d0%be%d0%bd%d0%be%d0%b2%d0%b5-%d0%b2-Git-%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-%d0%bd%d0%b0-%d0%ba%d0%bb%d0%be%d0%bd%d0%be%d0%b2%d0%b5%d1%82%d0%b5-%d0%ba%d0%be%d0%b4-%d0%b8-%d1%81%d0%bb%d0%b8%d0%b2%d0%b0%d0%bd%d0%b5%d1%82%d0%be">Основи на клоновете код и сливането</a> </li> <li> 3.3 <a href="/book/bg/v2/%d0%9a%d0%bb%d0%be%d0%bd%d0%be%d0%b2%d0%b5-%d0%b2-Git-%d0%a3%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bd%d0%b0-%d0%ba%d0%bb%d0%be%d0%bd%d0%be%d0%b2%d0%b5">Управление на клонове</a> </li> <li> 3.4 <a href="/book/bg/v2/%d0%9a%d0%bb%d0%be%d0%bd%d0%be%d0%b2%d0%b5-%d0%b2-Git-%d0%a1%d1%82%d1%80%d0%b0%d1%82%d0%b5%d0%b3%d0%b8%d0%b8-%d0%b7%d0%b0-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d1%81-%d0%ba%d0%bb%d0%be%d0%bd%d0%be%d0%b2%d0%b5-%d0%ba%d0%be%d0%b4">Стратегии за работа с клонове код</a> </li> <li> 3.5 <a href="/book/bg/v2/%d0%9a%d0%bb%d0%be%d0%bd%d0%be%d0%b2%d0%b5-%d0%b2-Git-%d0%9e%d1%82%d0%b4%d0%b0%d0%bb%d0%b5%d1%87%d0%b5%d0%bd%d0%b8-%d0%ba%d0%bb%d0%be%d0%bd%d0%be%d0%b2%d0%b5">Отдалечени клонове</a> </li> <li> 3.6 <a href="/book/bg/v2/%d0%9a%d0%bb%d0%be%d0%bd%d0%be%d0%b2%d0%b5-%d0%b2-Git-%d0%a3%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bd%d0%b0-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82">Управление на проект</a> </li> <li> 3.7 <a href="/book/bg/v2/%d0%9a%d0%bb%d0%be%d0%bd%d0%be%d0%b2%d0%b5-%d0%b2-Git-%d0%9e%d0%b1%d0%be%d0%b1%d1%89%d0%b5%d0%bd%d0%b8%d0%b5">Обобщение</a> </li> </ol> </li> <li class='chapter'> <h2>4. <a href="/book/bg/v2/GitHub-%d0%a1%d1%8a%d0%b7%d0%b4%d0%b0%d0%b2%d0%b0%d0%bd%d0%b5-%d0%b8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%bd%d0%b0-%d0%b0%d0%ba%d0%b0%d1%83%d0%bd%d1%82">GitHub</a></h2> <ol> <li> 4.1 <a href="/book/bg/v2/GitHub-%d0%a1%d1%8a%d0%b7%d0%b4%d0%b0%d0%b2%d0%b0%d0%bd%d0%b5-%d0%b8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%bd%d0%b0-%d0%b0%d0%ba%d0%b0%d1%83%d0%bd%d1%82">Създаване и настройка на акаунт</a> </li> <li> 4.2 <a href="/book/bg/v2/GitHub-%d0%9a%d0%b0%d0%ba-%d0%b4%d0%b0-%d1%81%d1%8a%d1%82%d1%80%d1%83%d0%b4%d0%bd%d0%b8%d1%87%d0%b8%d0%bc-%d0%b2-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82">Как да сътрудничим в проект</a> </li> <li> 4.3 <a href="/book/bg/v2/GitHub-%d0%a3%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bd%d0%b0-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82">Управление на проект</a> </li> <li> 4.4 <a href="/book/bg/v2/GitHub-%d0%a3%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bd%d0%b0-%d0%be%d1%80%d0%b3%d0%b0%d0%bd%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f">Управление на организация</a> </li> <li> 4.5 <a href="/book/bg/v2/GitHub-%d0%90%d0%b2%d1%82%d0%be%d0%bc%d0%b0%d1%82%d0%b8%d0%b7%d0%b8%d1%80%d0%b0%d0%bd%d0%b5-%d1%81-GitHub">Автоматизиране с GitHub</a> </li> <li> 4.6 <a href="/book/bg/v2/GitHub-%d0%9e%d0%b1%d0%be%d0%b1%d1%89%d0%b5%d0%bd%d0%b8%d0%b5">Обобщение</a> </li> </ol> </li> </ol> </div> <div class='column-middle'> <ol class='book-toc'> <li class='chapter'> <h2>5. <a href="/book/bg/v2/Git-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-%d0%98%d0%b7%d0%b1%d0%be%d1%80-%d0%bd%d0%b0-%d0%ba%d1%8a%d0%bc%d0%b8%d1%82%d0%b8">Git инструменти</a></h2> <ol> <li> 5.1 <a href="/book/bg/v2/Git-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-%d0%98%d0%b7%d0%b1%d0%be%d1%80-%d0%bd%d0%b0-%d0%ba%d1%8a%d0%bc%d0%b8%d1%82%d0%b8">Избор на къмити</a> </li> <li> 5.2 <a href="/book/bg/v2/Git-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-%d0%98%d0%bd%d1%82%d0%b5%d1%80%d0%b0%d0%ba%d1%82%d0%b8%d0%b2%d0%bd%d0%be-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d0%b8%d1%80%d0%b0%d0%bd%d0%b5">Интерактивно индексиране</a> </li> <li> 5.3 <a href="/book/bg/v2/Git-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Stashing-%d0%b8-Cleaning">Stashing и Cleaning</a> </li> <li> 5.4 <a href="/book/bg/v2/Git-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-%d0%9f%d0%be%d0%b4%d0%bf%d0%b8%d1%81%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-%d0%b2%d0%b0%d1%88%d0%b0%d1%82%d0%b0-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0">Подписване на вашата работа</a> </li> <li> 5.5 <a href="/book/bg/v2/Git-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-%d0%a2%d1%8a%d1%80%d1%81%d0%b5%d0%bd%d0%b5">Търсене</a> </li> <li> 5.6 <a href="/book/bg/v2/Git-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-%d0%9c%d0%b0%d0%bd%d0%b8%d0%bf%d1%83%d0%bb%d0%b0%d1%86%d0%b8%d1%8f-%d0%bd%d0%b0-%d0%b8%d1%81%d1%82%d0%be%d1%80%d0%b8%d1%8f%d1%82%d0%b0" class="active">Манипулация на историята</a> </li> <li> 5.7 <a href="/book/bg/v2/Git-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-%d0%9c%d0%b8%d1%81%d1%82%d0%b5%d1%80%d0%b8%d1%8f%d1%82%d0%b0-%d0%bd%d0%b0-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b0%d1%82%d0%b0-Reset">Мистерията на командата Reset</a> </li> <li> 5.8 <a href="/book/bg/v2/Git-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-%d0%a1%d0%bb%d0%b8%d0%b2%d0%b0%d0%bd%d0%b5-%d0%b7%d0%b0-%d0%bd%d0%b0%d0%bf%d1%80%d0%b5%d0%b4%d0%bd%d0%b0%d0%bb%d0%b8">Сливане за напреднали</a> </li> <li> 5.9 <a href="/book/bg/v2/Git-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Rerere">Rerere</a> </li> <li> 5.10 <a href="/book/bg/v2/Git-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-%d0%94%d0%b5%d0%b1%d1%8a%d0%b3%d0%b2%d0%b0%d0%bd%d0%b5-%d1%81-Git">Дебъгване с Git</a> </li> <li> 5.11 <a href="/book/bg/v2/Git-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-%d0%9f%d0%be%d0%b4%d0%bc%d0%be%d0%b4%d1%83%d0%bb%d0%b8">Подмодули</a> </li> <li> 5.12 <a href="/book/bg/v2/Git-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-%d0%9f%d0%b0%d0%ba%d0%b5%d1%82%d0%b8-%d0%b2-Git-Bundling">Пакети в Git (Bundling)</a> </li> <li> 5.13 <a href="/book/bg/v2/Git-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-%d0%97%d0%b0%d0%bc%d0%b5%d1%81%d1%82%d0%b2%d0%b0%d0%bd%d0%b5">Заместване</a> </li> <li> 5.14 <a href="/book/bg/v2/Git-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Credential-Storage-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b0">Credential Storage система</a> </li> <li> 5.15 <a href="/book/bg/v2/Git-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-%d0%9e%d0%b1%d0%be%d0%b1%d1%89%d0%b5%d0%bd%d0%b8%d0%b5">Обобщение</a> </li> </ol> </li> <li class='chapter'> <h2>6. <a href="/book/bg/v2/%d0%9d%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-Git-Git-%d0%ba%d0%be%d0%bd%d1%84%d0%b8%d0%b3%d1%83%d1%80%d0%b0%d1%86%d0%b8%d0%b8">Настройване на Git</a></h2> <ol> <li> 6.1 <a href="/book/bg/v2/%d0%9d%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-Git-Git-%d0%ba%d0%be%d0%bd%d1%84%d0%b8%d0%b3%d1%83%d1%80%d0%b0%d1%86%d0%b8%d0%b8">Git конфигурации</a> </li> <li> 6.2 <a href="/book/bg/v2/%d0%9d%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-Git-Git-%d0%b0%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82%d0%b8">Git атрибути</a> </li> <li> 6.3 <a href="/book/bg/v2/%d0%9d%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-Git-Git-Hooks">Git Hooks</a> </li> <li> 6.4 <a href="/book/bg/v2/%d0%9d%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-Git-%d0%9f%d1%80%d0%b8%d0%bc%d0%b5%d1%80%d0%bd%d0%b0-Git-Enforced-%d0%bf%d0%be%d0%bb%d0%b8%d1%82%d0%b8%d0%ba%d0%b0">Примерна Git-Enforced политика</a> </li> <li> 6.5 <a href="/book/bg/v2/%d0%9d%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-Git-%d0%9e%d0%b1%d0%be%d0%b1%d1%89%d0%b5%d0%bd%d0%b8%d0%b5">Обобщение</a> </li> </ol> </li> <li class='chapter'> <h2>7. <a href="/book/bg/v2/Git-%d0%b8-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b8-Git-%d0%ba%d0%b0%d1%82%d0%be-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82">Git и други системи</a></h2> <ol> <li> 7.1 <a href="/book/bg/v2/Git-%d0%b8-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b8-Git-%d0%ba%d0%b0%d1%82%d0%be-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82">Git като клиент</a> </li> <li> 7.2 <a href="/book/bg/v2/Git-%d0%b8-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b8-%d0%9c%d0%b8%d0%b3%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%ba%d1%8a%d0%bc-Git">Миграция към Git</a> </li> <li> 7.3 <a href="/book/bg/v2/Git-%d0%b8-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b8-%d0%9e%d0%b1%d0%be%d0%b1%d1%89%d0%b5%d0%bd%d0%b8%d0%b5">Обобщение</a> </li> </ol> </li> <li class='chapter'> <h2>8. <a href="/book/bg/v2/Git-%d0%bd%d0%b0-%d0%bd%d0%b8%d1%81%d0%ba%d0%be-%d0%bd%d0%b8%d0%b2%d0%be-Plumbing-%d0%b8-Porcelain-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8">Git на ниско ниво</a></h2> <ol> <li> 8.1 <a href="/book/bg/v2/Git-%d0%bd%d0%b0-%d0%bd%d0%b8%d1%81%d0%ba%d0%be-%d0%bd%d0%b8%d0%b2%d0%be-Plumbing-%d0%b8-Porcelain-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8">Plumbing и Porcelain команди</a> </li> <li> 8.2 <a href="/book/bg/v2/Git-%d0%bd%d0%b0-%d0%bd%d0%b8%d1%81%d0%ba%d0%be-%d0%bd%d0%b8%d0%b2%d0%be-Git-%d0%be%d0%b1%d0%b5%d0%ba%d1%82%d0%b8">Git обекти</a> </li> <li> 8.3 <a href="/book/bg/v2/Git-%d0%bd%d0%b0-%d0%bd%d0%b8%d1%81%d0%ba%d0%be-%d0%bd%d0%b8%d0%b2%d0%be-Git-%d1%80%d0%b5%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d0%b8">Git референции</a> </li> <li> 8.4 <a href="/book/bg/v2/Git-%d0%bd%d0%b0-%d0%bd%d0%b8%d1%81%d0%ba%d0%be-%d0%bd%d0%b8%d0%b2%d0%be-Packfiles">Packfiles</a> </li> <li> 8.5 <a href="/book/bg/v2/Git-%d0%bd%d0%b0-%d0%bd%d0%b8%d1%81%d0%ba%d0%be-%d0%bd%d0%b8%d0%b2%d0%be-Refspec-%d1%81%d0%bf%d0%b5%d1%86%d0%b8%d1%84%d0%b8%d0%ba%d0%b0%d1%86%d0%b8%d0%b8">Refspec спецификации</a> </li> <li> 8.6 <a href="/book/bg/v2/Git-%d0%bd%d0%b0-%d0%bd%d0%b8%d1%81%d0%ba%d0%be-%d0%bd%d0%b8%d0%b2%d0%be-%d0%a2%d1%80%d0%b0%d0%bd%d1%81%d0%bf%d0%be%d1%80%d1%82%d0%bd%d0%b8-%d0%bf%d1%80%d0%be%d1%82%d0%be%d0%ba%d0%be%d0%bb%d0%b8">Транспортни протоколи</a> </li> <li> 8.7 <a href="/book/bg/v2/Git-%d0%bd%d0%b0-%d0%bd%d0%b8%d1%81%d0%ba%d0%be-%d0%bd%d0%b8%d0%b2%d0%be-%d0%9f%d0%be%d0%b4%d0%b4%d1%80%d1%8a%d0%b6%d0%ba%d0%b0-%d0%b8-%d0%b2%d1%8a%d0%b7%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d1%8f%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-%d0%b4%d0%b0%d0%bd%d0%bd%d0%b8">Поддръжка и възстановяване на данни</a> </li> <li> 8.8 <a href="/book/bg/v2/Git-%d0%bd%d0%b0-%d0%bd%d0%b8%d1%81%d0%ba%d0%be-%d0%bd%d0%b8%d0%b2%d0%be-Environment-%d0%bf%d1%80%d0%be%d0%bc%d0%b5%d0%bd%d0%bb%d0%b8%d0%b2%d0%b8">Environment променливи</a> </li> <li> 8.9 <a href="/book/bg/v2/Git-%d0%bd%d0%b0-%d0%bd%d0%b8%d1%81%d0%ba%d0%be-%d0%bd%d0%b8%d0%b2%d0%be-%d0%9e%d0%b1%d0%be%d0%b1%d1%89%d0%b5%d0%bd%d0%b8%d0%b5">Обобщение</a> </li> </ol> </li> <li class='chapter'> <h2>9. <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-A:-Git-%d0%b2-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d1%81%d1%80%d0%b5%d0%b4%d0%b8-%d0%93%d1%80%d0%b0%d1%84%d0%b8%d1%87%d0%bd%d0%b8-%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d1%84%d0%b5%d0%b9%d1%81%d0%b8">Приложение A: Git в други среди</a></h2> <ol> <li> 9.1 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-A:-Git-%d0%b2-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d1%81%d1%80%d0%b5%d0%b4%d0%b8-%d0%93%d1%80%d0%b0%d1%84%d0%b8%d1%87%d0%bd%d0%b8-%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d1%84%d0%b5%d0%b9%d1%81%d0%b8">Графични интерфейси</a> </li> <li> 9.2 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-A:-Git-%d0%b2-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d1%81%d1%80%d0%b5%d0%b4%d0%b8-Git-%d0%b2%d1%8a%d0%b2-Visual-Studio">Git във Visual Studio</a> </li> <li> 9.3 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-A:-Git-%d0%b2-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d1%81%d1%80%d0%b5%d0%b4%d0%b8-Git-%d0%b2%d1%8a%d0%b2-Visual-Studio-Code">Git във Visual Studio Code</a> </li> <li> 9.4 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-A:-Git-%d0%b2-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d1%81%d1%80%d0%b5%d0%b4%d0%b8-Git-in-IntelliJ-/-PyCharm-/-WebStorm-/-PhpStorm-/-RubyMine">Git in IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine</a> </li> <li> 9.5 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-A:-Git-%d0%b2-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d1%81%d1%80%d0%b5%d0%b4%d0%b8-Git-%d0%b2-Sublime-Text">Git в Sublime Text</a> </li> <li> 9.6 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-A:-Git-%d0%b2-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d1%81%d1%80%d0%b5%d0%b4%d0%b8-Git-%d0%b2-Bash">Git в Bash</a> </li> <li> 9.7 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-A:-Git-%d0%b2-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d1%81%d1%80%d0%b5%d0%b4%d0%b8-Git-%d0%b2-Zsh">Git в Zsh</a> </li> <li> 9.8 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-A:-Git-%d0%b2-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d1%81%d1%80%d0%b5%d0%b4%d0%b8-Git-%d0%b2-PowerShell">Git в PowerShell</a> </li> <li> 9.9 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-A:-Git-%d0%b2-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d1%81%d1%80%d0%b5%d0%b4%d0%b8-%d0%9e%d0%b1%d0%be%d0%b1%d1%89%d0%b5%d0%bd%d0%b8%d0%b5">Обобщение</a> </li> </ol> </li> </ol> </div> <div class='column-right'> <ol class='book-toc'> <li class='chapter'> <h2>10. <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-B:-%d0%92%d0%b3%d1%80%d0%b0%d0%b6%d0%b4%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-Git-%d0%b2-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-Git-%d0%be%d1%82-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b5%d0%bd-%d1%80%d0%b5%d0%b4">Приложение B: Вграждане на Git в приложения</a></h2> <ol> <li> 10.1 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-B:-%d0%92%d0%b3%d1%80%d0%b0%d0%b6%d0%b4%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-Git-%d0%b2-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-Git-%d0%be%d1%82-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b5%d0%bd-%d1%80%d0%b5%d0%b4">Git от команден ред</a> </li> <li> 10.2 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-B:-%d0%92%d0%b3%d1%80%d0%b0%d0%b6%d0%b4%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-Git-%d0%b2-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-Libgit2">Libgit2</a> </li> <li> 10.3 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-B:-%d0%92%d0%b3%d1%80%d0%b0%d0%b6%d0%b4%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-Git-%d0%b2-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-JGit">JGit</a> </li> <li> 10.4 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-B:-%d0%92%d0%b3%d1%80%d0%b0%d0%b6%d0%b4%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-Git-%d0%b2-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-go-git">go-git</a> </li> <li> 10.5 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-B:-%d0%92%d0%b3%d1%80%d0%b0%d0%b6%d0%b4%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-Git-%d0%b2-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-Dulwich">Dulwich</a> </li> </ol> </li> <li class='chapter'> <h2>A1. <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-%d0%9d%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b8-%d0%b8-%d0%ba%d0%be%d0%bd%d1%84%d0%b8%d0%b3%d1%83%d1%80%d0%b0%d1%86%d0%b8%d1%8f">Приложение C: Git команди</a></h2> <ol> <li> A1.1 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-%d0%9d%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b8-%d0%b8-%d0%ba%d0%be%d0%bd%d1%84%d0%b8%d0%b3%d1%83%d1%80%d0%b0%d1%86%d0%b8%d1%8f">Настройки и конфигурация</a> </li> <li> A1.2 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-%d0%98%d0%b7%d0%b4%d1%8a%d1%80%d0%bf%d0%b2%d0%b0%d0%bd%d0%b5-%d0%b8-%d1%81%d1%8a%d0%b7%d0%b4%d0%b0%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82%d0%b8">Издърпване и създаване на проекти</a> </li> <li> A1.3 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Snapshotting">Snapshotting</a> </li> <li> A1.4 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-%d0%9a%d0%bb%d0%be%d0%bd%d0%be%d0%b2%d0%b5-%d0%b8-%d1%81%d0%bb%d0%b8%d0%b2%d0%b0%d0%bd%d0%b5">Клонове и сливане</a> </li> <li> A1.5 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-%d0%a1%d0%bf%d0%be%d0%b4%d0%b5%d0%bb%d1%8f%d0%bd%d0%b5-%d0%b8-%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d1%8f%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82%d0%b8">Споделяне и обновяване на проекти</a> </li> <li> A1.6 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-%d0%98%d0%bd%d1%81%d0%bf%d0%b5%d0%ba%d1%86%d0%b8%d1%8f-%d0%b8-%d1%81%d1%80%d0%b0%d0%b2%d0%bd%d0%b5%d0%bd%d0%b8%d0%b5">Инспекция и сравнение</a> </li> <li> A1.7 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-%d0%94%d0%b5%d0%b1%d1%8a%d0%b3%d0%b2%d0%b0%d0%bd%d0%b5">Дебъгване</a> </li> <li> A1.8 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Patching">Patching</a> </li> <li> A1.9 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Email-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8">Email команди</a> </li> <li> A1.10 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-%d0%92%d1%8a%d0%bd%d1%88%d0%bd%d0%b8-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b8">Външни системи</a> </li> <li> A1.11 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-%d0%90%d0%b4%d0%bc%d0%b8%d0%bd%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%82%d0%b8%d0%b2%d0%bd%d0%b8-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8">Административни команди</a> </li> <li> A1.12 <a href="/book/bg/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Plumbing-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8">Plumbing команди</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>5.6 Git инструменти - Манипулация на историята</h1> <div> <h2 id="_rewriting_history">Манипулация на историята</h2> <div class="paragraph"> <p>Често в работата си с Git може да поискате да ревизирате историята на локалните къмити. Една от чудесните страни на Git е, че ви позволява да вземате решения в последния възможен момент. Вие решавате кои файлове в кои къмити да отидат непосредствено преди къмитване с индексната област, вие може да решите, че в момента отлагате работата по даде проблем с <code>git stash</code> и също така, можете да презапишете предишни къмити така че да изглеждат сякаш са се случили по различен начин. Това може да включва смяна на реда на къмитите, смяна на съобщенията или модифициране на файлове в къмит, комбиниране на няколко в един или разделяне на къмит на части или пък изтриване на къмит — всичко това преди да споделите работата си с колегите.</p> </div> <div class="paragraph"> <p>В тази част от книгата ще видим как се осъществяват такива задачи, така че да накарате историята на работата ви да изглежда по начина, по който вие искате преди да я споделите с другите.</p> </div> <div class="admonitionblock note"> <table> <tr> <td class="icon"> <div class="title">Забележка</div> </td> <td class="content"> <div class="title">Не публикувайте работата си преди да сте я довършили докрай</div> <div class="paragraph"> <p>Едно от кардиналните правила на Git е това, че понеже вършите повечето работа локално във вашето копие на хранилището, вие разполагате с почти неограничена свобода да преправяте <em>локалната</em> си история. Обаче, след като веднъж сте публикували работата си, нещата значително се променят и е редно да гледате на нея като на финална версия, освен ако нямате наистина добра причина да промените това. Накратко, би следвало да избягвате да публикувате работата си до момента в който решите, че тя е достатъчно добра за да бъде споделена с другите.</p> </div> </td> </tr> </table> </div> <div class="sect3"> <h3 id="_git_amend">Промяна на последния къмит</h3> <div class="paragraph"> <p>Промяната на най-последния къмит вероятно е най-често срещания вид манипулация на историята. Две неща ще искате да правите най-често: просто да редактирате къмит съобщението или да промените съдържанието на къмита добавяйки, изтривайки или променяйки файлове.</p> </div> <div class="paragraph"> <p>Ако става дума само за съобщението на последния къмит, това е лесно:</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>Командата зарежда съобщението на къмита в текстовия редактор, където можете да го редактирате, да запишете промените и да излезете. Когато затворите редактора, той записва нов къмит с редактираното съобщение и го прави последен къмит.</p> </div> <div class="paragraph"> <p>Ако, от друга страна, искате да промените нещо по действителното <em>съдържание</em> на къмита, процесът в общи линии работи по същия начин — първо направете желаните промени, индексирайте ги и след това <code>git commit --amend</code> командата ще <em>замени</em> последния записан къмит с вашите нови, коригирани данни.</p> </div> <div class="paragraph"> <p>Трябва да внимавате с тази техника, понеже тя променя SHA-1 хеша на къмита. Това е като много малко пребазиране — не променяйте последния къмит, ако вече сте го публикували!</p> </div> <div class="admonitionblock tip"> <table> <tr> <td class="icon"> <div class="title">Подсказка</div> </td> <td class="content"> <div class="title">Редактиран къмит може да се нуждае, но може и да не се нуждае от amended къмит съобщение</div> <div class="paragraph"> <p>Когато редактирате къмит, имате възможност да смените както съобщението, така и съдържанието на данните в къмита. Ако променяте данните по същество, почти винаги е добре да обновите и съобщението, така че да отразява корекциите.</p> </div> <div class="paragraph"> <p>От друга страна, ако промените са тривиални (например поправка на правописна грешка или добавяне на файл, който сте забравили да индексирате) и оригиналното съобщение си е съвсем на място, можете просто да направите промените и да прескочите стъпката с редактора изцяло:</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">Смяна на повече къмит съобщения</h3> <div class="paragraph"> <p>За да промените къмит, който е назад в историята, ще ви трябват по-сложни инструменти. Git не разполага с инструмент за модифициране на историята, но можете да използвате rebase за да пребазирате серия от къмити върху HEAD-а, на който са били първоначално базирани, вместо да ги премествате към друг. С интерактивния инструмент за пребазиране след това можете да спирате на всеки къмит, който искате и да редактирате съобщението му, да добавяте файлове и т.н. Можете да стартирате rebase в интерактивен режим с флага <code>-i</code> на командата <code>git rebase</code>. Трябва да посочите колко назад искате да презаписвате къмити указвайки на командата върху кой къмит да пребазира.</p> </div> <div class="paragraph"> <p>Например, ако искате да промените последните три къмит съобщения или кое да е съобщение в тази група, вие подавате като аргумент на <code>git rebase -i</code> родителя на последния къмит, който искате да редактирате, което е <code>HEAD~2^</code> или <code>HEAD~3</code>. Може да е по-лесно да използвате <code>~3</code>, понеже опитвате да редактирате последните три къмита, но имайте предвид, че всъщност посочвате четири къмита назад, родителя на последния къмит, който искате да промените:</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>Подчертаваме отново, че това е пребазираща команда — всеки къмит в обхвата <code>HEAD~3..HEAD</code> с променено съобщение <em>и всички негови наследници</em> ще бъдат презаписани. Не включвайте никакъв къмит, който вече сте изпратили на централния сървър — правейки това ще смутите другите разработчици, защото осигурявате алтернативна версия на една и съща промяна.</p> </div> <div class="paragraph"> <p>Изпълнявайки командата, получавате списък къмити в текстовия си редакто, подобно на това:</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 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>Важно е да кажем, че къмитите се изброяват в обратен ред на този, в който се виждат с <code>log</code> командата. Ако изпълните <code>log</code>, виждате нещо такова:</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>Забележете обърнатия ред. Интерактивното пребазиране ви дава скрипта, който ще изпълни. То ще започне от къмита, който указвате на командния ред (<code>HEAD~3</code>) и ще извърши промените въведени във всеки от тези къмити отгоре надолу. Най-старият се показва най-отгоре, защото той е първият, който ще бъде приложен.</p> </div> <div class="paragraph"> <p>Трябва да редактирате скрипта така, че да спре на къмита, който желаете да редактирате. За да направите това, променете думата “pick” на “edit” за всеки от къмитите, след които искате скрипта да спре. Например, за да промените само третото къмит съобщение, променяте файла да изглежда така:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">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>Когато запишете и излезете от редактора, Git ви превърта обратно до последния къмит в този списък и ви връща в командния ред със следното съобщение:</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>Инструкциите посочват точно какво да направите. Напишете:</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>Променете съобщението на къмита и затворете редактора. След това изпълнете:</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>Тази команда ще приложи останалите два къмита автоматично и след това сте готови. Ако смените думата pick с edit на повече редове, можете да повторите тези стъпки за всеки съответен къмит. Всеки път Git ще спира, ще ви позволи да промените къмита и ще продължи, когато сте готови.</p> </div> </div> <div class="sect3"> <h3 id="_пренареждане_на_къмити">Пренареждане на къмити</h3> <div class="paragraph"> <p>Можете да използвате интерактивното пребазиране за да размествате или изцяло да премахвате къмити. Ако искате да премахнете къмита “added cat-file” и да смените реда, в който останалите два се прилагат, може да смените rebase скрипта от това:</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 pick 310154e Update README formatting and add blame pick a5f4a0d Add cat-file</code></pre> </div> </div> <div class="paragraph"> <p>към това:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">pick 310154e Update README formatting and add blame pick f7f3f6d Change my name a bit</code></pre> </div> </div> <div class="paragraph"> <p>Когато запишете и затворите редактора, Git превърта клона назад до родителя на тези къмити, прилага <code>310154e</code> следван от <code>f7f3f6d</code> и спира. Сега редът на двата останали къмита е сменен, а “added cat-file” е изцяло премахнат.</p> </div> </div> <div class="sect3"> <h3 id="_squashing">Обединяване на къмити</h3> <div class="paragraph"> <p>Възможно е също така да вземете няколко къмита и да ги обедините в един единичен. Процесът е известен като Squashing и също може да се направи с инструмента за интерактивно пребазиране. Скриптът ви дава напътствия в rebase съобщението:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console"># # 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>В този случай, ако вместо “pick” или “edit”, укажете “squash”, Git прилага текущата промяната и промяната непосредствено преди нея и ви позволява да слеете къмит съобщенията заедно. Така че, ако искате да направите единичен къмит от горните три, може да редактирате скрипта си така:</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 squash 310154e Update README formatting and add blame squash a5f4a0d Add cat-file</code></pre> </div> </div> <div class="paragraph"> <p>Когато затворите редактора, Git прилага всичките три промени и пуска редактора още веднъж, за сливане на трите съобщения:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console"># 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>Записвайки това, вие получавате единичен къмит, който съдържа промените от всичките три предишни.</p> </div> </div> <div class="sect3"> <h3 id="_разделяне_на_къмит">Разделяне на къмит</h3> <div class="paragraph"> <p>Разделянето ще отмени даден къмит и след това частично ще индексира и къмитне толкова пъти, колкото укажете. Например, решавате да разделите втория от трите къмита по-горе. Вместо “Update README formatting and add blame”, искате да го разделите в два къмита със съобщения “Updated README formatting” за първия и “Add blame” за втория. Можете да го постигнете с <code>rebase -i</code> скрипта променяйки инструкцията на втория къмит на “edit”:</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>След това, когато скриптът ви върне в командния ред, вие reset-вате къмита, вземате промените, които са били отменени и създавате няколко къмита от тях. Когато запишете и затворите редактора, Git превърта назад до родителя на първия къмит в списъка, прилага първия къмит (<code>f7f3f6d</code>), прилага втория (<code>310154e</code>) и ви връща в конзолата. Там можете да направите mixed reset на този къмит с командата <code>git reset HEAD^</code>, което на практика отменя къмита и оставя модифицираните файлове извън индекса. Сега можете да индексирате и къмитвате файлове докато получите колкото желаете къмита и след това да изпълните <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 ще приложи и последния къмит от скрипта (<code>a5f4a0d</code>) и сега историята ви изглежда така:</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>Този процес променя SHA-1 стойностите за последните 3 най-нови къмита в списъка, така че се убедете, че никой от тях не е бил публикуван в споделено хранилище. Отбележете също така, че последният къмит в списъка (<code>f7f3f6d</code>) е непроменен. Въпреки, че е показан в скрипта, Git го оставя непроменен, понеже той е маркиран като “pick” и е приложен преди всички rebase промени.</p> </div> </div> <div class="sect3"> <h3 id="_изтриване_на_къмит">Изтриване на къмит</h3> <div class="paragraph"> <p>Ако искате да изтриете къмит, можете да го направите със скрипта <code>rebase -i</code>. В списъка с къмити, поставете думата “drop” пред този, който искате да изтриете (или просто изтрийте реда от rebase скрипта):</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>Поради начина, по който Git построява къмит обектите, изтриването или промяната на къмит предизвиква презапис на всички следващи след него. Колкото по-назад в историята се връщате, толкова повече къмити ще трябва да се създадат наново. Това може да предизвика купища merge конфликти, ако по-късно в историята има много къмити, зависещи от изтрития.</p> </div> <div class="paragraph"> <p>Ако в един момент в rebase процеса установите, че той не е бил добра идея, можете винаги да спрете. Изпълнете <code>git rebase --abort</code> и хранилището ще се върне в статуса, в което е било преди да стартирате пребазирането.</p> </div> <div class="paragraph"> <p>Ако в края на пребазирането решите, че резултатът не е какъвто очаквате, можете да използвате <code>git reflog</code> за да възстановите по-ранна версия на клона. Вижте <a href="/book/bg/v2/ch00/_data_recovery">Възстановяване на данни</a> за повече информация за командата <code>reflog</code>.</p> </div> <div class="admonitionblock note"> <table> <tr> <td class="icon"> <div class="title">Забележка</div> </td> <td class="content"> <div class="paragraph"> <p>Drew DeVault е създал практическо hands-on упътване с упражнения за използването на <code>git rebase</code>. Достъпно е на адрес: <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="_мощната_алтернатива_filter_branch">Мощната алтернатива: filter-branch</h3> <div class="paragraph"> <p>Съществува и друга опция за презапис на историята, която се използва за модифициране на голям брой къмити в в скриптов маниер — например ако искате да си смените имейл адреса глобално или да премахнете файл от всеки къмит. Командата е <code>filter-branch</code> и може да променя огромни порции от вашата история, така че вероятно не би следвало да я ползвате — освен ако проектът ви все още не е публично достъпен или пък никой ваш колега не е базирал работата си на някой от вашите къмити, които ще бъдат пренаписани. Обаче, командата може да бъде много полезна. Ще покажем няколко от най-честите ѝ приложения, така че да получите идея какво може да прави.</p> </div> <div class="admonitionblock caution"> <table> <tr> <td class="icon"> <div class="title">Внимание</div> </td> <td class="content"> <div class="paragraph"> <p><code>git filter-branch</code> има много недостатъци и вече не се препоръчва като начин за презапис на историята. Вместо това, използвайте <code>git-filter-repo</code>, която е скрипт на Python и върши по-добра работа в ситуациите, в които нормално бихте използвали <code>filter-branch</code>. Документацията и сорс кода ѝ могат да се намерят на <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">Изтриване на файл от всеки къмит</h4> <div class="paragraph"> <p>Това се налага доста често. Някой по невнимание къмитва голям двоичен файл с <code>git add .</code> и се налага да го махнете навсякъде. Или пък, без да искате сте къмитнали файл, съдържащ парола, а проектът трябва да стане с отворен код. В такива случаи <code>filter-branch</code> е инструментът, който вероятно ще искате да използвате, за да ремонтирате историята из основи. За да премахнете файла <code>passwords.txt</code> от цялата история използвайте параметъра <code>--tree-filter</code> на <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>Опцията <code>--tree-filter</code> изпълнява указаната команда след всяко извличане на съдържанието на проекта и след това къмитва резултатите обратно. В този случай, вие изтривате файла <code>passwords.txt</code> от всеки един snapshot без значение дали присъства или не. Ако искате да премахнете всички случайно къмитнати backup файлове от вашия редактор, може да изпълните нещо като <code>git filter-branch --tree-filter 'rm -f *~' HEAD</code>.</p> </div> <div class="paragraph"> <p>Ще видите как Git пренаписва дърветата и къмитите и след това премества указателя на клона в края. Добра идея е да направите това пробно в тестов клон и ако резултатите ви устройват, да го приложите и в master клона като му направите hard-reset. Можете да пуснете <code>filter-branch</code> и върху всички клонове с опцията <code>--all</code> към командата.</p> </div> </div> <div class="sect4"> <h4 id="_превръщане_на_под_директория_в_root_директория">Превръщане на под-директория в Root директория</h4> <div class="paragraph"> <p>Да допуснем, че сте импортирали проект от друга source control система и имате под-директории, които са излишни (<code>trunk</code>, <code>tags</code> и т.н.). Ако искате да направите директорията <code>trunk</code> корен за проекта ви за всеки къмит, също може да използвате <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 --subdirectory-filter trunk HEAD Rewrite 856f0bf61e41a27326cdae8f09fe708d679f596f (12/12) Ref 'refs/heads/master' was rewritten</code></pre> </div> </div> <div class="paragraph"> <p>Сега <code>trunk</code> е новата основна директория. Git автоматично ще премахне къмитите, които не касаят тази директория.</p> </div> </div> <div class="sect4"> <h4 id="_смяна_на_имейл_адрес_глобално">Смяна на имейл адрес глобално</h4> <div class="paragraph"> <p>Друга възможна ситуация е да сте забравили да пуснете <code>git config</code> за да настроите вашето име и имейл адрес преди да започнете същинската работа. Или пък, решавате даден проект от вашата компания да стане с отворен код и искате да смените служебните имейл адреси с персоналния ви такъв. Инструментът <code>filter-branch</code> може да помогне в автоматичната смяна на информацията в множество къмити. Трябва да внимавате и да смените само вашите адреси, така че използвайте <code>--commit-filter</code>:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ 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>Тази сложничка за изписване команда ще препише всеки къмит с новия адрес, който посочите. Понеже къмитите съдържат SHA-1 данни на своите родители, това също означава, че командата ще смени хешовете на всички къмити в историята, включително и на тези, които не съдържат вашия имейл.</p> </div> </div> </div> <div id="nav"><a href="/book/bg/v2/Git-инструменти-Търсене">prev</a> | <a href="/book/bg/v2/Git-инструменти-Мистерията-на-командата-Reset">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