CINXE.COM
Git - 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 - 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-Git-References">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-Git-Referanslar%c4%b1">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-JGit">български език</a>,</td></tr> <tr><td><a href="/book/de/v2/Git-Interna-Git-Referenzen">Deutsch</a>,</td></tr> <tr><td><a href="/book/es/v2/Los-entresijos-internos-de-Git-Referencias-Git">Español</a>,</td></tr> <tr><td><a href="/book/fr/v2/Les-tripes-de-Git-R%c3%a9f%c3%a9rences-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%e5%86%85%e5%81%b4-Git%e3%81%ae%e5%8f%82%e7%85%a7">日本語</a>,</td></tr> <tr><td><a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-Git-Refs">한국어</a>,</td></tr> <tr><td><a href="/book/nl/v2/Git-Binnenwerk-Git-Referenties">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%d1%81%d1%8b%d0%bb%d0%ba%d0%b8-%d0%b2-Git">Русский</a>,</td></tr> <tr><td><a href="/book/sl/v2/Notranjost-Gita-Reference-Git">Slovenščina</a>,</td></tr> <tr><td><a href="/book/tl/v2/Mga-Panloob-ng-GIT-Git-References">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%9f%d0%be%d1%81%d0%b8%d0%bb%d0%b0%d0%bd%d0%bd%d1%8f-Git">Українська</a></td></tr> <tr><td><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">简体中文</a>,</td></tr> </table> </p> <p> Partial translations available in <table> <tr><td><a href="/book/cs/v2/Git-Internals-Git-References">Č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-Git-References">Македонски</a>,</td></tr> <tr><td><a href="/book/pl/v2/Mechanizmy-wewn%c4%99trzne-w-Git-Referencje-w-Git">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%93%d0%b8%d1%82-%d1%80%d0%b5%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b5">Српски</a>,</td></tr> <tr><td><a href="/book/uz/v2/Git-Internals-Git-References">Ўзбекча</a>,</td></tr> <tr><td><a href="/book/zh-tw/v2/Git-Internals-Git-References">繁體中文</a>,</td></tr> </table> </p> <p> Translations started for <table> <tr><td><a href="/book/be/v2/Git-Internals-Git-References">Беларуская</a>,</td></tr> <tr><td><a href="/book/fa/v2/Git-Internals-Git-References" dir="rtl">فارسی</a>,</td></tr> <tr><td><a href="/book/id/v2/Git-Internals-Git-References">Indonesian</a>,</td></tr> <tr><td><a href="/book/it/v2/Git-Internals-Git-References">Italiano</a>,</td></tr> <tr><td><a href="/book/ms/v2/Git-Internals-Git-References">Bahasa Melayu</a>,</td></tr> <tr><td><a href="/book/pt-br/v2/Funcionamento-Interno-do-Git-Refer%c3%aancias-do-Git">Português (Brasil)</a>,</td></tr> <tr><td><a href="/book/pt-pt/v2/Internos-do-Git-Git-References">Português (Portugal)</a>,</td></tr> <tr><td><a href="/book/sv/v2/Git-Internals-Git-References">Svenska</a>,</td></tr> <tr><td><a href="/book/tr/v2/Dahili-Git-%c3%96geleri-Git-Referanslar%c4%b1">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" class="active">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">引用规范</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.3 Git 内部原理 - Git 引用</h1> <div> <h2 id="_git_refs">Git 引用</h2> <div class="paragraph"> <p>如果你对仓库中从一个提交(比如 <code>1a410e</code>)开始往前的历史感兴趣,那么可以运行 <code>git log 1a410e</code> 这样的命令来显示历史,不过你需要记得 <code>1a410e</code> 是你查看历史的起点提交。 如果我们有一个文件来保存 SHA-1 值,而该文件有一个简单的名字, 然后用这个名字指针来替代原始的 SHA-1 值的话会更加简单。</p> </div> <div class="paragraph"> <p>在 Git 中,这种简单的名字被称为“引用(references,或简写为 refs)”。 你可以在 <code>.git/refs</code> 目录下找到这类含有 SHA-1 值的文件。 在目前的项目中,这个目录没有包含任何文件,但它包含了一个简单的目录结构:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ find .git/refs .git/refs .git/refs/heads .git/refs/tags $ find .git/refs -type f</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">$ echo 1a410efbd13591db07496601ebc7a059dd55cfe9 > .git/refs/heads/master</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 log --pretty=oneline master 1a410efbd13591db07496601ebc7a059dd55cfe9 third commit cac0cab538b970a37ea1e769cbbde608743bc96d second commit fdf4fc3344e67ab068f836878b6c4951e3b15f3d first commit</code></pre> </div> </div> <div class="paragraph"> <p>我们不提倡直接编辑引用文件。 如果想更新某个引用,Git 提供了一个更加安全的命令 <code>update-ref</code> 来完成此事:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git update-ref refs/heads/master 1a410efbd13591db07496601ebc7a059dd55cfe9</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 update-ref refs/heads/test cac0ca</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 log --pretty=oneline test cac0cab538b970a37ea1e769cbbde608743bc96d second commit fdf4fc3344e67ab068f836878b6c4951e3b15f3d first commit</code></pre> </div> </div> <div class="paragraph"> <p>至此,我们的 Git 数据库从概念上看起来像这样:</p> </div> <div class="imageblock"> <div class="content"> <img src="/book/zh/v2/images/data-model-4.png" alt="包含分支引用的 Git 目录对象。"> </div> <div class="title">Figure 151. 包含分支引用的 Git 目录对象。</div> </div> <div class="paragraph"> <p>当运行类似于 <code>git branch <branch></code> 这样的命令时,Git 实际上会运行 <code>update-ref</code> 命令, 取得当前所在分支最新提交对应的 SHA-1 值,并将其加入你想要创建的任何新引用中。</p> </div> <div class="sect3"> <h3 id="ref_the_ref">HEAD 引用</h3> <div class="paragraph"> <p>现在的问题是,当你执行 <code>git branch <branch></code> 时,Git 如何知道最新提交的 SHA-1 值呢? 答案是 HEAD 文件。</p> </div> <div class="paragraph"> <p>HEAD 文件通常是一个符号引用(symbolic reference),指向目前所在的分支。 所谓符号引用,表示它是一个指向其他引用的指针。</p> </div> <div class="paragraph"> <p>然而在某些罕见的情况下,HEAD 文件可能会包含一个 git 对象的 SHA-1 值。 当你在检出一个标签、提交或远程分支,让你的仓库变成 <a href="https://git-scm.com/docs/git-checkout#_detached_head">“分离 HEAD”</a>状态时,就会出现这种情况。</p> </div> <div class="paragraph"> <p>如果查看 HEAD 文件的内容,通常我们看到类似这样的内容:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ cat .git/HEAD ref: refs/heads/master</code></pre> </div> </div> <div class="paragraph"> <p>如果执行 <code>git checkout test</code>,Git 会像这样更新 HEAD 文件:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ cat .git/HEAD ref: refs/heads/test</code></pre> </div> </div> <div class="paragraph"> <p>当我们执行 <code>git commit</code> 时,该命令会创建一个提交对象,并用 HEAD 文件中那个引用所指向的 SHA-1 值设置其父提交字段。</p> </div> <div class="paragraph"> <p>你也可以手动编辑该文件,然而同样存在一个更安全的命令来完成此事:<code>git symbolic-ref</code>。 可以借助此命令来查看 HEAD 引用对应的值:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git symbolic-ref HEAD refs/heads/master</code></pre> </div> </div> <div class="paragraph"> <p>同样可以设置 HEAD 引用的值:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git symbolic-ref HEAD refs/heads/test $ cat .git/HEAD ref: refs/heads/test</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 symbolic-ref HEAD test fatal: Refusing to point HEAD outside of refs/</code></pre> </div> </div> </div> <div class="sect3"> <h3 id="_标签引用">标签引用</h3> <div class="paragraph"> <p>前面我们刚讨论过 Git 的三种主要的对象类型(<strong>数据对象</strong>、<strong>树对象</strong> 和 <strong>提交对象</strong> ),然而实际上还有第四种。 <strong>标签对象(tag object)</strong> 非常类似于一个提交对象——它包含一个标签创建者信息、一个日期、一段注释信息,以及一个指针。 主要的区别在于,标签对象通常指向一个提交对象,而不是一个树对象。 它像是一个永不移动的分支引用——永远指向同一个提交对象,只不过给这个提交对象加上一个更友好的名字罢了。</p> </div> <div class="paragraph"> <p>正如 <a href="/book/zh/v2/ch00/ch02-git-basics-chapter">Git 基础</a> 中所讨论的那样,存在两种类型的标签:附注标签和轻量标签。 可以像这样创建一个轻量标签:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git update-ref refs/tags/v1.0 cac0cab538b970a37ea1e769cbbde608743bc96d</code></pre> </div> </div> <div class="paragraph"> <p>这就是轻量标签的全部内容——一个固定的引用。 然而,一个附注标签则更复杂一些。 若要创建一个附注标签,Git 会创建一个标签对象,并记录一个引用来指向该标签对象,而不是直接指向提交对象。 可以通过创建一个附注标签来验证这个过程(使用 <code>-a</code> 选项):</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git tag -a v1.1 1a410efbd13591db07496601ebc7a059dd55cfe9 -m 'test tag'</code></pre> </div> </div> <div class="paragraph"> <p>下面是上述过程所建标签对象的 SHA-1 值:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ cat .git/refs/tags/v1.1 9585191f37f7b0fb9444f35a9bf50de191beadc2</code></pre> </div> </div> <div class="paragraph"> <p>现在对该 SHA-1 值运行 <code>git cat-file -p</code> 命令:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git cat-file -p 9585191f37f7b0fb9444f35a9bf50de191beadc2 object 1a410efbd13591db07496601ebc7a059dd55cfe9 type commit tag v1.1 tagger Scott Chacon <schacon@gmail.com> Sat May 23 16:48:58 2009 -0700 test tag</code></pre> </div> </div> <div class="paragraph"> <p>我们注意到,object 条目指向我们打了标签的那个提交对象的 SHA-1 值。 另外要注意的是,标签对象并非必须指向某个提交对象;你可以对任意类型的 Git 对象打标签。 例如,在 Git 源码中,项目维护者将他们的 GPG 公钥添加为一个数据对象,然后对这个对象打了一个标签。 可以克隆一个 Git 版本库,然后通过执行下面的命令来在这个版本库中查看上述公钥:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git cat-file blob junio-gpg-pub</code></pre> </div> </div> <div class="paragraph"> <p>Linux 内核版本库同样有一个不指向提交对象的标签对象——首个被创建的标签对象所指向的是最初被引入版本库的那份内核源码所对应的树对象。</p> </div> </div> <div class="sect3"> <h3 id="_远程引用">远程引用</h3> <div class="paragraph"> <p>我们将看到的第三种引用类型是远程引用(remote reference)。 如果你添加了一个远程版本库并对其执行过推送操作,Git 会记录下最近一次推送操作时每一个分支所对应的值,并保存在 <code>refs/remotes</code> 目录下。 例如,你可以添加一个叫做 <code>origin</code> 的远程版本库,然后把 <code>master</code> 分支推送上去:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git remote add origin git@github.com:schacon/simplegit-progit.git $ git push origin master Counting objects: 11, done. Compressing objects: 100% (5/5), done. Writing objects: 100% (7/7), 716 bytes, done. Total 7 (delta 2), reused 4 (delta 1) To git@github.com:schacon/simplegit-progit.git a11bef0..ca82a6d master -> master</code></pre> </div> </div> <div class="paragraph"> <p>此时,如果查看 <code>refs/remotes/origin/master</code> 文件,可以发现 <code>origin</code> 远程版本库的 <code>master</code> 分支所对应的 SHA-1 值,就是最近一次与服务器通信时本地 <code>master</code> 分支所对应的 SHA-1 值:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ cat .git/refs/remotes/origin/master ca82a6dff817ec66f44342007202690a93763949</code></pre> </div> </div> <div class="paragraph"> <p>远程引用和分支(位于 <code>refs/heads</code> 目录下的引用)之间最主要的区别在于,远程引用是只读的。 虽然可以 <code>git checkout</code> 到某个远程引用,但是 Git 并不会将 HEAD 引用指向该远程引用。因此,你永远不能通过 <code>commit</code> 命令来更新远程引用。 Git 将这些远程引用作为记录远程服务器上各分支最后已知位置状态的书签来管理。</p> </div> </div> <div id="nav"><a href="/book/zh/v2/Git-内部原理-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>