mirror of
https://github.com/Dichgrem/Blog.git
synced 2025-12-17 05:51:58 -05:00
deploy: a14f07559d
This commit is contained in:
714
about-git/index.html
Normal file
714
about-git/index.html
Normal file
@@ -0,0 +1,714 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<title>Dich's Blog</title>
|
||||
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="robots" content="noodp"/>
|
||||
<!-- 字体预加载 - 减少布局偏移 CLS -->
|
||||
<link rel="preload" href="https://blog.dich.bid/fonts/hack-regular.woff2?sha=3114f1256" as="font" type="font/woff2" crossorigin>
|
||||
<link rel="preload" href="https://blog.dich.bid/fonts/hack-bold.woff2?sha=3114f1256" as="font" type="font/woff2" crossorigin>
|
||||
<link rel="preload" href="https://blog.dich.bid/fonts/hack-italic.woff2?sha=3114f1256" as="font" type="font/woff2" crossorigin>
|
||||
<link rel="preload" href="https://blog.dich.bid/fonts/hack-bolditalic.woff2?sha=3114f1256" as="font" type="font/woff2" crossorigin>
|
||||
|
||||
<link rel="stylesheet" href="https://blog.dich.bid/style.css">
|
||||
<link rel="stylesheet" href="https://blog.dich.bid/color/blue.css">
|
||||
|
||||
<link rel="stylesheet" href="https://blog.dich.bid/font-hack-subset.css">
|
||||
|
||||
<meta name="description" content="">
|
||||
|
||||
<meta property="og:description" content="">
|
||||
<meta property="og:title" content="Dich's Blog">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://blog.dich.bid/about-git/">
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:description" content="">
|
||||
<meta name="twitter:title" content="Dich's Blog">
|
||||
<meta property="twitter:domain" content="blog.dich.bid">
|
||||
<meta property="twitter:url" content="https://blog.dich.bid/about-git/">
|
||||
|
||||
<link rel="alternate" type="application/atom+xml" title="Dich's Blog Atom Feed" href="https://blog.dich.bid/atom.xml" />
|
||||
<link rel="shortcut icon" type="image/webp" href="/dich.webp">
|
||||
|
||||
<!-- ✅ Added center alignment styles -->
|
||||
<style>
|
||||
.footer {
|
||||
text-align: center;
|
||||
padding: 1rem 0;
|
||||
}
|
||||
|
||||
.footer__inner {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.copyright {
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body class="">
|
||||
<div class="container">
|
||||
|
||||
<header class="header">
|
||||
<div class="header__inner">
|
||||
<div class="header__logo">
|
||||
|
||||
<a href="https://blog.dich.bid" style="text-decoration: none;">
|
||||
<div class="logo">
|
||||
|
||||
Dich's Blog
|
||||
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<nav class="menu">
|
||||
<ul class="menu__inner">
|
||||
<li><a href="https://blog.dich.bid">Blog</a></li>
|
||||
|
||||
<li><a href="https://blog.dich.bid/archive">Archive</a></li>
|
||||
|
||||
<li><a href="https://blog.dich.bid/weekly">Weekly</a></li>
|
||||
|
||||
<li><a href="https://blog.dich.bid/tags">Tags</a></li>
|
||||
|
||||
<li><a href="https://blog.dich.bid/search">Search</a></li>
|
||||
|
||||
<li><a href="https://blog.dich.bid/links">Links</a></li>
|
||||
|
||||
<li><a href="https://blog.dich.bid/atom.xml">Rss</a></li>
|
||||
|
||||
<li class="active"><a href="https://blog.dich.bid/about">About me</a></li>
|
||||
|
||||
<li><a href="https://github.com/Dichgrem" target="_blank" rel="noopener noreferrer">My github</a></li>
|
||||
|
||||
<li><a href="https://github.com/getzola/zola" target="_blank" rel="noopener noreferrer">Zola frame</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
</header>
|
||||
|
||||
|
||||
<div class="content">
|
||||
|
||||
<div class="post" data-pagefind-body>
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/about-git/">乱七八糟:Git使用简明手册</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2023-12-15
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 Git,作为现代软件开发中不可或缺的版本控制工具,常常让初学者感到困惑。本文旨在介绍 Git 的全流程安装和基本使用,希望能够帮助新手更轻松地理解和掌握 Git 的基本概念和操作。</p>
|
||||
<span id="continue-reading"></span><h2 id="an-zhuang-git">安装git</h2>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Windows:<a href="https://git-scm.com/download/">Git-download</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Archlinux:<code>sudo pacman -S git</code></p>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="yuan-li">原理</h2>
|
||||
<p>一个Git仓库的目录里面包括<code>工作目录</code>(即我们要追踪的代码)以及<code>.git</code>目录(Git 在这里存储自己的数据)。Git 维护了三棵“树”:第一个是你的 <code>工作目录</code>,它持有实际文件;第二个是 <code>暂存区(Index)</code>,它像个缓存区域,临时保存你的改动;最后是 <code>HEAD</code>,它指向你最后一次提交的结果。</p>
|
||||
<p><img src="http://marklodato.github.io/visual-git-guide/basic-usage.svg.png" alt="git-tree" /></p>
|
||||
<h2 id="chuang-jian-xin-cang-ku">创建新仓库</h2>
|
||||
<p>首先我们需要得到一个Git仓库,一般有两种方法:</p>
|
||||
<ul>
|
||||
<li>在本地初始化之后连接到远程;</li>
|
||||
<li>在远程创建后”下载“到本地。</li>
|
||||
</ul>
|
||||
<p><strong>方法一</strong>
|
||||
创建新文件夹,在你的项目目录中运行以下命令:</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> init</span><span style="color:#ffb964;"> --initial-branch</span><span>=main
|
||||
</span></code></pre>
|
||||
<p>这里设置默认仓库主分支名称为 main,避免因为 main/master 名称不同导致的推送问题。</p>
|
||||
<blockquote>
|
||||
<p>Git目前默认的主分支为 master,和 github 默认分支 main 不同,这使得默认配置下 git 往往连接失败。除了创建的时候设定外还可以通过以下方法改变默认分支。</p>
|
||||
</blockquote>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> --global</span><span> init.defaultBranch main //将默认分支修改成main
|
||||
</span></code></pre>
|
||||
<p><strong>方法二</strong></p>
|
||||
<p>克隆远端服务器上的仓库:</p>
|
||||
<ul>
|
||||
<li>HTTPS方法:<code>git clone https://github.com/Dichgrem/script.git</code></li>
|
||||
<li>或者使用SSH方法:<code>git clone git@github.com:Dichgrem/script.git</code></li>
|
||||
</ul>
|
||||
<blockquote>
|
||||
<p>建议使用SSH方法,如果你使用HTTPS方法,则提交代码时需要手动输入用户名/密码,使用SSH方法则只需要在<code>~/.ssh/config</code>中配置即可。</p>
|
||||
</blockquote>
|
||||
<h2 id="pei-zhi">配置</h2>
|
||||
<p>Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。</p>
|
||||
<ul>
|
||||
<li>显示当前的Git配置</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> --list
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>编辑Git配置文件</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> -e </span><span style="color:#8fbfdc;">[</span><span>--global</span><span style="color:#8fbfdc;">]
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>设置提交代码时的用户信息</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> config </span><span style="color:#8fbfdc;">[</span><span>--global</span><span style="color:#8fbfdc;">]</span><span> user.name </span><span style="color:#556633;">"</span><span style="color:#99ad6a;">[name]</span><span style="color:#556633;">"
|
||||
</span><span style="color:#ffb964;">git</span><span> config </span><span style="color:#8fbfdc;">[</span><span>--global</span><span style="color:#8fbfdc;">]</span><span> user.email </span><span style="color:#556633;">"</span><span style="color:#99ad6a;">[email address]</span><span style="color:#556633;">"
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>设置大小写敏感(windows不区分大小写的解决办法)</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> config core.ignorecase false
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>配置git默认使用的编辑器</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> --global</span><span> core.editor </span><span style="color:#556633;">"</span><span style="color:#99ad6a;">nvim</span><span style="color:#556633;">"
|
||||
</span></code></pre>
|
||||
<h2 id="lian-jie-yuan-cheng-cang-ku">连接远程仓库</h2>
|
||||
<p>连接到远程仓库并推送需要证明你有权写入仓库。早期Github可以使用密码认证,现在则使用密钥认证。</p>
|
||||
<ul>
|
||||
<li>生成密钥:</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">ssh-keygen -t</span><span> rsa</span><span style="color:#ffb964;"> -b</span><span> 4096</span><span style="color:#ffb964;"> -C </span><span style="color:#556633;">"</span><span style="color:#99ad6a;">your_email@example.com</span><span style="color:#556633;">"
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>
|
||||
<p>生成的文件位于<code>~/.ssh/config</code>路径下,带.pub后缀的文件为公钥,不带.pub后缀的为私钥,使用<code>cat ~/.ssh/id_rsa.pub</code>将公钥添加到github/gitee的设置-SSH中。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>随后使用 <code>ssh-add</code> 命令将生成的密钥添加到 SSH 代理中。</p>
|
||||
</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">ssh-add ~</span><span>/.ssh/github_key
|
||||
</span><span style="color:#ffb964;">ssh-add ~</span><span>/.ssh/gitee_key
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>在 <code>~/.ssh/config</code> 文件中配置不同的主机别名以及相应的密钥文件。编辑该文件并添加内容,例如:</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># GitHub repository 1
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">Host</span><span> github1
|
||||
</span><span>
|
||||
</span><span> </span><span style="color:#ffb964;">HostName</span><span> github.com
|
||||
</span><span>
|
||||
</span><span> </span><span style="color:#ffb964;">User</span><span> git
|
||||
</span><span>
|
||||
</span><span> </span><span style="color:#ffb964;">IdentityFile ~</span><span>/.ssh/github_key
|
||||
</span><span>
|
||||
</span><span style="color:#888888;"># GitHub repository 2
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">Host</span><span> github2
|
||||
</span><span>
|
||||
</span><span> </span><span style="color:#ffb964;">HostName</span><span> gitee.com
|
||||
</span><span>
|
||||
</span><span> </span><span style="color:#ffb964;">User</span><span> git
|
||||
</span><span>
|
||||
</span><span> </span><span style="color:#ffb964;">IdentityFile ~</span><span>/.ssh/gitee_key
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>连接到github:</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">ssh -T</span><span> git@github.com
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>添加远程仓库:</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> remote add origin <remote_repository_url>
|
||||
</span><span>
|
||||
</span><span style="color:#888888;"># 例如:git remote add origin git@github.com:Dichgrem/dichos.git
|
||||
</span></code></pre>
|
||||
<blockquote>
|
||||
<p>如果你运行<code>git remote -v</code>发现URL为HTTP格式则可以用下面的命令改为Git格式:</p>
|
||||
</blockquote>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># 例如:git remote set-url origin git@github.com:Dichgrem/dichos.git
|
||||
</span></code></pre>
|
||||
<h2 id="chuang-jian-fen-zhi">创建分支</h2>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> branch main
|
||||
</span></code></pre>
|
||||
<p>这将创建一个名为 main 的分支。</p>
|
||||
<ul>
|
||||
<li>删除分支</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> -d</span><span> master
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>使用大写强制删除</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> -D</span><span> master
|
||||
</span></code></pre>
|
||||
<h2 id="tian-jia-he-ti-jiao">添加和提交</h2>
|
||||
<p>你可以提出更改(把它们添加到暂存区),使用如下命令:</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> add <filename>
|
||||
</span><span style="color:#ffb964;">git</span><span> add *
|
||||
</span></code></pre>
|
||||
<p>这是 git 基本工作流程的第一步;使用如下命令以实际提交改动:</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> commit</span><span style="color:#ffb964;"> -m </span><span style="color:#556633;">"</span><span style="color:#99ad6a;">代码提交信息</span><span style="color:#556633;">"
|
||||
</span><span style="color:#888888;"># 例如:git commit -m "Initial commit"
|
||||
</span></code></pre>
|
||||
<p>现在,你的改动已经提交到了 <strong>HEAD</strong>,但是还没到你的远端仓库。</p>
|
||||
<ul>
|
||||
<li>添加指定文件到暂存区</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> add </span><span style="color:#8fbfdc;">[</span><span>file1</span><span style="color:#8fbfdc;">] [</span><span>file2</span><span style="color:#8fbfdc;">]</span><span> ...
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>添加指定目录到暂存区,包括子目录</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> add </span><span style="color:#8fbfdc;">[</span><span>dir</span><span style="color:#8fbfdc;">]
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>添加当前目录的所有文件到暂存区</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> add .
|
||||
</span></code></pre>
|
||||
<p>添加每个变化前,都会要求确认</p>
|
||||
<ul>
|
||||
<li>对于同一个文件的多处变化,可以实现分次提交</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> add</span><span style="color:#ffb964;"> -p
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>删除工作区文件,并且将这次删除放入暂存区</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> rm </span><span style="color:#8fbfdc;">[</span><span>file1</span><span style="color:#8fbfdc;">] [</span><span>file2</span><span style="color:#8fbfdc;">]</span><span> ...
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>停止追踪指定文件,但该文件会保留在工作区</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> rm</span><span style="color:#ffb964;"> --cached </span><span style="color:#8fbfdc;">[</span><span>file</span><span style="color:#8fbfdc;">]
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>改名文件,并且将这个改名放入暂存区</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> mv </span><span style="color:#8fbfdc;">[</span><span>file-original</span><span style="color:#8fbfdc;">] [</span><span>file-renamed</span><span style="color:#8fbfdc;">]
|
||||
</span></code></pre>
|
||||
<h2 id="tui-song-gai-dong">推送改动</h2>
|
||||
<p>你的改动现在已经在本地仓库的 <strong>HEAD</strong> 中了。执行如下命令以将这些改动提交到远端仓库:</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> push origin main
|
||||
</span></code></pre>
|
||||
<p>可以把 <strong>main</strong> 换成你想要推送的任何分支,如<strong>master</strong>或者<strong>test</strong></p>
|
||||
<p>如果你的远程仓库是最新的,可以使用以下命令更新本地仓库:</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> pull
|
||||
</span></code></pre>
|
||||
<blockquote>
|
||||
<p>Verified</p>
|
||||
</blockquote>
|
||||
<p>在 GitHub 的 commit 历史中看到的 “Verified” 标记,表示该提交是经过 签名验证(signed commit) 的,也就是 GitHub 能确认这个 commit 的确是由声明的提交者(你)签名并发布的。可以通过GPG或者SSH配置:</p>
|
||||
<ul>
|
||||
<li>GPG方式</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> pacman</span><span style="color:#ffb964;"> -S</span><span> gnupg //安装 GPG
|
||||
</span><span style="color:#ffb964;">gpg --full-generate-key</span><span> //生成 GPG 密钥
|
||||
</span><span style="color:#ffb964;">gpg --list-secret-keys --keyid-format</span><span>=long //查看你生成的密钥 ID
|
||||
</span><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> --global</span><span> user.signingkey ABCDEF1234567890 //让 Git 使用该密钥签名
|
||||
</span><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> --global</span><span> commit.gpgsign true //启用自动签名所有提交
|
||||
</span><span style="color:#ffb964;">gpg --armor --export</span><span> ABCDEF1234567890 //导出公钥并添加到 GitHub
|
||||
</span></code></pre>
|
||||
<p>然后前往<code>GitHub → Settings → SSH and GPG keys → New GPG key</code>粘贴并保存。</p>
|
||||
<ul>
|
||||
<li>SSH方式</li>
|
||||
</ul>
|
||||
<p>可以用你平时登录 GitHub 的同一个 SSH 密钥:</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> --global</span><span> gpg.format ssh //让 Git 使用 SSH 格式签名
|
||||
</span><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> --global</span><span> user.signingkey </span><span style="color:#ffb964;">~</span><span>/.ssh/Github.pub //指定使用的 SSH 公钥
|
||||
</span><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> --global</span><span> commit.gpgsign true //表示自动签名所有提交
|
||||
</span></code></pre>
|
||||
<p>然后前往<code>Settings → SSH and GPG keys → New SSH key → Signing key</code>粘贴并保存。</p>
|
||||
<ul>
|
||||
<li>本地查看</li>
|
||||
</ul>
|
||||
<p>首先创建这个文件:</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">mkdir -p ~</span><span>/.ssh
|
||||
</span><span style="color:#ffb964;">nano ~</span><span>/.ssh/allowed_signers
|
||||
</span></code></pre>
|
||||
<p>写入你的 <code>test@mail.com ssh-ed25519 AAAABBBBBBBBBBBBBBBBxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</code>并保存。
|
||||
随后配置Git信任该文件:</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> --global</span><span> gpg.ssh.allowedSignersFile </span><span style="color:#ffb964;">~</span><span>/.ssh/allowed_signers
|
||||
</span></code></pre>
|
||||
<p>随后使用<code>git log --show-signature</code>即可查看本地log中的</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">Good </span><span style="color:#556633;">"</span><span style="color:#99ad6a;">git</span><span style="color:#556633;">"</span><span> signature for test@mail.com with ED25519 key SHA256:ssh-ed25519 AAAABBBBBBBBBBBBBBBBBBBBB
|
||||
</span></code></pre>
|
||||
<h2 id="he-bing-fen-zhi">合并分支</h2>
|
||||
<p>分支是用来将特性开发绝缘开来的。比如你在本地的test分支新增了一个功能,想要合并到主分支中。</p>
|
||||
<p>创建一个叫做“test”的分支,并切换过去:</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> checkout</span><span style="color:#ffb964;"> -b</span><span> test
|
||||
</span></code></pre>
|
||||
<p>新增某些功能后切换回主分支:</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> checkout master
|
||||
</span></code></pre>
|
||||
<p>在主分支上执行合并操作,将 test 分支的改动合并到主分支:</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> merge test
|
||||
</span></code></pre>
|
||||
<p>推送完成后可以把新建的分支删掉:</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> -d</span><span> test
|
||||
</span></code></pre>
|
||||
<h3 id="fen-zhi-chang-yong-cao-zuo">分支常用操作</h3>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">-</span><span> 列出所有本地分支
|
||||
</span><span style="color:#ffb964;">git</span><span> branch
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> 列出所有远程分支
|
||||
</span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> -r
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> 列出所有本地分支和远程分支
|
||||
</span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> -a
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> 列出所有本地分支,并展示没有分支最后一次提交的信息
|
||||
</span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> -v
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> 列出所有本地分支,并展示没有分支最后一次提交的信息和远程分支的追踪情况
|
||||
</span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> -vv
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> 列出所有已经合并到当前分支的分支
|
||||
</span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> --merged
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> 列出所有还没有合并到当前分支的分支
|
||||
</span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> --no-merged
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> 新建一个分支,但依然停留在当前分支
|
||||
</span><span style="color:#ffb964;">git</span><span> branch </span><span style="color:#8fbfdc;">[</span><span>branch-name</span><span style="color:#8fbfdc;">]
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> 新建一个分支,并切换到该分支
|
||||
</span><span style="color:#ffb964;">git</span><span> checkout</span><span style="color:#ffb964;"> -b </span><span style="color:#8fbfdc;">[</span><span>branch</span><span style="color:#8fbfdc;">]
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> 新建一个与远程分支同名的分支,并切换到该分支
|
||||
</span><span style="color:#ffb964;">git</span><span> checkout</span><span style="color:#ffb964;"> --track </span><span style="color:#8fbfdc;">[</span><span>branch-name</span><span style="color:#8fbfdc;">]
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> 新建一个分支,指向指定commit
|
||||
</span><span style="color:#ffb964;">git</span><span> branch </span><span style="color:#8fbfdc;">[</span><span>branch</span><span style="color:#8fbfdc;">] [</span><span>commit</span><span style="color:#8fbfdc;">]
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> 新建一个分支,与指定的远程分支建立追踪关系
|
||||
</span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> --track </span><span style="color:#8fbfdc;">[</span><span>branch</span><span style="color:#8fbfdc;">] [</span><span>remote-branch</span><span style="color:#8fbfdc;">]
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> 切换到指定分支,并更新工作区
|
||||
</span><span style="color:#ffb964;">git</span><span> checkout </span><span style="color:#8fbfdc;">[</span><span>branch-name</span><span style="color:#8fbfdc;">]
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> 切换到上一个分支
|
||||
</span><span style="color:#ffb964;">git</span><span> checkout -
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> 建立追踪关系,在现有分支与指定的远程分支之间
|
||||
</span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> --set-upstream-to</span><span>=</span><span style="color:#8fbfdc;">[</span><span>remote-branch</span><span style="color:#8fbfdc;">]
|
||||
</span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> --set-upstream </span><span style="color:#8fbfdc;">[</span><span>branch</span><span style="color:#8fbfdc;">] [</span><span>remote-branch</span><span style="color:#8fbfdc;">]</span><span> - 已被弃用
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> 合并指定分支到当前分支
|
||||
</span><span style="color:#ffb964;">git</span><span> merge </span><span style="color:#8fbfdc;">[</span><span>branch</span><span style="color:#8fbfdc;">]
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> 中断此次合并(你可能不想处理冲突)
|
||||
</span><span style="color:#ffb964;">git</span><span> merge</span><span style="color:#ffb964;"> --abort
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> 选择一个commit,合并进当前分支
|
||||
</span><span style="color:#ffb964;">git</span><span> cherry-pick </span><span style="color:#8fbfdc;">[</span><span>commit</span><span style="color:#8fbfdc;">]
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> 删除分支
|
||||
</span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> -d </span><span style="color:#8fbfdc;">[</span><span>branch-name</span><span style="color:#8fbfdc;">]
|
||||
</span><span>
|
||||
</span><span style="color:#888888;">#新增远程分支 远程分支需先在本地创建,再进行推送
|
||||
</span><span style="color:#ffb964;">git</span><span> push origin </span><span style="color:#8fbfdc;">[</span><span>branch-name</span><span style="color:#8fbfdc;">]
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> 删除远程分支
|
||||
</span><span style="color:#ffb964;">git</span><span> push origin</span><span style="color:#ffb964;"> --delete </span><span style="color:#8fbfdc;">[</span><span>branch-name</span><span style="color:#8fbfdc;">]
|
||||
</span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> -dr </span><span style="color:#8fbfdc;">[</span><span>remote/branch</span><span style="color:#8fbfdc;">]
|
||||
</span></code></pre>
|
||||
<h2 id="biao-qian">标签</h2>
|
||||
<p>Git 的 tag 功能主要用于<code>给仓库历史中的某个特定提交打上“标签”</code>,通常用于标记版本发布点(例如 v1.0、v2.0 等),以<code>便于后续的版本定位、回溯和发布管理</code>。</p>
|
||||
<h3 id="biao-qian-lei-xing">标签类型</h3>
|
||||
<p>Git 提供两种类型的标签:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>附注标签(Annotated Tag)会创建成一个完整的 Git 对象,存储打标签者的名字、邮箱、日期和标签说明,还可采用 GPG 进行签名。推荐用于正式发布,因为包含更多元数据和安全信息。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>轻量标签(Lightweight Tag)实际上只是对某个提交的引用,不保存额外信息,类似一个固定的分支。适用于临时标记或非正式用途。</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="chuang-jian-biao-qian">创建标签</h3>
|
||||
<ul>
|
||||
<li>创建附注标签</li>
|
||||
</ul>
|
||||
<p>使用 -a 参数表示“annotated”,并用 -m 提供标签说明。例如,给当前提交创建一个名为 v1.0 的附注标签:</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> tag</span><span style="color:#ffb964;"> -a</span><span> v1.0</span><span style="color:#ffb964;"> -m </span><span style="color:#556633;">"</span><span style="color:#99ad6a;">发布版本 v1.0</span><span style="color:#556633;">"
|
||||
</span></code></pre>
|
||||
<p>这会在 Git 数据库中生成一个完整的标签对象,可通过 git show v1.0 查看标签信息和对应的提交详情。</p>
|
||||
<p>如果需要给旧提交贴标签,可以在命令末尾指定提交的 SHA 值(部分 SHA 也可):</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> tag</span><span style="color:#ffb964;"> -a</span><span> v1.0 <commit-sha> -m </span><span style="color:#556633;">"</span><span style="color:#99ad6a;">发布版本 v1.0</span><span style="color:#556633;">"
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>创建轻量标签</li>
|
||||
</ul>
|
||||
<p>直接指定标签名即可,不加任何参数:</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> tag v1.0-light
|
||||
</span></code></pre>
|
||||
<p>轻量标签仅仅是一个提交引用,因此查看时不会显示附加信息。</p>
|
||||
<h3 id="lie-chu-biao-qian">列出标签</h3>
|
||||
<ul>
|
||||
<li>列出所有标签</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> tag
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>还可以使用通配符过滤:</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> tag</span><span style="color:#ffb964;"> -l </span><span style="color:#556633;">"</span><span style="color:#99ad6a;">v1.*</span><span style="color:#556633;">"
|
||||
</span></code></pre>
|
||||
<p>这样便于管理和筛选大量标签。</p>
|
||||
<ul>
|
||||
<li>查看标签详细信息</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> show v1.0
|
||||
</span></code></pre>
|
||||
<p>这会显示标签对象的元数据以及对应的提交记录。</p>
|
||||
<h3 id="tui-song-biao-qian">推送标签</h3>
|
||||
<p><code>默认情况下,git push 不会将本地标签推送到远程仓库。推送标签有两种方式:</code></p>
|
||||
<ul>
|
||||
<li>推送单个标签</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> push origin v1.0
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>一次性推送所有标签</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> push origin</span><span style="color:#ffb964;"> --tags
|
||||
</span></code></pre>
|
||||
<h3 id="shan-chu-biao-qian">删除标签</h3>
|
||||
<ul>
|
||||
<li>删除本地标签</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> tag</span><span style="color:#ffb964;"> -d</span><span> v1.0
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>删除远程标签</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> push origin</span><span style="color:#ffb964;"> --delete</span><span> v1.0
|
||||
</span></code></pre>
|
||||
<h2 id="ri-zhi">日志</h2>
|
||||
<p>如果你想了解本地仓库的历史记录,最简单的命令就是使用:</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> log
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>只看某一个人的提交记录:</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> log</span><span style="color:#ffb964;"> --author</span><span>=bob
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>一个压缩后的每一条提交记录只占一行的输出:</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> log</span><span style="color:#ffb964;"> --pretty</span><span>=oneline
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>看看哪些文件改变了:</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> log</span><span style="color:#ffb964;"> --name-status
|
||||
</span></code></pre>
|
||||
<h2 id="sheng-cheng-bu-ding">生成补丁</h2>
|
||||
<p>比如你修改了项目中的<code>fs/proc/base.c</code>,然后</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> add fs/proc/base.c
|
||||
</span><span style="color:#ffb964;">git</span><span> commit</span><span style="color:#ffb964;"> -m </span><span style="color:#556633;">"</span><span style="color:#99ad6a;">fix:base</span><span style="color:#556633;">"
|
||||
</span><span style="color:#ffb964;">git</span><span> format-patch origin/16.0
|
||||
</span></code></pre>
|
||||
<p>即可在目录下生成补丁<code>0001-fix-base.patch</code>.</p>
|
||||
<h2 id="shan-chu-qian-yi-ge-ti-jiao-ji-lu">删除前一个提交记录</h2>
|
||||
<p>有时候手滑或者不想使用一个commit说明,可以用以下命令撤销上一个 commit:</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> reset</span><span style="color:#ffb964;"> --soft</span><span> HEAD</span><span style="color:#ffb964;">~</span><span>1
|
||||
</span></code></pre>
|
||||
<p>这个命令会撤销上一个 commit,但保留文件修改(代码仍然在工作区)。适用于 想要重新提交(amend)或调整 commit 的情况。</p>
|
||||
<p>如果你想彻底删除更改(不保留代码修改),可以使用:</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> reset</span><span style="color:#ffb964;"> --hard</span><span> HEAD</span><span style="color:#ffb964;">~</span><span>1
|
||||
</span></code></pre>
|
||||
<blockquote>
|
||||
<p>注意:--hard 会清除未提交的更改,无法恢复。</p>
|
||||
</blockquote>
|
||||
<h2 id="git-mu-lu-zhong-zhu-yao-wen-jian-he-zi-mu-lu-de-jie-gou-ji-qi-zuo-yong"><code>.git</code> 目录中主要文件和子目录的结构及其作用</h2>
|
||||
<h3 id="file-folder-git-mu-lu-jie-gou-gai-lan">📁 <code>.git</code> 目录结构概览</h3>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">.git/
|
||||
</span><span style="color:#ffb964;">├──</span><span> HEAD
|
||||
</span><span style="color:#ffb964;">├──</span><span> config
|
||||
</span><span style="color:#ffb964;">├──</span><span> description
|
||||
</span><span style="color:#ffb964;">├──</span><span> hooks/
|
||||
</span><span style="color:#ffb964;">├──</span><span> index
|
||||
</span><span style="color:#ffb964;">├──</span><span> info/
|
||||
</span><span style="color:#ffb964;">│</span><span> └── exclude
|
||||
</span><span style="color:#ffb964;">├──</span><span> logs/
|
||||
</span><span style="color:#ffb964;">│</span><span> ├── HEAD
|
||||
</span><span style="color:#ffb964;">│</span><span> └── refs/
|
||||
</span><span style="color:#ffb964;">├──</span><span> objects/
|
||||
</span><span style="color:#ffb964;">│</span><span> ├── info/
|
||||
</span><span style="color:#ffb964;">│</span><span> └── pack/
|
||||
</span><span style="color:#ffb964;">├──</span><span> refs/
|
||||
</span><span style="color:#ffb964;">│</span><span> ├── heads/
|
||||
</span><span style="color:#ffb964;">│</span><span> ├── remotes/
|
||||
</span><span style="color:#ffb964;">│</span><span> └── tags/
|
||||
</span></code></pre>
|
||||
<h3 id="dividers-he-xin-wen-jian-he-mu-lu-shuo-ming">🗂️ 核心文件和目录说明</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<p><strong>HEAD</strong>:指向当前检出的分支或提交。例如,<code>ref: refs/heads/main</code> 表示当前位于 <code>main</code> 分支。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>config</strong>:仓库级别的配置文件,包含用户名、邮箱、远程仓库等信息.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>description</strong>:用于描述仓库,仅供 GitWeb 等工具使用。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>hooks/</strong>:存放 Git 钩子脚本的目录,可用于在特定操作前后执行自定义脚本,如 <code>pre-commit</code>、<code>post-merge</code> 等.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>index</strong>:暂存区(staging area)的索引文件,记录了即将提交的文件信息。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>info/</strong>:包含辅助信息,如 <code>exclude</code> 文件用于定义仓库级别的忽略规则。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>logs/</strong>:记录了引用(如分支、标签)的更新历史,有助于追踪操作记录。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>objects/</strong>:存储 Git 的所有对象,包括:</p>
|
||||
<ul>
|
||||
<li><strong>blob</strong>:文件内容。</li>
|
||||
<li><strong>tree</strong>:目录结构。</li>
|
||||
<li><strong>commit</strong>:提交对象,记录提交信息和指向的树对象。</li>
|
||||
<li><strong>tag</strong>:标签对象。
|
||||
这些对象以 SHA-1 哈希命名,前两位作为子目录,其余作为文件名。</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>refs/</strong>:存储所有引用,包括:</p>
|
||||
<ul>
|
||||
<li><strong>heads/</strong>:本地分支。</li>
|
||||
<li><strong>remotes/</strong>:远程分支。</li>
|
||||
<li><strong>tags/</strong>:标签。</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="commitgui-fan">Commit规范</h2>
|
||||
<h3 id="ti-jiao-xin-xi-de-ji-ben-ge-shi">提交信息的基本格式</h3>
|
||||
<ul>
|
||||
<li>Header(头部)
|
||||
格式:</li>
|
||||
</ul>
|
||||
<pre style="background-color:#151515;color:#e8e8d3;"><code><span><type>[可选的 scope]: <简短描述>
|
||||
</span></code></pre>
|
||||
<p>type 表示提交类型,如:feat(新功能)、fix(修复bug)等。
|
||||
scope 是可选的,用于指出变更影响的模块或范围。
|
||||
简短描述 用于概述本次提交的核心内容,通常使用祈使语气。</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Body(正文)
|
||||
用于详细说明变更的动机、方法以及可能的影响,建议每行不超过 72 个字符。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Footer(脚注)
|
||||
可选部分,用来引用相关 issue、任务或说明破坏性变更(例如:BREAKING CHANGE: ...)。例如:</p>
|
||||
</li>
|
||||
</ul>
|
||||
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Fixes #123
|
||||
</span></code></pre>
|
||||
<p>这可以在提交后自动关闭相关问题。</p>
|
||||
<h3 id="chang-jian-de-commit-lei-xing">常见的 Commit 类型</h3>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">-</span><span> feat:新功能的添加
|
||||
</span><span> </span><span style="color:#ffb964;">示例:feat</span><span>(user): 添加用户注册功能
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> fix:修复 Bug
|
||||
</span><span> </span><span style="color:#ffb964;">示例:fix</span><span>(parser): 修复解析错误导致程序崩溃
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> docs:文档相关的修改
|
||||
</span><span> </span><span style="color:#ffb964;">示例:docs</span><span>(readme): 更新使用说明
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> style:代码格式、排版等不影响代码逻辑的调整
|
||||
</span><span> </span><span style="color:#ffb964;">示例:style:</span><span> 优化代码缩进和空格
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> refactor:代码重构,不涉及新功能或 Bug 修复
|
||||
</span><span> </span><span style="color:#ffb964;">示例:refactor:</span><span> 优化数据处理逻辑
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> perf:性能优化
|
||||
</span><span> </span><span style="color:#ffb964;">示例:perf:</span><span> 提升数据查询速度
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> test:添加或修改测试代码
|
||||
</span><span> </span><span style="color:#ffb964;">示例:test:</span><span> 补充用户登录单元测试
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> build:构建相关的变更,如依赖管理、构建脚本等
|
||||
</span><span> </span><span style="color:#ffb964;">示例:build:</span><span> 更新 webpack 配置
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> ci:持续集成相关的修改
|
||||
</span><span> </span><span style="color:#ffb964;">示例:ci:</span><span> 调整 GitHub Actions 配置
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> chore:其他杂项维护,不涉及源代码或测试文件的修改
|
||||
</span><span> </span><span style="color:#ffb964;">示例:chore:</span><span> 更新项目依赖
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">-</span><span> revert:回滚到上一个版本的提交
|
||||
</span><span> </span><span style="color:#ffb964;">示例:revert:</span><span> 撤销上次提交
|
||||
</span></code></pre>
|
||||
<hr />
|
||||
<p><strong>Done.</strong></p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="pagination">
|
||||
<div class="pagination__title">
|
||||
<span class="pagination__title-h">Thanks for reading! Read other posts?</span>
|
||||
<hr />
|
||||
</div>
|
||||
<div class="pagination__buttons">
|
||||
<span class="button previous">
|
||||
<a href="https://blog.dich.bid/about-junk-cleanup/">
|
||||
<span class="button__icon">←</span>
|
||||
<span class="button__text">乱七八糟:垃圾清理的艺术</span>
|
||||
</a>
|
||||
</span>
|
||||
|
||||
|
||||
<span class="button next">
|
||||
<a href="https://blog.dich.bid/network-isps/">
|
||||
<span class="button__text">网络艺术:国内/国际骨干ISP线路整理</span>
|
||||
<span class="button__icon">→</span>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<footer class="footer">
|
||||
<div class="footer__inner">
|
||||
<div class="copyright">
|
||||
<span>©
|
||||
2025
|
||||
Dichgrem</span>
|
||||
<span class="copyright-theme">
|
||||
<span class="copyright-theme-sep"> :: CC BY-SA 4.0 :: A friend comes from distant lands</span>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user