CINXE.COM
Git - Git によるデバッグ
<!DOCTYPE html> <html lang="ja"> <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 - 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/v2/Git-Tools-Debugging-with-Git">English</a>. </p> <p> Full translation available in <table> <tr><td><a href="/book/az/v2/Git-Al%c9%99tl%c9%99ri-Git-il%c9%99-Debugging">azərbaycan dili</a>,</td></tr> <tr><td><a href="/book/bg">български език</a>,</td></tr> <tr><td><a href="/book/de/v2/Git-Tools-Debuggen-mit-Git">Deutsch</a>,</td></tr> <tr><td><a href="/book/es/v2/Herramientas-de-Git-Haciendo-debug-con-Git">Español</a>,</td></tr> <tr><td><a href="/book/fr/v2/Utilitaires-Git-D%c3%a9boguer-avec-Git">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-Git-%e3%81%ab%e3%82%88%e3%82%8b%e3%83%87%e3%83%90%e3%83%83%e3%82%b0">日本語</a>,</td></tr> <tr><td><a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-Git%ec%9c%bc%eb%a1%9c-%eb%b2%84%ea%b7%b8-%ec%b0%be%ea%b8%b0">한국어</a>,</td></tr> <tr><td><a href="/book/nl/v2/Git-Tools-Debuggen-met-Git">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%9e%d0%b1%d0%bd%d0%b0%d1%80%d1%83%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%be%d1%88%d0%b8%d0%b1%d0%be%d0%ba-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-Git">Русский</a>,</td></tr> <tr><td><a href="/book/sl/v2/Orodja-Git-Razhro%c5%a1%c4%8devanje-z-Gitom">Slovenščina</a>,</td></tr> <tr><td><a href="/book/tl/v2/Mga-Git-na-Kasangkapan-Pagdebug-gamit-ang-Git">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%97%d0%bd%d0%b5%d0%b2%d0%b0%d0%b4%d0%b6%d0%b5%d0%bd%d0%bd%d1%8f-%d0%b7-Git">Українська</a></td></tr> <tr><td><a href="/book/zh/v2/Git-%e5%b7%a5%e5%85%b7-%e4%bd%bf%e7%94%a8-Git-%e8%b0%83%e8%af%95">简体中文</a>,</td></tr> </table> </p> <p> Partial translations available in <table> <tr><td><a href="/book/cs/v2/Git-Tools-Lad%c4%9bn%c3%ad-v-syst%c3%a9mu-Git">Č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-%d0%94%d0%b5%d0%b1%d0%b0%d0%b3%d0%b8%d1%80%d0%b0%d1%9a%d0%b5-%d1%81%d0%be-Git">Македонски</a>,</td></tr> <tr><td><a href="/book/pl/v2/Narz%c4%99dzia-Gita-Debugowanie-z-Gitem">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%9e%d1%82%d0%ba%d0%bb%d0%b0%d1%9a%d0%b0%d1%9a%d0%b5-%d0%b3%d1%80%d0%b5%d1%88%d0%b0%d0%ba%d0%b0-%d1%81%d0%b0-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%be%d0%bc-Git">Српски</a>,</td></tr> <tr><td><a href="/book/uz/v2/Git-Tools-Debugging-with-Git">Ўзбекча</a>,</td></tr> <tr><td><a href="/book/zh-tw/v2/Git-%e5%b7%a5%e5%85%b7-Debugging-with-Git">繁體中文</a>,</td></tr> </table> </p> <p> Translations started for <table> <tr><td><a href="/book/be/v2/Git-Tools-Debugging-with-Git">Беларуская</a>,</td></tr> <tr><td><a href="/book/fa/v2/Git-Tools-Debugging-with-Git" dir="rtl">فارسی</a>,</td></tr> <tr><td><a href="/book/id/v2/Git-Tools-Debugging-with-Git">Indonesian</a>,</td></tr> <tr><td><a href="/book/it/v2/Git-Tools-Debugging-with-Git">Italiano</a>,</td></tr> <tr><td><a href="/book/ms/v2/Git-Tools-Debugging-with-Git">Bahasa Melayu</a>,</td></tr> <tr><td><a href="/book/pt-br/v2/Git-Tools-Debugging-with-Git">Português (Brasil)</a>,</td></tr> <tr><td><a href="/book/pt-pt/v2/Ferramentas-do-Git-Debugging-with-Git">Português (Portugal)</a>,</td></tr> <tr><td><a href="/book/sv/v2/Git-Tools-Debugging-with-Git">Svenska</a>,</td></tr> <tr><td><a href="/book/tr/v2/Git-Ara%c3%a7lar%c4%b1-Git%e2%80%99le-Hata-Ay%c4%b1klama">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-ja">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/ja/v2/%e4%bd%bf%e3%81%84%e5%a7%8b%e3%82%81%e3%82%8b-%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e7%ae%a1%e7%90%86%e3%81%ab%e9%96%a2%e3%81%97%e3%81%a6">使い始める</a></h2> <ol> <li> 1.1 <a href="/book/ja/v2/%e4%bd%bf%e3%81%84%e5%a7%8b%e3%82%81%e3%82%8b-%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e7%ae%a1%e7%90%86%e3%81%ab%e9%96%a2%e3%81%97%e3%81%a6">バージョン管理に関して</a> </li> <li> 1.2 <a href="/book/ja/v2/%e4%bd%bf%e3%81%84%e5%a7%8b%e3%82%81%e3%82%8b-Git%e7%95%a5%e5%8f%b2">Git略史</a> </li> <li> 1.3 <a href="/book/ja/v2/%e4%bd%bf%e3%81%84%e5%a7%8b%e3%82%81%e3%82%8b-Git%e3%81%ae%e5%9f%ba%e6%9c%ac">Gitの基本</a> </li> <li> 1.4 <a href="/book/ja/v2/%e4%bd%bf%e3%81%84%e5%a7%8b%e3%82%81%e3%82%8b-%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%83%a9%e3%82%a4%e3%83%b3">コマンドライン</a> </li> <li> 1.5 <a href="/book/ja/v2/%e4%bd%bf%e3%81%84%e5%a7%8b%e3%82%81%e3%82%8b-Git%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab">Gitのインストール</a> </li> <li> 1.6 <a href="/book/ja/v2/%e4%bd%bf%e3%81%84%e5%a7%8b%e3%82%81%e3%82%8b-%e6%9c%80%e5%88%9d%e3%81%aeGit%e3%81%ae%e6%a7%8b%e6%88%90">最初のGitの構成</a> </li> <li> 1.7 <a href="/book/ja/v2/%e4%bd%bf%e3%81%84%e5%a7%8b%e3%82%81%e3%82%8b-%e3%83%98%e3%83%ab%e3%83%97%e3%82%92%e8%a6%8b%e3%82%8b">ヘルプを見る</a> </li> <li> 1.8 <a href="/book/ja/v2/%e4%bd%bf%e3%81%84%e5%a7%8b%e3%82%81%e3%82%8b-%e3%81%be%e3%81%a8%e3%82%81">まとめ</a> </li> </ol> </li> <li class='chapter'> <h2>2. <a href="/book/ja/v2/Git-%e3%81%ae%e5%9f%ba%e6%9c%ac-Git-%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%81%ae%e5%8f%96%e5%be%97">Git の基本</a></h2> <ol> <li> 2.1 <a href="/book/ja/v2/Git-%e3%81%ae%e5%9f%ba%e6%9c%ac-Git-%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%81%ae%e5%8f%96%e5%be%97">Git リポジトリの取得</a> </li> <li> 2.2 <a href="/book/ja/v2/Git-%e3%81%ae%e5%9f%ba%e6%9c%ac-%e5%a4%89%e6%9b%b4%e5%86%85%e5%ae%b9%e3%81%ae%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%81%b8%e3%81%ae%e8%a8%98%e9%8c%b2">変更内容のリポジトリへの記録</a> </li> <li> 2.3 <a href="/book/ja/v2/Git-%e3%81%ae%e5%9f%ba%e6%9c%ac-%e3%82%b3%e3%83%9f%e3%83%83%e3%83%88%e5%b1%a5%e6%ad%b4%e3%81%ae%e9%96%b2%e8%a6%a7">コミット履歴の閲覧</a> </li> <li> 2.4 <a href="/book/ja/v2/Git-%e3%81%ae%e5%9f%ba%e6%9c%ac-%e4%bd%9c%e6%a5%ad%e3%81%ae%e3%82%84%e3%82%8a%e7%9b%b4%e3%81%97">作業のやり直し</a> </li> <li> 2.5 <a href="/book/ja/v2/Git-%e3%81%ae%e5%9f%ba%e6%9c%ac-%e3%83%aa%e3%83%a2%e3%83%bc%e3%83%88%e3%81%a7%e3%81%ae%e4%bd%9c%e6%a5%ad">リモートでの作業</a> </li> <li> 2.6 <a href="/book/ja/v2/Git-%e3%81%ae%e5%9f%ba%e6%9c%ac-%e3%82%bf%e3%82%b0">タグ</a> </li> <li> 2.7 <a href="/book/ja/v2/Git-%e3%81%ae%e5%9f%ba%e6%9c%ac-Git-%e3%82%a8%e3%82%a4%e3%83%aa%e3%82%a2%e3%82%b9">Git エイリアス</a> </li> <li> 2.8 <a href="/book/ja/v2/Git-%e3%81%ae%e5%9f%ba%e6%9c%ac-%e3%81%be%e3%81%a8%e3%82%81">まとめ</a> </li> </ol> </li> <li class='chapter'> <h2>3. <a href="/book/ja/v2/Git-%e3%81%ae%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81%e6%a9%9f%e8%83%bd-%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81%e3%81%a8%e3%81%af">Git のブランチ機能</a></h2> <ol> <li> 3.1 <a href="/book/ja/v2/Git-%e3%81%ae%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81%e6%a9%9f%e8%83%bd-%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81%e3%81%a8%e3%81%af">ブランチとは</a> </li> <li> 3.2 <a href="/book/ja/v2/Git-%e3%81%ae%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81%e6%a9%9f%e8%83%bd-%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81%e3%81%a8%e3%83%9e%e3%83%bc%e3%82%b8%e3%81%ae%e5%9f%ba%e6%9c%ac">ブランチとマージの基本</a> </li> <li> 3.3 <a href="/book/ja/v2/Git-%e3%81%ae%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81%e6%a9%9f%e8%83%bd-%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81%e3%81%ae%e7%ae%a1%e7%90%86">ブランチの管理</a> </li> <li> 3.4 <a href="/book/ja/v2/Git-%e3%81%ae%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81%e6%a9%9f%e8%83%bd-%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81%e3%81%a7%e3%81%ae%e4%bd%9c%e6%a5%ad%e3%81%ae%e6%b5%81%e3%82%8c">ブランチでの作業の流れ</a> </li> <li> 3.5 <a href="/book/ja/v2/Git-%e3%81%ae%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81%e6%a9%9f%e8%83%bd-%e3%83%aa%e3%83%a2%e3%83%bc%e3%83%88%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81">リモートブランチ</a> </li> <li> 3.6 <a href="/book/ja/v2/Git-%e3%81%ae%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81%e6%a9%9f%e8%83%bd-%e3%83%aa%e3%83%99%e3%83%bc%e3%82%b9">リベース</a> </li> <li> 3.7 <a href="/book/ja/v2/Git-%e3%81%ae%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81%e6%a9%9f%e8%83%bd-%e3%81%be%e3%81%a8%e3%82%81">まとめ</a> </li> </ol> </li> <li class='chapter'> <h2>4. <a href="/book/ja/v2/Git%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc-%e3%83%97%e3%83%ad%e3%83%88%e3%82%b3%e3%83%ab">Gitサーバー</a></h2> <ol> <li> 4.1 <a href="/book/ja/v2/Git%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc-%e3%83%97%e3%83%ad%e3%83%88%e3%82%b3%e3%83%ab">プロトコル</a> </li> <li> 4.2 <a href="/book/ja/v2/Git%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc-%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e7%94%a8%e3%81%ae-Git-%e3%81%ae%e5%8f%96%e5%be%97">サーバー用の Git の取得</a> </li> <li> 4.3 <a href="/book/ja/v2/Git%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc-SSH-%e5%85%ac%e9%96%8b%e9%8d%b5%e3%81%ae%e4%bd%9c%e6%88%90">SSH 公開鍵の作成</a> </li> <li> 4.4 <a href="/book/ja/v2/Git%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc-%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e3%81%ae%e3%82%bb%e3%83%83%e3%83%88%e3%82%a2%e3%83%83%e3%83%97">サーバーのセットアップ</a> </li> <li> 4.5 <a href="/book/ja/v2/Git%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc-Git-%e3%83%87%e3%83%bc%e3%83%a2%e3%83%b3">Git デーモン</a> </li> <li> 4.6 <a href="/book/ja/v2/Git%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc-Smart-HTTP">Smart HTTP</a> </li> <li> 4.7 <a href="/book/ja/v2/Git%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc-GitWeb">GitWeb</a> </li> <li> 4.8 <a href="/book/ja/v2/Git%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc-GitLab">GitLab</a> </li> <li> 4.9 <a href="/book/ja/v2/Git%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc-%e3%82%b5%e3%83%bc%e3%83%89%e3%83%91%e3%83%bc%e3%83%86%e3%82%a3%e3%81%ab%e3%82%88%e3%82%8b-Git-%e3%83%9b%e3%82%b9%e3%83%86%e3%82%a3%e3%83%b3%e3%82%b0">サードパーティによる Git ホスティング</a> </li> <li> 4.10 <a href="/book/ja/v2/Git%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc-%e3%81%be%e3%81%a8%e3%82%81">まとめ</a> </li> </ol> </li> <li class='chapter'> <h2>5. <a href="/book/ja/v2/Git-%e3%81%a7%e3%81%ae%e5%88%86%e6%95%a3%e4%bd%9c%e6%a5%ad-%e5%88%86%e6%95%a3%e4%bd%9c%e6%a5%ad%e3%81%ae%e6%b5%81%e3%82%8c">Git での分散作業</a></h2> <ol> <li> 5.1 <a href="/book/ja/v2/Git-%e3%81%a7%e3%81%ae%e5%88%86%e6%95%a3%e4%bd%9c%e6%a5%ad-%e5%88%86%e6%95%a3%e4%bd%9c%e6%a5%ad%e3%81%ae%e6%b5%81%e3%82%8c">分散作業の流れ</a> </li> <li> 5.2 <a href="/book/ja/v2/Git-%e3%81%a7%e3%81%ae%e5%88%86%e6%95%a3%e4%bd%9c%e6%a5%ad-%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%b8%e3%81%ae%e8%b2%a2%e7%8c%ae">プロジェクトへの貢献</a> </li> <li> 5.3 <a href="/book/ja/v2/Git-%e3%81%a7%e3%81%ae%e5%88%86%e6%95%a3%e4%bd%9c%e6%a5%ad-%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%ae%e9%81%8b%e5%96%b6">プロジェクトの運営</a> </li> <li> 5.4 <a href="/book/ja/v2/Git-%e3%81%a7%e3%81%ae%e5%88%86%e6%95%a3%e4%bd%9c%e6%a5%ad-%e3%81%be%e3%81%a8%e3%82%81">まとめ</a> </li> </ol> </li> </ol> </div> <div class='column-middle'> <ol class='book-toc'> <li class='chapter'> <h2>6. <a href="/book/ja/v2/GitHub-%e3%82%a2%e3%82%ab%e3%82%a6%e3%83%b3%e3%83%88%e3%81%ae%e6%ba%96%e5%82%99%e3%81%a8%e8%a8%ad%e5%ae%9a">GitHub</a></h2> <ol> <li> 6.1 <a href="/book/ja/v2/GitHub-%e3%82%a2%e3%82%ab%e3%82%a6%e3%83%b3%e3%83%88%e3%81%ae%e6%ba%96%e5%82%99%e3%81%a8%e8%a8%ad%e5%ae%9a">アカウントの準備と設定</a> </li> <li> 6.2 <a href="/book/ja/v2/GitHub-%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%b8%e3%81%ae%e8%b2%a2%e7%8c%ae">プロジェクトへの貢献</a> </li> <li> 6.3 <a href="/book/ja/v2/GitHub-%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%ae%e3%83%a1%e3%83%b3%e3%83%86%e3%83%8a%e3%83%b3%e3%82%b9">プロジェクトのメンテナンス</a> </li> <li> 6.4 <a href="/book/ja/v2/GitHub-%e7%b5%84%e7%b9%94%e3%81%ae%e7%ae%a1%e7%90%86">組織の管理</a> </li> <li> 6.5 <a href="/book/ja/v2/GitHub-%e3%82%b9%e3%82%af%e3%83%aa%e3%83%97%e3%83%88%e3%81%ab%e3%82%88%e3%82%8b-GitHub-%e3%81%ae%e6%93%8d%e4%bd%9c">スクリプトによる GitHub の操作</a> </li> <li> 6.6 <a href="/book/ja/v2/GitHub-%e3%81%be%e3%81%a8%e3%82%81">まとめ</a> </li> </ol> </li> <li class='chapter'> <h2>7. <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-%e3%83%aa%e3%83%93%e3%82%b8%e3%83%a7%e3%83%b3%e3%81%ae%e9%81%b8%e6%8a%9e">Git のさまざまなツール</a></h2> <ol> <li> 7.1 <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-%e3%83%aa%e3%83%93%e3%82%b8%e3%83%a7%e3%83%b3%e3%81%ae%e9%81%b8%e6%8a%9e">リビジョンの選択</a> </li> <li> 7.2 <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-%e5%af%be%e8%a9%b1%e7%9a%84%e3%81%aa%e3%82%b9%e3%83%86%e3%83%bc%e3%82%b8%e3%83%b3%e3%82%b0">対話的なステージング</a> </li> <li> 7.3 <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-%e4%bd%9c%e6%a5%ad%e3%81%ae%e9%9a%a0%e3%81%97%e3%81%8b%e3%81%9f%e3%81%a8%e6%b6%88%e3%81%97%e3%81%8b%e3%81%9f">作業の隠しかたと消しかた</a> </li> <li> 7.4 <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-%e4%bd%9c%e6%a5%ad%e5%86%85%e5%ae%b9%e3%81%b8%e3%81%ae%e7%bd%b2%e5%90%8d">作業内容への署名</a> </li> <li> 7.5 <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%a4%9c%e7%b4%a2">検索</a> </li> <li> 7.6 <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> </li> <li> 7.7 <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-%e3%83%aa%e3%82%bb%e3%83%83%e3%83%88%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e8%a9%b3%e8%aa%ac">リセットコマンド詳説</a> </li> <li> 7.8 <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-%e9%ab%98%e5%ba%a6%e3%81%aa%e3%83%9e%e3%83%bc%e3%82%b8%e6%89%8b%e6%b3%95">高度なマージ手法</a> </li> <li> 7.9 <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-Rerere">Rerere</a> </li> <li> 7.10 <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-Git-%e3%81%ab%e3%82%88%e3%82%8b%e3%83%87%e3%83%90%e3%83%83%e3%82%b0" class="active">Git によるデバッグ</a> </li> <li> 7.11 <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-%e3%82%b5%e3%83%96%e3%83%a2%e3%82%b8%e3%83%a5%e3%83%bc%e3%83%ab">サブモジュール</a> </li> <li> 7.12 <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-%e3%83%90%e3%83%b3%e3%83%89%e3%83%ab%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e4%bd%9c%e6%88%90">バンドルファイルの作成</a> </li> <li> 7.13 <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-Git-%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%ae%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88">Git オブジェクトの置き換え</a> </li> <li> 7.14 <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-%e8%aa%8d%e8%a8%bc%e6%83%85%e5%a0%b1%e3%81%ae%e4%bf%9d%e5%ad%98">認証情報の保存</a> </li> <li> 7.15 <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-%e3%81%be%e3%81%a8%e3%82%81">まとめ</a> </li> </ol> </li> <li class='chapter'> <h2>8. <a href="/book/ja/v2/Git-%e3%81%ae%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%9e%e3%82%a4%e3%82%ba-Git-%e3%81%ae%e8%a8%ad%e5%ae%9a">Git のカスタマイズ</a></h2> <ol> <li> 8.1 <a href="/book/ja/v2/Git-%e3%81%ae%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%9e%e3%82%a4%e3%82%ba-Git-%e3%81%ae%e8%a8%ad%e5%ae%9a">Git の設定</a> </li> <li> 8.2 <a href="/book/ja/v2/Git-%e3%81%ae%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%9e%e3%82%a4%e3%82%ba-Git-%e3%81%ae%e5%b1%9e%e6%80%a7">Git の属性</a> </li> <li> 8.3 <a href="/book/ja/v2/Git-%e3%81%ae%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%9e%e3%82%a4%e3%82%ba-Git-%e3%83%95%e3%83%83%e3%82%af">Git フック</a> </li> <li> 8.4 <a href="/book/ja/v2/Git-%e3%81%ae%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%9e%e3%82%a4%e3%82%ba-Git-%e3%83%9d%e3%83%aa%e3%82%b7%e3%83%bc%e3%81%ae%e5%ae%9f%e6%96%bd%e4%be%8b">Git ポリシーの実施例</a> </li> <li> 8.5 <a href="/book/ja/v2/Git-%e3%81%ae%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%9e%e3%82%a4%e3%82%ba-%e3%81%be%e3%81%a8%e3%82%81">まとめ</a> </li> </ol> </li> <li class='chapter'> <h2>9. <a href="/book/ja/v2/Git%e3%81%a8%e3%81%9d%e3%81%ae%e4%bb%96%e3%81%ae%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0%e3%81%ae%e9%80%a3%e6%90%ba-Git-%e3%82%92%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%83%88%e3%81%a8%e3%81%97%e3%81%a6%e4%bd%bf%e7%94%a8%e3%81%99%e3%82%8b">Gitとその他のシステムの連携</a></h2> <ol> <li> 9.1 <a href="/book/ja/v2/Git%e3%81%a8%e3%81%9d%e3%81%ae%e4%bb%96%e3%81%ae%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0%e3%81%ae%e9%80%a3%e6%90%ba-Git-%e3%82%92%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%83%88%e3%81%a8%e3%81%97%e3%81%a6%e4%bd%bf%e7%94%a8%e3%81%99%e3%82%8b">Git をクライアントとして使用する</a> </li> <li> 9.2 <a href="/book/ja/v2/Git%e3%81%a8%e3%81%9d%e3%81%ae%e4%bb%96%e3%81%ae%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0%e3%81%ae%e9%80%a3%e6%90%ba-Git-%e3%81%b8%e7%a7%bb%e8%a1%8c%e3%81%99%e3%82%8b">Git へ移行する</a> </li> <li> 9.3 <a href="/book/ja/v2/Git%e3%81%a8%e3%81%9d%e3%81%ae%e4%bb%96%e3%81%ae%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0%e3%81%ae%e9%80%a3%e6%90%ba-%e3%81%be%e3%81%a8%e3%82%81">まとめ</a> </li> </ol> </li> <li class='chapter'> <h2>10. <a href="/book/ja/v2/Git%e3%81%ae%e5%86%85%e5%81%b4-%e9%85%8d%e7%ae%a1%ef%bc%88Plumbing%ef%bc%89%e3%81%a8%e7%a3%81%e5%99%a8%ef%bc%88Porcelain%ef%bc%89">Gitの内側</a></h2> <ol> <li> 10.1 <a href="/book/ja/v2/Git%e3%81%ae%e5%86%85%e5%81%b4-%e9%85%8d%e7%ae%a1%ef%bc%88Plumbing%ef%bc%89%e3%81%a8%e7%a3%81%e5%99%a8%ef%bc%88Porcelain%ef%bc%89">配管(Plumbing)と磁器(Porcelain)</a> </li> <li> 10.2 <a href="/book/ja/v2/Git%e3%81%ae%e5%86%85%e5%81%b4-Git%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88">Gitオブジェクト</a> </li> <li> 10.3 <a href="/book/ja/v2/Git%e3%81%ae%e5%86%85%e5%81%b4-Git%e3%81%ae%e5%8f%82%e7%85%a7">Gitの参照</a> </li> <li> 10.4 <a href="/book/ja/v2/Git%e3%81%ae%e5%86%85%e5%81%b4-Packfile">Packfile</a> </li> <li> 10.5 <a href="/book/ja/v2/Git%e3%81%ae%e5%86%85%e5%81%b4-Refspec">Refspec</a> </li> <li> 10.6 <a href="/book/ja/v2/Git%e3%81%ae%e5%86%85%e5%81%b4-%e8%bb%a2%e9%80%81%e3%83%97%e3%83%ad%e3%83%88%e3%82%b3%e3%83%ab">転送プロトコル</a> </li> <li> 10.7 <a href="/book/ja/v2/Git%e3%81%ae%e5%86%85%e5%81%b4-%e3%83%a1%e3%83%b3%e3%83%86%e3%83%8a%e3%83%b3%e3%82%b9%e3%81%a8%e3%83%87%e3%83%bc%e3%82%bf%e3%83%aa%e3%82%ab%e3%83%90%e3%83%aa">メンテナンスとデータリカバリ</a> </li> <li> 10.8 <a href="/book/ja/v2/Git%e3%81%ae%e5%86%85%e5%81%b4-%e7%92%b0%e5%a2%83%e5%a4%89%e6%95%b0">環境変数</a> </li> <li> 10.9 <a href="/book/ja/v2/Git%e3%81%ae%e5%86%85%e5%81%b4-%e3%81%be%e3%81%a8%e3%82%81">まとめ</a> </li> </ol> </li> </ol> </div> <div class='column-right'> <ol class='book-toc'> <li class='chapter'> <h2>A1. <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-A:-%e3%81%9d%e3%81%ae%e4%bb%96%e3%81%ae%e7%92%b0%e5%a2%83%e3%81%a7%e3%81%aeGit-%e3%82%b0%e3%83%a9%e3%83%95%e3%82%a3%e3%82%ab%e3%83%ab%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%95%e3%82%a7%e3%83%bc%e3%82%b9">付録 A: その他の環境でのGit</a></h2> <ol> <li> A1.1 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-A:-%e3%81%9d%e3%81%ae%e4%bb%96%e3%81%ae%e7%92%b0%e5%a2%83%e3%81%a7%e3%81%aeGit-%e3%82%b0%e3%83%a9%e3%83%95%e3%82%a3%e3%82%ab%e3%83%ab%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%95%e3%82%a7%e3%83%bc%e3%82%b9">グラフィカルインタフェース</a> </li> <li> A1.2 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-A:-%e3%81%9d%e3%81%ae%e4%bb%96%e3%81%ae%e7%92%b0%e5%a2%83%e3%81%a7%e3%81%aeGit-Visual-Studio%e3%81%a7Git%e3%82%92%e4%bd%bf%e3%81%86">Visual StudioでGitを使う</a> </li> <li> A1.3 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-A:-%e3%81%9d%e3%81%ae%e4%bb%96%e3%81%ae%e7%92%b0%e5%a2%83%e3%81%a7%e3%81%aeGit-Eclipse%e3%81%a7Git%e3%82%92%e4%bd%bf%e3%81%86">EclipseでGitを使う</a> </li> <li> A1.4 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-A:-%e3%81%9d%e3%81%ae%e4%bb%96%e3%81%ae%e7%92%b0%e5%a2%83%e3%81%a7%e3%81%aeGit-Bash%e3%81%a7Git%e3%82%92%e4%bd%bf%e3%81%86">BashでGitを使う</a> </li> <li> A1.5 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-A:-%e3%81%9d%e3%81%ae%e4%bb%96%e3%81%ae%e7%92%b0%e5%a2%83%e3%81%a7%e3%81%aeGit-Zsh%e3%81%a7Git%e3%82%92%e4%bd%bf%e3%81%86">ZshでGitを使う</a> </li> <li> A1.6 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-A:-%e3%81%9d%e3%81%ae%e4%bb%96%e3%81%ae%e7%92%b0%e5%a2%83%e3%81%a7%e3%81%aeGit-Powershell%e3%81%a7Git%e3%82%92%e4%bd%bf%e3%81%86">PowershellでGitを使う</a> </li> <li> A1.7 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-A:-%e3%81%9d%e3%81%ae%e4%bb%96%e3%81%ae%e7%92%b0%e5%a2%83%e3%81%a7%e3%81%aeGit-%e3%81%be%e3%81%a8%e3%82%81">まとめ</a> </li> </ol> </li> <li class='chapter'> <h2>A2. <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-B:-Git%e3%82%92%e3%81%82%e3%81%aa%e3%81%9f%e3%81%ae%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ab%e7%b5%84%e3%81%bf%e8%be%bc%e3%82%80-Git%e3%81%ae%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%83%a9%e3%82%a4%e3%83%b3%e3%83%84%e3%83%bc%e3%83%ab%e3%82%92%e4%bd%bf%e3%81%86%e6%96%b9%e6%b3%95">付録 B: Gitをあなたのアプリケーションに組み込む</a></h2> <ol> <li> A2.1 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-B:-Git%e3%82%92%e3%81%82%e3%81%aa%e3%81%9f%e3%81%ae%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ab%e7%b5%84%e3%81%bf%e8%be%bc%e3%82%80-Git%e3%81%ae%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%83%a9%e3%82%a4%e3%83%b3%e3%83%84%e3%83%bc%e3%83%ab%e3%82%92%e4%bd%bf%e3%81%86%e6%96%b9%e6%b3%95">Gitのコマンドラインツールを使う方法</a> </li> <li> A2.2 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-B:-Git%e3%82%92%e3%81%82%e3%81%aa%e3%81%9f%e3%81%ae%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ab%e7%b5%84%e3%81%bf%e8%be%bc%e3%82%80-Libgit2%e3%82%92%e4%bd%bf%e3%81%86%e6%96%b9%e6%b3%95">Libgit2を使う方法</a> </li> <li> A2.3 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-B:-Git%e3%82%92%e3%81%82%e3%81%aa%e3%81%9f%e3%81%ae%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ab%e7%b5%84%e3%81%bf%e8%be%bc%e3%82%80-JGit">JGit</a> </li> </ol> </li> <li class='chapter'> <h2>A3. <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-C:-Git%e3%81%ae%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89-%e3%82%bb%e3%83%83%e3%83%88%e3%82%a2%e3%83%83%e3%83%97%e3%81%a8%e8%a8%ad%e5%ae%9a">付録 C: Gitのコマンド</a></h2> <ol> <li> A3.1 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-C:-Git%e3%81%ae%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89-%e3%82%bb%e3%83%83%e3%83%88%e3%82%a2%e3%83%83%e3%83%97%e3%81%a8%e8%a8%ad%e5%ae%9a">セットアップと設定</a> </li> <li> A3.2 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-C:-Git%e3%81%ae%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89-%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%ae%e5%8f%96%e5%be%97%e3%81%a8%e4%bd%9c%e6%88%90">プロジェクトの取得と作成</a> </li> <li> A3.3 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-C:-Git%e3%81%ae%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89-%e5%9f%ba%e6%9c%ac%e7%9a%84%e3%81%aa%e3%82%b9%e3%83%8a%e3%83%83%e3%83%97%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88">基本的なスナップショット</a> </li> <li> A3.4 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-C:-Git%e3%81%ae%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89-%e3%83%96%e3%83%a9%e3%83%b3%e3%83%81%e3%81%a8%e3%83%9e%e3%83%bc%e3%82%b8">ブランチとマージ</a> </li> <li> A3.5 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-C:-Git%e3%81%ae%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89-%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%ae%e5%85%b1%e6%9c%89%e3%81%a8%e3%82%a2%e3%83%83%e3%83%97%e3%83%87%e3%83%bc%e3%83%88">プロジェクトの共有とアップデート</a> </li> <li> A3.6 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-C:-Git%e3%81%ae%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89-%e6%a4%9c%e6%9f%bb%e3%81%a8%e6%af%94%e8%bc%83">検査と比較</a> </li> <li> A3.7 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-C:-Git%e3%81%ae%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89-%e3%83%87%e3%83%90%e3%83%83%e3%82%b0">デバッグ</a> </li> <li> A3.8 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-C:-Git%e3%81%ae%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89-%e3%83%91%e3%83%83%e3%83%81%e3%81%ae%e9%81%a9%e7%94%a8">パッチの適用</a> </li> <li> A3.9 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-C:-Git%e3%81%ae%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89-%e3%83%a1%e3%83%bc%e3%83%ab">メール</a> </li> <li> A3.10 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-C:-Git%e3%81%ae%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89-%e5%a4%96%e9%83%a8%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0">外部システム</a> </li> <li> A3.11 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-C:-Git%e3%81%ae%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89-%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0%e7%ae%a1%e7%90%86">システム管理</a> </li> <li> A3.12 <a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-C:-Git%e3%81%ae%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89-%e9%85%8d%e7%ae%a1%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89">配管コマンド</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.10 Git のさまざまなツール - Git によるデバッグ</h1> <div> <h2 id="_git_によるデバッグ">Git によるデバッグ</h2> <div class="paragraph"> <p>Git には、プロジェクトで発生した問題をデバッグするためのツールも用意されています。 Git はほとんどあらゆる種類のプロジェクトで使えるように設計されているので、このツールも非常に汎用的なものです。しかし、バグを見つけたり不具合の原因を探したりするための助けとなるでしょう。</p> </div> <div class="sect3"> <h3 id="r_file_annotation">ファイルの注記</h3> <div class="paragraph"> <p>コードのバグを追跡しているときに「それが、いつどんな理由で追加されたのか」が知りたくなることがあるでしょう。そんな場合にもっとも便利なのが、ファイルの注記です。 これは、ファイルの各行について、その行を最後に更新したのがどのコミットかを表示します。 もしコードの中の特定のメソッドにバグがあることを見つけたら、そのファイルを <code>git blame</code> しましょう。そうすれば、そのメソッドの各行がいつ誰によって更新されたのかがわかります。 この例では、<code>-L</code> オプションを使って 12 行目から 22 行目までに出力を限定しています。</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git blame -L 12,22 simplegit.rb ^4832fe2 (Scott Chacon 2008-03-15 10:31:28 -0700 12) def show(tree = 'master') ^4832fe2 (Scott Chacon 2008-03-15 10:31:28 -0700 13) command("git show #{tree}") ^4832fe2 (Scott Chacon 2008-03-15 10:31:28 -0700 14) end ^4832fe2 (Scott Chacon 2008-03-15 10:31:28 -0700 15) 9f6560e4 (Scott Chacon 2008-03-17 21:52:20 -0700 16) def log(tree = 'master') 79eaf55d (Scott Chacon 2008-04-06 10:15:08 -0700 17) command("git log #{tree}") 9f6560e4 (Scott Chacon 2008-03-17 21:52:20 -0700 18) end 9f6560e4 (Scott Chacon 2008-03-17 21:52:20 -0700 19) 42cf2861 (Magnus Chacon 2008-04-13 10:45:01 -0700 20) def blame(path) 42cf2861 (Magnus Chacon 2008-04-13 10:45:01 -0700 21) command("git blame #{path}") 42cf2861 (Magnus Chacon 2008-04-13 10:45:01 -0700 22) end</code></pre> </div> </div> <div class="paragraph"> <p>最初の項目は、その行を最後に更新したコミットの SHA-1 の一部です。 次のふたつの項目は、そのコミットから抽出した作者情報とコミット日時です。これで、いつ誰がその行を更新したのかが簡単にわかります。 それに続いて、行番号とファイルの中身が表示されます。 <code>^4832fe2</code> のコミットに関する行に注目しましょう。これらの行は、ファイルが最初にコミットされたときのままであることを表します。 このコミットはファイルがプロジェクトに最初に追加されたときのものであり、これらの行はそれ以降変更されていません。 これはちょっと戸惑うかも知れません。Git では、これまで紹介してきただけで少なくとも三種類以上の意味で <code>^</code> を使っていますからね。しかし、ここではそういう意味になるのです。</p> </div> <div class="paragraph"> <p>Git のすばらしいところのひとつに、ファイルのリネームを明示的には追跡しないということがあります。 スナップショットだけを記録し、もしリネームされていたのなら暗黙のうちにそれを検出します。 この機能の興味深いところは、ファイルのリネームだけでなくコードの移動についても検出できるということです。 <code>git blame</code> に <code>-C</code> を渡すと Git はそのファイルを解析し、別のところからコピーされたコード片がないかどうかを探します。 例えば、<code>GITServerHandler.m</code> というファイルをリファクタリングで複数のファイルに分割したとしましょう。そのうちのひとつが <code>GITPackUpload.m</code> です。 ここで <code>-C</code> オプションをつけて <code>GITPackUpload.m</code> を調べると、コードのどの部分をどのファイルからコピーしたのかを知ることができます。</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git blame -C -L 141,153 GITPackUpload.m f344f58d GITServerHandler.m (Scott 2009-01-04 141) f344f58d GITServerHandler.m (Scott 2009-01-04 142) - (void) gatherObjectShasFromC f344f58d GITServerHandler.m (Scott 2009-01-04 143) { 70befddd GITServerHandler.m (Scott 2009-03-22 144) //NSLog(@"GATHER COMMI ad11ac80 GITPackUpload.m (Scott 2009-03-24 145) ad11ac80 GITPackUpload.m (Scott 2009-03-24 146) NSString *parentSha; ad11ac80 GITPackUpload.m (Scott 2009-03-24 147) GITCommit *commit = [g ad11ac80 GITPackUpload.m (Scott 2009-03-24 148) ad11ac80 GITPackUpload.m (Scott 2009-03-24 149) //NSLog(@"GATHER COMMI ad11ac80 GITPackUpload.m (Scott 2009-03-24 150) 56ef2caf GITServerHandler.m (Scott 2009-01-05 151) if(commit) { 56ef2caf GITServerHandler.m (Scott 2009-01-05 152) [refDict setOb 56ef2caf GITServerHandler.m (Scott 2009-01-05 153)</code></pre> </div> </div> <div class="paragraph"> <p>これはほんとうに便利です。 通常は、そのファイルがコピーされたときのコミットを知ることになります。コピー先のファイルにおいて最初にその行をさわったのが、その内容をコピーしてきたときだからです。 Git は、その行が本当に書かれたコミットがどこであったのかを (たとえ別のファイルであったとしても) 教えてくれるのです。</p> </div> </div> <div class="sect3"> <h3 id="r_binary_search">二分探索</h3> <div class="paragraph"> <p>ファイルの注記を使えば、その問題がどの時点で始まったのかを知ることができます。 何がおかしくなったのかがわからず、最後にうまく動作していたときから何十何百ものコミットが行われている場合などは、<code>git bisect</code> に頼ることになるでしょう。 <code>bisect</code> コマンドはコミットの歴史に対して二分探索を行い、どのコミットで問題が混入したのかを可能な限り手早く見つけ出せるようにします。</p> </div> <div class="paragraph"> <p>自分のコードをリリースして運用環境にプッシュしたあとに、バグ報告を受け取ったと仮定しましょう。そのバグは開発環境では再現せず、なぜそんなことになるのか想像もつきません。 コードをよく調べて問題を再現させることはできましたが、何が悪かったのかがわかりません。 こんな場合に、二分探索で原因を特定することができます。 まず、<code>git bisect start</code> を実行します。そして次に <code>git bisect bad</code> を使って、現在のコミットが壊れた状態であることをシステムに伝えます。 次に、まだ壊れていなかったとわかっている直近のコミットを <code>git bisect good [good_commit]</code> で伝えます。</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git bisect start $ git bisect bad $ git bisect good v1.0 Bisecting: 6 revisions left to test after this [ecb6e1bc347ccecc5f9350d878ce677feb13d3b2] error handling on repo</code></pre> </div> </div> <div class="paragraph"> <p>Git は、まだうまく動いていたと指定されたコミット (v1.0) と現在の壊れたバージョンの間には 12 のコミットがあるということを検出しました。そして、そのちょうど真ん中にあるコミットをチェックアウトしました。 ここでテストを実行すれば、このコミットで同じ問題が発生するかどうかがわかります。 もし問題が発生したなら、実際に問題が混入したのはそれより前のコミットだということになります。そうでなければ、それ以降のコミットで問題が混入したのでしょう。 ここでは、問題が発生しなかったものとします。<code>git bisect good</code> で Git にその旨を伝え、旅を続けましょう。</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git bisect good Bisecting: 3 revisions left to test after this [b047b02ea83310a70fd603dc8cd7a6cd13d15c04] secure this thing</code></pre> </div> </div> <div class="paragraph"> <p>また別のコミットがやってきました。先ほど調べたコミットと「壊れている」と伝えたコミットの真ん中にあるものです。 ふたたびテストを実行し、今度はこのコミットで問題が再現したものとします。それを Git に伝えるには <code>git bisect bad</code> を使います。</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git bisect bad Bisecting: 1 revisions left to test after this [f71ce38690acf49c1f3c9bea38e09d82a5ce6014] drop exceptions table</code></pre> </div> </div> <div class="paragraph"> <p>このコミットはうまく動きました。というわけで、問題が混入したコミットを特定するための情報がこれですべて整いました。 Git は問題が混入したコミットの SHA-1 を示し、そのコミット情報とどのファイルが変更されたのかを表示します。これを使って、いったい何が原因でバグが発生したのかを突き止めます。</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git bisect good b047b02ea83310a70fd603dc8cd7a6cd13d15c04 is first bad commit commit b047b02ea83310a70fd603dc8cd7a6cd13d15c04 Author: PJ Hyett <pjhyett@example.com> Date: Tue Jan 27 14:48:32 2009 -0800 secure this thing :040000 040000 40ee3e7821b895e52c1695092db9bdc4c61d1730 f24d3c6ebcfc639b1a3814550e62d60b8e68a8e4 M config</code></pre> </div> </div> <div class="paragraph"> <p>原因がわかったら、作業を始める前に <code>git bisect reset</code> を実行して HEAD を作業前の状態に戻さなければなりません。そうしないと面倒なことになってしまいます。</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git bisect reset</code></pre> </div> </div> <div class="paragraph"> <p>この強力なツールを使えば、何百ものコミットの中からバグの原因となるコミットを数分で見つけだせるようになります。 実際、プロジェクトが正常なときに 0 を返してどこかおかしいときに 0 以外を返すスクリプトを用意しておけば、<code>git bisect</code> を完全に自動化することもできます。 まず、先ほどと同じく、壊れているコミットと正しく動作しているコミットを指定します。 これは <code>bisect start</code> コマンドで行うこともできます。まず最初に壊れているコミット、そしてその後に正しく動作しているコミットを指定します。</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git bisect start HEAD v1.0 $ git bisect run test-error.sh</code></pre> </div> </div> <div class="paragraph"> <p>こうすると、チェックアウトされたコミットに対して自動的に <code>test-error.sh</code> を実行し、壊れる原因となるコミットを見つけ出すまで自動的に処理を続けます。 <code>make</code> や <code>make tests</code>、その他自動テストを実行するためのプログラムなどをここで実行させることもできます。</p> </div> </div> <div id="nav"><a href="/book/ja/v2/Git-のさまざまなツール-Rerere">prev</a> | <a href="/book/ja/v2/Git-のさまざまなツール-サブモジュール">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>