CINXE.COM
Git - 引用规范
<!DOCTYPE html> <html lang="zh"> <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/v2/Git-Internals-The-Refspec">English</a>. </p> <p> Full translation available in <table> <tr><td><a href="/book/az/v2/Git%e2%80%99in-Daxili-%c4%b0%c5%9fl%c9%99ri-Refspec">azərbaycan dili</a>,</td></tr> <tr><td><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">български език</a>,</td></tr> <tr><td><a href="/book/de/v2/Git-Interna-Die-Referenzspezifikation-engl-Refspec">Deutsch</a>,</td></tr> <tr><td><a href="/book/es/v2/Los-entresijos-internos-de-Git-Las-especificaciones-para-hacer-referencia-a%e2%80%a6%e2%80%8b-refspec">Español</a>,</td></tr> <tr><td><a href="/book/fr/v2/Les-tripes-de-Git-La-refspec">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%e5%86%85%e5%81%b4-Refspec">日本語</a>,</td></tr> <tr><td><a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-Refspec">한국어</a>,</td></tr> <tr><td><a href="/book/nl/v2/Git-Binnenwerk-De-Refspec">Nederlands</a>,</td></tr> <tr><td><a href="/book/ru/v2/Git-%d0%b8%d0%b7%d0%bd%d1%83%d1%82%d1%80%d0%b8-%d0%a1%d0%bf%d0%b5%d1%86%d0%b8%d1%84%d0%b8%d0%ba%d0%b0%d1%86%d0%b8%d0%b8-%d1%81%d1%81%d1%8b%d0%bb%d0%be%d0%ba">Русский</a>,</td></tr> <tr><td><a href="/book/sl/v2/Notranjost-Gita-Refspec">Slovenščina</a>,</td></tr> <tr><td><a href="/book/tl/v2/Mga-Panloob-ng-GIT-Ang-Refspec">Tagalog</a>,</td></tr> <tr><td><a href="/book/uk/v2/Git-%d0%b7%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%b8%d0%bd%d0%b8-%d0%a1%d0%bf%d0%b5%d1%86%d0%b8%d1%84%d1%96%d0%ba%d0%b0%d1%86%d1%96%d1%8f-%d0%bf%d0%be%d1%81%d0%b8%d0%bb%d0%b0%d0%bd%d1%8c-refspec">Українська</a></td></tr> <tr><td><a href="/book/zh/v2/Git-%e5%86%85%e9%83%a8%e5%8e%9f%e7%90%86-%e5%bc%95%e7%94%a8%e8%a7%84%e8%8c%83">简体中文</a>,</td></tr> </table> </p> <p> Partial translations available in <table> <tr><td><a href="/book/cs/v2/Git-Internals-The-Refspec">Čeština</a>,</td></tr> <tr><td><a href="/book/mk/v2/%d0%92%d0%bd%d0%b0%d1%82%d1%80%d0%b5%d1%88%d0%bd%d0%be%d1%81%d1%82%d0%b0-%d0%bd%d0%b0-Git-The-Refspec">Македонски</a>,</td></tr> <tr><td><a href="/book/pl/v2/Mechanizmy-wewn%c4%99trzne-w-Git-Refspec">Polski</a>,</td></tr> <tr><td><a href="/book/sr/v2/%d0%93%d0%b8%d1%82-%d0%b8%d0%b7%d0%bd%d1%83%d1%82%d1%80%d0%b0-%d0%a0%d0%b5%d1%84%d1%81%d0%bf%d0%b5%d0%ba">Српски</a>,</td></tr> <tr><td><a href="/book/uz/v2/Git-Internals-The-Refspec">Ўзбекча</a>,</td></tr> <tr><td><a href="/book/zh-tw/v2/Git-Internals-The-Refspec">繁體中文</a>,</td></tr> </table> </p> <p> Translations started for <table> <tr><td><a href="/book/be/v2/Git-Internals-The-Refspec">Беларуская</a>,</td></tr> <tr><td><a href="/book/fa/v2/Git-Internals-The-Refspec" dir="rtl">فارسی</a>,</td></tr> <tr><td><a href="/book/id/v2/Git-Internals-The-Refspec">Indonesian</a>,</td></tr> <tr><td><a href="/book/it/v2/Git-Internals-The-Refspec">Italiano</a>,</td></tr> <tr><td><a href="/book/ms/v2/Git-Internals-The-Refspec">Bahasa Melayu</a>,</td></tr> <tr><td><a href="/book/pt-br/v2/Funcionamento-Interno-do-Git-The-Refspec">Português (Brasil)</a>,</td></tr> <tr><td><a href="/book/pt-pt/v2/Internos-do-Git-The-Refspec">Português (Portugal)</a>,</td></tr> <tr><td><a href="/book/sv/v2/Git-Internals-The-Refspec">Svenska</a>,</td></tr> <tr><td><a href="/book/tr/v2/Dahili-Git-%c3%96geleri-Refspec">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-zh">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/zh/v2/%e8%b5%b7%e6%ad%a5-%e5%85%b3%e4%ba%8e%e7%89%88%e6%9c%ac%e6%8e%a7%e5%88%b6">起步</a></h2> <ol> <li> 1.1 <a href="/book/zh/v2/%e8%b5%b7%e6%ad%a5-%e5%85%b3%e4%ba%8e%e7%89%88%e6%9c%ac%e6%8e%a7%e5%88%b6">关于版本控制</a> </li> <li> 1.2 <a href="/book/zh/v2/%e8%b5%b7%e6%ad%a5-Git-%e7%ae%80%e5%8f%b2">Git 简史</a> </li> <li> 1.3 <a href="/book/zh/v2/%e8%b5%b7%e6%ad%a5-Git-%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f">Git 是什么?</a> </li> <li> 1.4 <a href="/book/zh/v2/%e8%b5%b7%e6%ad%a5-%e5%91%bd%e4%bb%a4%e8%a1%8c">命令行</a> </li> <li> 1.5 <a href="/book/zh/v2/%e8%b5%b7%e6%ad%a5-%e5%ae%89%e8%a3%85-Git">安装 Git</a> </li> <li> 1.6 <a href="/book/zh/v2/%e8%b5%b7%e6%ad%a5-%e5%88%9d%e6%ac%a1%e8%bf%90%e8%a1%8c-Git-%e5%89%8d%e7%9a%84%e9%85%8d%e7%bd%ae">初次运行 Git 前的配置</a> </li> <li> 1.7 <a href="/book/zh/v2/%e8%b5%b7%e6%ad%a5-%e8%8e%b7%e5%8f%96%e5%b8%ae%e5%8a%a9">获取帮助</a> </li> <li> 1.8 <a href="/book/zh/v2/%e8%b5%b7%e6%ad%a5-%e6%80%bb%e7%bb%93">总结</a> </li> </ol> </li> <li class='chapter'> <h2>2. <a href="/book/zh/v2/Git-%e5%9f%ba%e7%a1%80-%e8%8e%b7%e5%8f%96-Git-%e4%bb%93%e5%ba%93">Git 基础</a></h2> <ol> <li> 2.1 <a href="/book/zh/v2/Git-%e5%9f%ba%e7%a1%80-%e8%8e%b7%e5%8f%96-Git-%e4%bb%93%e5%ba%93">获取 Git 仓库</a> </li> <li> 2.2 <a href="/book/zh/v2/Git-%e5%9f%ba%e7%a1%80-%e8%ae%b0%e5%bd%95%e6%af%8f%e6%ac%a1%e6%9b%b4%e6%96%b0%e5%88%b0%e4%bb%93%e5%ba%93">记录每次更新到仓库</a> </li> <li> 2.3 <a href="/book/zh/v2/Git-%e5%9f%ba%e7%a1%80-%e6%9f%a5%e7%9c%8b%e6%8f%90%e4%ba%a4%e5%8e%86%e5%8f%b2">查看提交历史</a> </li> <li> 2.4 <a href="/book/zh/v2/Git-%e5%9f%ba%e7%a1%80-%e6%92%a4%e6%b6%88%e6%93%8d%e4%bd%9c">撤消操作</a> </li> <li> 2.5 <a href="/book/zh/v2/Git-%e5%9f%ba%e7%a1%80-%e8%bf%9c%e7%a8%8b%e4%bb%93%e5%ba%93%e7%9a%84%e4%bd%bf%e7%94%a8">远程仓库的使用</a> </li> <li> 2.6 <a href="/book/zh/v2/Git-%e5%9f%ba%e7%a1%80-%e6%89%93%e6%a0%87%e7%ad%be">打标签</a> </li> <li> 2.7 <a href="/book/zh/v2/Git-%e5%9f%ba%e7%a1%80-Git-%e5%88%ab%e5%90%8d">Git 别名</a> </li> <li> 2.8 <a href="/book/zh/v2/Git-%e5%9f%ba%e7%a1%80-%e6%80%bb%e7%bb%93">总结</a> </li> </ol> </li> <li class='chapter'> <h2>3. <a href="/book/zh/v2/Git-%e5%88%86%e6%94%af-%e5%88%86%e6%94%af%e7%ae%80%e4%bb%8b">Git 分支</a></h2> <ol> <li> 3.1 <a href="/book/zh/v2/Git-%e5%88%86%e6%94%af-%e5%88%86%e6%94%af%e7%ae%80%e4%bb%8b">分支简介</a> </li> <li> 3.2 <a href="/book/zh/v2/Git-%e5%88%86%e6%94%af-%e5%88%86%e6%94%af%e7%9a%84%e6%96%b0%e5%bb%ba%e4%b8%8e%e5%90%88%e5%b9%b6">分支的新建与合并</a> </li> <li> 3.3 <a href="/book/zh/v2/Git-%e5%88%86%e6%94%af-%e5%88%86%e6%94%af%e7%ae%a1%e7%90%86">分支管理</a> </li> <li> 3.4 <a href="/book/zh/v2/Git-%e5%88%86%e6%94%af-%e5%88%86%e6%94%af%e5%bc%80%e5%8f%91%e5%b7%a5%e4%bd%9c%e6%b5%81">分支开发工作流</a> </li> <li> 3.5 <a href="/book/zh/v2/Git-%e5%88%86%e6%94%af-%e8%bf%9c%e7%a8%8b%e5%88%86%e6%94%af">远程分支</a> </li> <li> 3.6 <a href="/book/zh/v2/Git-%e5%88%86%e6%94%af-%e5%8f%98%e5%9f%ba">变基</a> </li> <li> 3.7 <a href="/book/zh/v2/Git-%e5%88%86%e6%94%af-%e6%80%bb%e7%bb%93">总结</a> </li> </ol> </li> <li class='chapter'> <h2>4. <a href="/book/zh/v2/%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8a%e7%9a%84-Git-%e5%8d%8f%e8%ae%ae">服务器上的 Git</a></h2> <ol> <li> 4.1 <a href="/book/zh/v2/%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8a%e7%9a%84-Git-%e5%8d%8f%e8%ae%ae">协议</a> </li> <li> 4.2 <a href="/book/zh/v2/%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8a%e7%9a%84-Git-%e5%9c%a8%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8a%e6%90%ad%e5%bb%ba-Git">在服务器上搭建 Git</a> </li> <li> 4.3 <a href="/book/zh/v2/%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8a%e7%9a%84-Git-%e7%94%9f%e6%88%90-SSH-%e5%85%ac%e9%92%a5">生成 SSH 公钥</a> </li> <li> 4.4 <a href="/book/zh/v2/%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8a%e7%9a%84-Git-%e9%85%8d%e7%bd%ae%e6%9c%8d%e5%8a%a1%e5%99%a8">配置服务器</a> </li> <li> 4.5 <a href="/book/zh/v2/%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8a%e7%9a%84-Git-Git-%e5%ae%88%e6%8a%a4%e8%bf%9b%e7%a8%8b">Git 守护进程</a> </li> <li> 4.6 <a href="/book/zh/v2/%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8a%e7%9a%84-Git-Smart-HTTP">Smart HTTP</a> </li> <li> 4.7 <a href="/book/zh/v2/%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8a%e7%9a%84-Git-GitWeb">GitWeb</a> </li> <li> 4.8 <a href="/book/zh/v2/%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8a%e7%9a%84-Git-GitLab">GitLab</a> </li> <li> 4.9 <a href="/book/zh/v2/%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8a%e7%9a%84-Git-%e7%ac%ac%e4%b8%89%e6%96%b9%e6%89%98%e7%ae%a1%e7%9a%84%e9%80%89%e6%8b%a9">第三方托管的选择</a> </li> <li> 4.10 <a href="/book/zh/v2/%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8a%e7%9a%84-Git-%e6%80%bb%e7%bb%93">总结</a> </li> </ol> </li> <li class='chapter'> <h2>5. <a href="/book/zh/v2/%e5%88%86%e5%b8%83%e5%bc%8f-Git-%e5%88%86%e5%b8%83%e5%bc%8f%e5%b7%a5%e4%bd%9c%e6%b5%81%e7%a8%8b">分布式 Git</a></h2> <ol> <li> 5.1 <a href="/book/zh/v2/%e5%88%86%e5%b8%83%e5%bc%8f-Git-%e5%88%86%e5%b8%83%e5%bc%8f%e5%b7%a5%e4%bd%9c%e6%b5%81%e7%a8%8b">分布式工作流程</a> </li> <li> 5.2 <a href="/book/zh/v2/%e5%88%86%e5%b8%83%e5%bc%8f-Git-%e5%90%91%e4%b8%80%e4%b8%aa%e9%a1%b9%e7%9b%ae%e8%b4%a1%e7%8c%ae">向一个项目贡献</a> </li> <li> 5.3 <a href="/book/zh/v2/%e5%88%86%e5%b8%83%e5%bc%8f-Git-%e7%bb%b4%e6%8a%a4%e9%a1%b9%e7%9b%ae">维护项目</a> </li> <li> 5.4 <a href="/book/zh/v2/%e5%88%86%e5%b8%83%e5%bc%8f-Git-%e6%80%bb%e7%bb%93">总结</a> </li> </ol> </li> </ol> </div> <div class='column-middle'> <ol class='book-toc'> <li class='chapter'> <h2>6. <a href="/book/zh/v2/GitHub-%e8%b4%a6%e6%88%b7%e7%9a%84%e5%88%9b%e5%bb%ba%e5%92%8c%e9%85%8d%e7%bd%ae">GitHub</a></h2> <ol> <li> 6.1 <a href="/book/zh/v2/GitHub-%e8%b4%a6%e6%88%b7%e7%9a%84%e5%88%9b%e5%bb%ba%e5%92%8c%e9%85%8d%e7%bd%ae">账户的创建和配置</a> </li> <li> 6.2 <a href="/book/zh/v2/GitHub-%e5%af%b9%e9%a1%b9%e7%9b%ae%e5%81%9a%e5%87%ba%e8%b4%a1%e7%8c%ae">对项目做出贡献</a> </li> <li> 6.3 <a href="/book/zh/v2/GitHub-%e7%bb%b4%e6%8a%a4%e9%a1%b9%e7%9b%ae">维护项目</a> </li> <li> 6.4 <a href="/book/zh/v2/GitHub-%e7%ae%a1%e7%90%86%e7%bb%84%e7%bb%87">管理组织</a> </li> <li> 6.5 <a href="/book/zh/v2/GitHub-%e8%84%9a%e6%9c%ac-GitHub">脚本 GitHub</a> </li> <li> 6.6 <a href="/book/zh/v2/GitHub-%e6%80%bb%e7%bb%93">总结</a> </li> </ol> </li> <li class='chapter'> <h2>7. <a href="/book/zh/v2/Git-%e5%b7%a5%e5%85%b7-%e9%80%89%e6%8b%a9%e4%bf%ae%e8%ae%a2%e7%89%88%e6%9c%ac">Git 工具</a></h2> <ol> <li> 7.1 <a href="/book/zh/v2/Git-%e5%b7%a5%e5%85%b7-%e9%80%89%e6%8b%a9%e4%bf%ae%e8%ae%a2%e7%89%88%e6%9c%ac">选择修订版本</a> </li> <li> 7.2 <a href="/book/zh/v2/Git-%e5%b7%a5%e5%85%b7-%e4%ba%a4%e4%ba%92%e5%bc%8f%e6%9a%82%e5%ad%98">交互式暂存</a> </li> <li> 7.3 <a href="/book/zh/v2/Git-%e5%b7%a5%e5%85%b7-%e8%b4%ae%e8%97%8f%e4%b8%8e%e6%b8%85%e7%90%86">贮藏与清理</a> </li> <li> 7.4 <a href="/book/zh/v2/Git-%e5%b7%a5%e5%85%b7-%e7%ad%be%e7%bd%b2%e5%b7%a5%e4%bd%9c">签署工作</a> </li> <li> 7.5 <a href="/book/zh/v2/Git-%e5%b7%a5%e5%85%b7-%e6%90%9c%e7%b4%a2">搜索</a> </li> <li> 7.6 <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> </li> <li> 7.7 <a href="/book/zh/v2/Git-%e5%b7%a5%e5%85%b7-%e9%87%8d%e7%bd%ae%e6%8f%ad%e5%af%86">重置揭密</a> </li> <li> 7.8 <a href="/book/zh/v2/Git-%e5%b7%a5%e5%85%b7-%e9%ab%98%e7%ba%a7%e5%90%88%e5%b9%b6">高级合并</a> </li> <li> 7.9 <a href="/book/zh/v2/Git-%e5%b7%a5%e5%85%b7-Rerere">Rerere</a> </li> <li> 7.10 <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">使用 Git 调试</a> </li> <li> 7.11 <a href="/book/zh/v2/Git-%e5%b7%a5%e5%85%b7-%e5%ad%90%e6%a8%a1%e5%9d%97">子模块</a> </li> <li> 7.12 <a href="/book/zh/v2/Git-%e5%b7%a5%e5%85%b7-%e6%89%93%e5%8c%85">打包</a> </li> <li> 7.13 <a href="/book/zh/v2/Git-%e5%b7%a5%e5%85%b7-%e6%9b%bf%e6%8d%a2">替换</a> </li> <li> 7.14 <a href="/book/zh/v2/Git-%e5%b7%a5%e5%85%b7-%e5%87%ad%e8%af%81%e5%ad%98%e5%82%a8">凭证存储</a> </li> <li> 7.15 <a href="/book/zh/v2/Git-%e5%b7%a5%e5%85%b7-%e6%80%bb%e7%bb%93">总结</a> </li> </ol> </li> <li class='chapter'> <h2>8. <a href="/book/zh/v2/%e8%87%aa%e5%ae%9a%e4%b9%89-Git-%e9%85%8d%e7%bd%ae-Git">自定义 Git</a></h2> <ol> <li> 8.1 <a href="/book/zh/v2/%e8%87%aa%e5%ae%9a%e4%b9%89-Git-%e9%85%8d%e7%bd%ae-Git">配置 Git</a> </li> <li> 8.2 <a href="/book/zh/v2/%e8%87%aa%e5%ae%9a%e4%b9%89-Git-Git-%e5%b1%9e%e6%80%a7">Git 属性</a> </li> <li> 8.3 <a href="/book/zh/v2/%e8%87%aa%e5%ae%9a%e4%b9%89-Git-Git-%e9%92%a9%e5%ad%90">Git 钩子</a> </li> <li> 8.4 <a href="/book/zh/v2/%e8%87%aa%e5%ae%9a%e4%b9%89-Git-%e4%bd%bf%e7%94%a8%e5%bc%ba%e5%88%b6%e7%ad%96%e7%95%a5%e7%9a%84%e4%b8%80%e4%b8%aa%e4%be%8b%e5%ad%90">使用强制策略的一个例子</a> </li> <li> 8.5 <a href="/book/zh/v2/%e8%87%aa%e5%ae%9a%e4%b9%89-Git-%e6%80%bb%e7%bb%93">总结</a> </li> </ol> </li> <li class='chapter'> <h2>9. <a href="/book/zh/v2/Git-%e4%b8%8e%e5%85%b6%e4%bb%96%e7%b3%bb%e7%bb%9f-%e4%bd%9c%e4%b8%ba%e5%ae%a2%e6%88%b7%e7%ab%af%e7%9a%84-Git">Git 与其他系统</a></h2> <ol> <li> 9.1 <a href="/book/zh/v2/Git-%e4%b8%8e%e5%85%b6%e4%bb%96%e7%b3%bb%e7%bb%9f-%e4%bd%9c%e4%b8%ba%e5%ae%a2%e6%88%b7%e7%ab%af%e7%9a%84-Git">作为客户端的 Git</a> </li> <li> 9.2 <a href="/book/zh/v2/Git-%e4%b8%8e%e5%85%b6%e4%bb%96%e7%b3%bb%e7%bb%9f-%e8%bf%81%e7%a7%bb%e5%88%b0-Git">迁移到 Git</a> </li> <li> 9.3 <a href="/book/zh/v2/Git-%e4%b8%8e%e5%85%b6%e4%bb%96%e7%b3%bb%e7%bb%9f-%e6%80%bb%e7%bb%93">总结</a> </li> </ol> </li> <li class='chapter'> <h2>10. <a href="/book/zh/v2/Git-%e5%86%85%e9%83%a8%e5%8e%9f%e7%90%86-%e5%ba%95%e5%b1%82%e5%91%bd%e4%bb%a4%e4%b8%8e%e4%b8%8a%e5%b1%82%e5%91%bd%e4%bb%a4">Git 内部原理</a></h2> <ol> <li> 10.1 <a href="/book/zh/v2/Git-%e5%86%85%e9%83%a8%e5%8e%9f%e7%90%86-%e5%ba%95%e5%b1%82%e5%91%bd%e4%bb%a4%e4%b8%8e%e4%b8%8a%e5%b1%82%e5%91%bd%e4%bb%a4">底层命令与上层命令</a> </li> <li> 10.2 <a href="/book/zh/v2/Git-%e5%86%85%e9%83%a8%e5%8e%9f%e7%90%86-Git-%e5%af%b9%e8%b1%a1">Git 对象</a> </li> <li> 10.3 <a href="/book/zh/v2/Git-%e5%86%85%e9%83%a8%e5%8e%9f%e7%90%86-Git-%e5%bc%95%e7%94%a8">Git 引用</a> </li> <li> 10.4 <a href="/book/zh/v2/Git-%e5%86%85%e9%83%a8%e5%8e%9f%e7%90%86-%e5%8c%85%e6%96%87%e4%bb%b6">包文件</a> </li> <li> 10.5 <a href="/book/zh/v2/Git-%e5%86%85%e9%83%a8%e5%8e%9f%e7%90%86-%e5%bc%95%e7%94%a8%e8%a7%84%e8%8c%83" class="active">引用规范</a> </li> <li> 10.6 <a href="/book/zh/v2/Git-%e5%86%85%e9%83%a8%e5%8e%9f%e7%90%86-%e4%bc%a0%e8%be%93%e5%8d%8f%e8%ae%ae">传输协议</a> </li> <li> 10.7 <a href="/book/zh/v2/Git-%e5%86%85%e9%83%a8%e5%8e%9f%e7%90%86-%e7%bb%b4%e6%8a%a4%e4%b8%8e%e6%95%b0%e6%8d%ae%e6%81%a2%e5%a4%8d">维护与数据恢复</a> </li> <li> 10.8 <a href="/book/zh/v2/Git-%e5%86%85%e9%83%a8%e5%8e%9f%e7%90%86-%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f">环境变量</a> </li> <li> 10.9 <a href="/book/zh/v2/Git-%e5%86%85%e9%83%a8%e5%8e%9f%e7%90%86-%e6%80%bb%e7%bb%93">总结</a> </li> </ol> </li> </ol> </div> <div class='column-right'> <ol class='book-toc'> <li class='chapter'> <h2>A1. <a href="/book/zh/v2/%e9%99%84%e5%bd%95-A:-%e5%9c%a8%e5%85%b6%e5%ae%83%e7%8e%af%e5%a2%83%e4%b8%ad%e4%bd%bf%e7%94%a8-Git-%e5%9b%be%e5%bd%a2%e7%95%8c%e9%9d%a2">附录 A: 在其它环境中使用 Git</a></h2> <ol> <li> A1.1 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-A:-%e5%9c%a8%e5%85%b6%e5%ae%83%e7%8e%af%e5%a2%83%e4%b8%ad%e4%bd%bf%e7%94%a8-Git-%e5%9b%be%e5%bd%a2%e7%95%8c%e9%9d%a2">图形界面</a> </li> <li> A1.2 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-A:-%e5%9c%a8%e5%85%b6%e5%ae%83%e7%8e%af%e5%a2%83%e4%b8%ad%e4%bd%bf%e7%94%a8-Git-Visual-Studio-%e4%b8%ad%e7%9a%84-Git">Visual Studio 中的 Git</a> </li> <li> A1.3 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-A:-%e5%9c%a8%e5%85%b6%e5%ae%83%e7%8e%af%e5%a2%83%e4%b8%ad%e4%bd%bf%e7%94%a8-Git-Visual-Studio-Code-%e4%b8%ad%e7%9a%84-Git">Visual Studio Code 中的 Git</a> </li> <li> A1.4 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-A:-%e5%9c%a8%e5%85%b6%e5%ae%83%e7%8e%af%e5%a2%83%e4%b8%ad%e4%bd%bf%e7%94%a8-Git-IntelliJ-/-PyCharm-/-WebStorm-/-PhpStorm-/-RubyMine-%e4%b8%ad%e7%9a%84-Git">IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine 中的 Git</a> </li> <li> A1.5 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-A:-%e5%9c%a8%e5%85%b6%e5%ae%83%e7%8e%af%e5%a2%83%e4%b8%ad%e4%bd%bf%e7%94%a8-Git-Sublime-Text-%e4%b8%ad%e7%9a%84-Git">Sublime Text 中的 Git</a> </li> <li> A1.6 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-A:-%e5%9c%a8%e5%85%b6%e5%ae%83%e7%8e%af%e5%a2%83%e4%b8%ad%e4%bd%bf%e7%94%a8-Git-Bash-%e4%b8%ad%e7%9a%84-Git">Bash 中的 Git</a> </li> <li> A1.7 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-A:-%e5%9c%a8%e5%85%b6%e5%ae%83%e7%8e%af%e5%a2%83%e4%b8%ad%e4%bd%bf%e7%94%a8-Git-Zsh-%e4%b8%ad%e7%9a%84-Git">Zsh 中的 Git</a> </li> <li> A1.8 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-A:-%e5%9c%a8%e5%85%b6%e5%ae%83%e7%8e%af%e5%a2%83%e4%b8%ad%e4%bd%bf%e7%94%a8-Git-Git-%e5%9c%a8-PowerShell-%e4%b8%ad%e4%bd%bf%e7%94%a8-Git">Git 在 PowerShell 中使用 Git</a> </li> <li> A1.9 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-A:-%e5%9c%a8%e5%85%b6%e5%ae%83%e7%8e%af%e5%a2%83%e4%b8%ad%e4%bd%bf%e7%94%a8-Git-%e6%80%bb%e7%bb%93">总结</a> </li> </ol> </li> <li class='chapter'> <h2>A2. <a href="/book/zh/v2/%e9%99%84%e5%bd%95-B:-%e5%9c%a8%e4%bd%a0%e7%9a%84%e5%ba%94%e7%94%a8%e4%b8%ad%e5%b5%8c%e5%85%a5-Git-%e5%91%bd%e4%bb%a4%e8%a1%8c-Git-%e6%96%b9%e5%bc%8f">附录 B: 在你的应用中嵌入 Git</a></h2> <ol> <li> A2.1 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-B:-%e5%9c%a8%e4%bd%a0%e7%9a%84%e5%ba%94%e7%94%a8%e4%b8%ad%e5%b5%8c%e5%85%a5-Git-%e5%91%bd%e4%bb%a4%e8%a1%8c-Git-%e6%96%b9%e5%bc%8f">命令行 Git 方式</a> </li> <li> A2.2 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-B:-%e5%9c%a8%e4%bd%a0%e7%9a%84%e5%ba%94%e7%94%a8%e4%b8%ad%e5%b5%8c%e5%85%a5-Git-Libgit2">Libgit2</a> </li> <li> A2.3 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-B:-%e5%9c%a8%e4%bd%a0%e7%9a%84%e5%ba%94%e7%94%a8%e4%b8%ad%e5%b5%8c%e5%85%a5-Git-JGit">JGit</a> </li> <li> A2.4 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-B:-%e5%9c%a8%e4%bd%a0%e7%9a%84%e5%ba%94%e7%94%a8%e4%b8%ad%e5%b5%8c%e5%85%a5-Git-go-git">go-git</a> </li> <li> A2.5 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-B:-%e5%9c%a8%e4%bd%a0%e7%9a%84%e5%ba%94%e7%94%a8%e4%b8%ad%e5%b5%8c%e5%85%a5-Git-Dulwich">Dulwich</a> </li> </ol> </li> <li class='chapter'> <h2>A3. <a href="/book/zh/v2/%e9%99%84%e5%bd%95-C:-Git-%e5%91%bd%e4%bb%a4-%e8%ae%be%e7%bd%ae%e4%b8%8e%e9%85%8d%e7%bd%ae">附录 C: Git 命令</a></h2> <ol> <li> A3.1 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-C:-Git-%e5%91%bd%e4%bb%a4-%e8%ae%be%e7%bd%ae%e4%b8%8e%e9%85%8d%e7%bd%ae">设置与配置</a> </li> <li> A3.2 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-C:-Git-%e5%91%bd%e4%bb%a4-%e8%8e%b7%e5%8f%96%e4%b8%8e%e5%88%9b%e5%bb%ba%e9%a1%b9%e7%9b%ae">获取与创建项目</a> </li> <li> A3.3 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-C:-Git-%e5%91%bd%e4%bb%a4-%e5%bf%ab%e7%85%a7%e5%9f%ba%e7%a1%80">快照基础</a> </li> <li> A3.4 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-C:-Git-%e5%91%bd%e4%bb%a4-%e5%88%86%e6%94%af%e4%b8%8e%e5%90%88%e5%b9%b6">分支与合并</a> </li> <li> A3.5 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-C:-Git-%e5%91%bd%e4%bb%a4-%e9%a1%b9%e7%9b%ae%e5%88%86%e4%ba%ab%e4%b8%8e%e6%9b%b4%e6%96%b0">项目分享与更新</a> </li> <li> A3.6 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-C:-Git-%e5%91%bd%e4%bb%a4-%e6%a3%80%e6%9f%a5%e4%b8%8e%e6%af%94%e8%be%83">检查与比较</a> </li> <li> A3.7 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-C:-Git-%e5%91%bd%e4%bb%a4-%e8%b0%83%e8%af%95">调试</a> </li> <li> A3.8 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-C:-Git-%e5%91%bd%e4%bb%a4-%e8%a1%a5%e4%b8%81">补丁</a> </li> <li> A3.9 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-C:-Git-%e5%91%bd%e4%bb%a4-%e9%82%ae%e4%bb%b6">邮件</a> </li> <li> A3.10 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-C:-Git-%e5%91%bd%e4%bb%a4-%e5%a4%96%e9%83%a8%e7%b3%bb%e7%bb%9f">外部系统</a> </li> <li> A3.11 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-C:-Git-%e5%91%bd%e4%bb%a4-%e7%ae%a1%e7%90%86">管理</a> </li> <li> A3.12 <a href="/book/zh/v2/%e9%99%84%e5%bd%95-C:-Git-%e5%91%bd%e4%bb%a4-%e5%ba%95%e5%b1%82%e5%91%bd%e4%bb%a4">底层命令</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>10.5 Git 内部原理 - 引用规范</h1> <div> <h2 id="_refspec">引用规范</h2> <div class="paragraph"> <p>纵观全书,我们已经使用过一些诸如远程分支到本地引用的简单映射方式,但这种映射可以更复杂。 假设你已经跟着前几节在本地创建了一个小的 Git 仓库,现在想要添加一个远程仓库:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git remote add origin https://github.com/schacon/simplegit-progit</code></pre> </div> </div> <div class="paragraph"> <p>运行上述命令会在你仓库中的 <code>.git/config</code> 文件中添加一个小节, 并在其中指定远程版本库的名称(<code>origin</code>)、URL 和一个用于获取操作的 <strong>引用规范(refspec)</strong>:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-ini" data-lang="ini">[remote "origin"] url = https://github.com/schacon/simplegit-progit fetch = +refs/heads/*:refs/remotes/origin/*</code></pre> </div> </div> <div class="paragraph"> <p>引用规范的格式由一个可选的 <code>+</code> 号和紧随其后的 <code><src>:<dst></code> 组成, 其中 <code><src></code> 是一个模式(pattern),代表远程版本库中的引用; <code><dst></code> 是本地跟踪的远程引用的位置。 <code>+</code> 号告诉 Git 即使在不能快进的情况下也要(强制)更新引用。</p> </div> <div class="paragraph"> <p>默认情况下,引用规范由 <code>git remote add origin</code> 命令自动生成, Git 获取服务器中 <code>refs/heads/</code> 下面的所有引用,并将它写入到本地的 <code>refs/remotes/origin/</code> 中。 所以,如果服务器上有一个 <code>master</code> 分支,你可以在本地通过下面任意一种方式来访问该分支上的提交记录:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git log origin/master $ git log remotes/origin/master $ git log refs/remotes/origin/master</code></pre> </div> </div> <div class="paragraph"> <p>上面的三个命令作用相同,因为 Git 会把它们都扩展成 <code>refs/remotes/origin/master</code>。</p> </div> <div class="paragraph"> <p>如果想让 Git 每次只拉取远程的 <code>master</code> 分支,而不是所有分支, 可以把(引用规范的)获取那一行修改为只引用该分支:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code>fetch = +refs/heads/master:refs/remotes/origin/master</code></pre> </div> </div> <div class="paragraph"> <p>这仅是针对该远程版本库的 <code>git fetch</code> 操作的默认引用规范。 如果有某些只希望被执行一次的操作,我们也可以在命令行指定引用规范。 若要将远程的 <code>master</code> 分支拉到本地的 <code>origin/mymaster</code> 分支,可以运行:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git fetch origin master:refs/remotes/origin/mymaster</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 fetch origin master:refs/remotes/origin/mymaster \ topic:refs/remotes/origin/topic From git@github.com:schacon/simplegit ! [rejected] master -> origin/mymaster (non fast forward) * [new branch] topic -> origin/topic</code></pre> </div> </div> <div class="paragraph"> <p>在这个例子中,对 <code>master</code> 分支的拉取操作被拒绝,因为它不是一个可以快进的引用。 我们可以通过在引用规范之前指定 <code>+</code> 号来覆盖该规则。</p> </div> <div class="paragraph"> <p>你也可以在配置文件中指定多个用于获取操作的引用规范。 如果想在每次从 <code>origin</code> 远程仓库获取时都包括 <code>master</code> 和 <code>experiment</code> 分支,添加如下两行:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-ini" data-lang="ini">[remote "origin"] url = https://github.com/schacon/simplegit-progit fetch = +refs/heads/master:refs/remotes/origin/master fetch = +refs/heads/experiment:refs/remotes/origin/experiment</code></pre> </div> </div> <div class="paragraph"> <p>自 Git 2.6.0 起可以在模式中使用部分通配符以匹配多个分支,所以这样是可以工作的:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-ini" data-lang="ini">fetch = +refs/heads/qa*:refs/remotes/origin/qa*</code></pre> </div> </div> <div class="paragraph"> <p>更棒的是,我们可以使用命名空间(或目录)来实现相同的目标,并且更具结构性。 假设你有一个 QA 团队,他们推送了一系列分支,同时你只想要获取 <code>master</code> 和 QA 团队的所有分支而不关心其他任何分支,那么可以使用如下配置:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-ini" data-lang="ini">[remote "origin"] url = https://github.com/schacon/simplegit-progit fetch = +refs/heads/master:refs/remotes/origin/master fetch = +refs/heads/qa/*:refs/remotes/origin/qa/*</code></pre> </div> </div> <div class="paragraph"> <p>如果项目的工作流很复杂,有 QA 团队推送分支、开发人员推送分支、集成团队推送并且在远程分支上展开协作,你就可以像这样(在本地)为这些分支创建各自的命名空间,非常方便。</p> </div> <div class="sect3"> <h3 id="_pushing_refspecs">引用规范推送</h3> <div class="paragraph"> <p>像上面这样从远程版本库获取已在命名空间中的引用当然很棒,但 QA 团队最初应该如何将他们的分支放入远程的 <code>qa/</code> 命名空间呢? 我们可以通过引用规范推送来完成这个任务。</p> </div> <div class="paragraph"> <p>如果 QA 团队想把他们的 <code>master</code> 分支推送到远程服务器的 <code>qa/master</code> 分支上,可以运行:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git push origin master:refs/heads/qa/master</code></pre> </div> </div> <div class="paragraph"> <p>如果他们希望 Git 每次运行 <code>git push origin</code> 时都像上面这样推送,可以在他们的配置文件中添加一条 <code>push</code> 值:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-ini" data-lang="ini">[remote "origin"] url = https://github.com/schacon/simplegit-progit fetch = +refs/heads/*:refs/remotes/origin/* push = refs/heads/master:refs/heads/qa/master</code></pre> </div> </div> <div class="paragraph"> <p>正如刚才所指出的,这会让 <code>git push origin</code> 默认把本地 <code>master</code> 分支推送到远程 <code>qa/master</code> 分支。</p> </div> <div class="admonitionblock note"> <table> <tr> <td class="icon"> <div class="title">Note</div> </td> <td class="content"> <div class="paragraph"> <p>你无法通过引用规范从一个仓库获取并推送到另一个仓库。 这样做的示例见 <a href="/book/zh/v2/ch00/_fetch_and_push_on_different_repositories">让你的 GitHub 公共仓库保持更新</a>。</p> </div> </td> </tr> </table> </div> </div> <div class="sect3"> <h3 id="_删除引用">删除引用</h3> <div class="paragraph"> <p>你还可以借助类似下面的命令通过引用规范从远程服务器上删除引用:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git push origin :topic</code></pre> </div> </div> <div class="paragraph"> <p>因为引用规范(的格式)是 <code><src>:<dst></code>,所以上述命令把 <code><src></code> 留空,意味着把远程版本库的 <code>topic</code> 分支定义为空值,也就是删除它。</p> </div> <div class="paragraph"> <p>或者你可以使用更新的语法(自 Git v1.7.0 以后可用):</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git push origin --delete topic</code></pre> </div> </div> </div> <div id="nav"><a href="/book/zh/v2/Git-内部原理-包文件">prev</a> | <a href="/book/zh/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>