<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Git - Jul1en</title>
    <link>https://Jul1en-Lin.github.io/categories/git/</link>
    <description>Git - Jul1en</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <copyright>Jul1en</copyright>
    <lastBuildDate>Fri, 15 May 2026 16:19:14 +0800</lastBuildDate>
    <atom:link href="https://Jul1en-Lin.github.io/categories/git/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Git stash</title>
      <link>https://Jul1en-Lin.github.io/p/git-stash/</link>
      <pubDate>Fri, 15 May 2026 05:40:20 +0000</pubDate>
      <guid>https://Jul1en-Lin.github.io/p/git-stash/</guid>
      <description>&lt;h1 id=&#34;git-stash&#34;&gt;
    Git stash
&lt;/h1&gt;
&lt;p&gt;在使用 Git 开发时，我们经常会遇到一种很尴尬的情况：当前功能还没写完，代码处于“半成品”状态，既不适合提交 commit，也不想直接丢掉。但这时突然来了一个新的任务，比如需要马上切换分支去修 Bug，或者需要拉取远程最新代码。&lt;/p&gt;
&lt;p&gt;问题就出现了：Git 默认不太喜欢你带着一堆未提交的修改到处切换分支。因为这些修改可能会和目标分支的文件产生冲突，Git 无法确定你到底想保留哪一份内容。&lt;/p&gt;
&lt;p&gt;这时候就需要 &lt;code&gt;git stash&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;stash&lt;/code&gt; 的作用可以理解为：把当前还不想提交的修改临时存起来，让工作区恢复到干净状态。等你处理完别的事情后，再把这些修改取回来继续写。&lt;/p&gt;
&lt;h2 id=&#34;核心理解&#34;&gt;
    核心理解
&lt;/h2&gt;
&lt;p&gt;Git 里常见的代码状态主要有三个区域：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;区域&lt;/th&gt;
          &lt;th&gt;含义&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;工作区 Working Directory&lt;/td&gt;
          &lt;td&gt;你正在编辑的文件内容&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;暂存区 Staging Area / Index&lt;/td&gt;
          &lt;td&gt;已经&lt;code&gt;git add&lt;/code&gt;，准备提交的内容&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;本地仓库 Repository&lt;/td&gt;
          &lt;td&gt;已经 commit 的历史版本&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;普通的 &lt;code&gt;git commit&lt;/code&gt; 是把暂存区内容正式保存到版本历史里。&lt;/p&gt;
&lt;p&gt;而 &lt;code&gt;git stash&lt;/code&gt; 是把当前工作区和暂存区里的修改临时打包，放进一个 Git 管理的临时栈里。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;当前写到一半的代码 -&amp;gt; git stash -&amp;gt; 临时保存到 stash 栈中 -&amp;gt; 工作区恢复干净 -&amp;gt; 切换分支 / 拉代码 / 修 Bug -&amp;gt; git stash pop 或 git stash apply -&amp;gt; 恢复刚才写到一半的代码&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这里涉及到了&lt;strong&gt;栈的知识&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;stash 保存的内容不是只有一份，而是可以保存多份。每执行一次 &lt;code&gt;git stash&lt;/code&gt;，Git 就会往 stash 栈里新增一条记录。&lt;/p&gt;
&lt;p&gt;最新的一条通常叫：stash@{0}，数字越小，表示越新。&lt;/p&gt;
&lt;p&gt;再旧一点的是：stash@{1}、stash@{2}&lt;/p&gt;
&lt;h2 id=&#34;最常用操作&#34;&gt;
    最常用操作
&lt;/h2&gt;
&lt;h3 id=&#34;临时保存当前修改&#34;&gt;
    临时保存当前修改
&lt;/h3&gt;
&lt;p&gt;最基础的命令是：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git stash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或者更推荐写成：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git stash push
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;执行后，Git 会把当前工作区和暂存区里的修改保存起来，然后让项目回到一个干净状态。&lt;/p&gt;
&lt;p&gt;比如你正在开发登录功能：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LoginController.java   修改中
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;UserService.java       修改中
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;但是突然需要切换到 &lt;code&gt;hotfix&lt;/code&gt; 分支修 Bug，这时候可以执行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git stash push
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后再切换分支：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout hotfix
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或者：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git switch hotfix
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这样当前没写完的登录功能不会被丢掉，也不会影响你去处理别的任务。&lt;/p&gt;
&lt;h3 id=&#34;添加说明&#34;&gt;
    添加说明
&lt;/h3&gt;
&lt;p&gt;如果 stash 记录多了，只看 &lt;code&gt;stash@{0}&lt;/code&gt;、&lt;code&gt;stash@{1}&lt;/code&gt; 会很难分清楚每一份是干什么的。&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;strong&gt;所以更推荐加上说明：&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git stash push -m &amp;#34;开发登录功能，临时保存&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;之后查看 stash 列表时，就能看到这条说明。&lt;/p&gt;
&lt;p&gt;这就像给临时保存的代码贴了一个便利贴，后面找起来会轻松很多。&lt;/p&gt;
&lt;h3 id=&#34;查看-stash-列表&#34;&gt;
    查看 stash 列表
&lt;/h3&gt;
&lt;p&gt;查看当前保存过的 stash：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git stash list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;示例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stash@{0}: On feature-login: 开发登录功能，临时保存
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stash@{1}: On dev: 修改订单模块样式
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stash@{2}: On main: 调整配置文件
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里需要注意，stash 是按照时间倒序排列的，最新的永远在最上面。&lt;/p&gt;
&lt;h3 id=&#34;查看某个-stash-里改了什么&#34;&gt;
    查看某个 stash 里改了什么
&lt;/h3&gt;
&lt;p&gt;只看简略变更：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git stash show stash@{0}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果想看具体代码差异：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git stash show -p stash@{0}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其中 &lt;code&gt;-p&lt;/code&gt; 表示以 patch 的形式展示详细修改内容。&lt;/p&gt;
&lt;p&gt;如果你 stash 记录很多，恢复之前最好先看一下，避免把不相关的旧代码恢复回来。&lt;/p&gt;
&lt;h2 id=&#34;恢复&#34;&gt;
    恢复
&lt;/h2&gt;
&lt;p&gt;恢复 stash 主要有两个命令：&lt;code&gt;apply&lt;/code&gt; 和 &lt;code&gt;pop&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;它们看起来都能把代码拿回来，但差别很重要。&lt;/p&gt;
&lt;h3 id=&#34;apply&#34;&gt;
    apply
&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;git stash apply&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;恢复代码，stash 记录还保存着。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;默认恢复最新的一条：&lt;code&gt;git stash apply stash@{0}&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git stash apply stash@{0}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果要恢复指定记录：&lt;code&gt;git stash apply stash@{1}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;也就是说，你把临时代码拿回来了，但 Git 不会自动删除那条 stash。&lt;/p&gt;
&lt;p&gt;适合的场景是：你不确定这份 stash 恢复后是否完全正确，想先拿出来试试看。如果没问题，再手动删除。&lt;/p&gt;
&lt;h3 id=&#34;pop&#34;&gt;
    pop
&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;git stash pop&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;恢复代码，并尝试删除这条 stash 记录。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;它相当于：&lt;code&gt;git stash apply&lt;/code&gt; 加上 &lt;code&gt;git stash drop&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;也就是说，代码恢复回来之后，这条临时记录就会从 stash 栈里移除。&lt;/p&gt;
&lt;p&gt;不过如果恢复时发生冲突，Git 通常不会直接删除 stash 记录，这样可以避免代码丢失。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pop&lt;/code&gt; 更适合已经确定这条 stash 就是要继续使用的场景。&lt;/p&gt;
&lt;h3 id=&#34;apply-和-pop-的区别&#34;&gt;
    apply 和 pop 的区别
&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;命令&lt;/th&gt;
          &lt;th&gt;是否恢复代码&lt;/th&gt;
          &lt;th&gt;是否删除 stash 记录&lt;/th&gt;
          &lt;th&gt;适合场景&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;git stash apply&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;是&lt;/td&gt;
          &lt;td&gt;否&lt;/td&gt;
          &lt;td&gt;想先恢复看看，保留备份&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;git stash pop&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;是&lt;/td&gt;
          &lt;td&gt;是&lt;/td&gt;
          &lt;td&gt;确定要恢复并继续开发&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;删除&#34;&gt;
    删除
&lt;/h2&gt;
&lt;h3 id=&#34;删除特定-stash&#34;&gt;
    删除特定 stash
&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git stash drop stash@{0}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这会删除指定的一条 stash。&lt;/p&gt;
&lt;p&gt;如果你已经用 &lt;code&gt;apply&lt;/code&gt; 恢复过代码，并且确认这条 stash 不需要了，就可以手动删除。&lt;/p&gt;
&lt;h3 id=&#34;清空所有-stash&#34;&gt;
    清空所有 stash
&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git stash clear
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个命令会删除所有 stash 记录。&lt;/p&gt;
&lt;p&gt;这个操作要谨慎，因为一旦清空，普通方式下就很难再找回来了。&lt;/p&gt;
&lt;p&gt;一般不建议随手执行，除非你非常确定这些临时修改都不需要了。&lt;/p&gt;
&lt;h2 id=&#34;注意事项&#34;&gt;
    注意事项
&lt;/h2&gt;
&lt;p&gt;这是学习 stash 时非常容易踩坑的地方。&lt;/p&gt;
&lt;p&gt;默认情况下：&lt;code&gt;git stash&lt;/code&gt;会保存已被 Git 跟踪的文件修改，如 git add 到暂存区的修改这两类文件&lt;/p&gt;
&lt;p&gt;但它默认不会保存新建但还没有被 Git 跟踪的文件，如.gitignore 忽略的文件，这个新文件不会被 stash 保存。&lt;/p&gt;
&lt;h2 id=&#34;保存未跟踪文件&#34;&gt;
    保存未跟踪文件
&lt;/h2&gt;
&lt;p&gt;如果想把新建的、还没被 Git 跟踪的文件也一起 stash，可以使用：&lt;code&gt;git stash push -u&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;-u 是 &amp;ndash;include-untracked 的简写，表示把未跟踪文件也保存进去。&lt;/p&gt;
&lt;p&gt;eg：&lt;code&gt;git stash push -u -m &amp;quot;保存登录功能和新建测试文件&amp;quot;&lt;/code&gt;，这样新建文件也会一起被临时保存。&lt;/p&gt;
&lt;h2 id=&#34;保存被忽略的文件&#34;&gt;
    保存被忽略的文件
&lt;/h2&gt;
&lt;p&gt;如果连 &lt;code&gt;.gitignore&lt;/code&gt; 里忽略的文件也想一起保存，可以使用&lt;code&gt;git stash push -a&lt;/code&gt;命令，这会把所有文件都包含进去，包括一些本地构建产物、缓存文件、临时文件也一起 stash 进去~&lt;/p&gt;
&lt;h2 id=&#34;stash-指定文件&#34;&gt;
    stash 指定文件
&lt;/h2&gt;
&lt;p&gt;有时候你并不想保存所有修改，只想 stash 某几个文件。那就在stash后面跟上具体的文件名，跟&lt;code&gt;git add&lt;/code&gt;操作一致&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git stash push -m &amp;#34;只保存配置文件修改&amp;#34; src/main/resources/application.yml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果有多个文件，就用空格分开：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git stash push -m &amp;#34;保存登录相关修改&amp;#34; LoginController.java UserService.java
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这样 Git 只会把指定文件的修改临时保存起来，其他文件的修改还会留在工作区。&lt;/p&gt;
&lt;p&gt;这个操作在多人协作时很有用。比如你只想临时收起某个模块的修改，但另一个模块还要继续调试，就可以精确 stash。&lt;/p&gt;
&lt;h2 id=&#34;从-stash-创建新分支&#34;&gt;
    从 stash 创建新分支
&lt;/h2&gt;
&lt;p&gt;有时候你写着写着发现：这部分代码不应该继续放在当前分支了，应该单独开一个新分支。&lt;/p&gt;
&lt;p&gt;这时可以使用：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git stash branch new-branch-name stash@{0}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;执行逻辑：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;基于 stash 创建时所在的提交创建一个新分支&lt;/li&gt;
&lt;li&gt;切换到这个新分支&lt;/li&gt;
&lt;li&gt;把 stash 里的修改恢复出来&lt;/li&gt;
&lt;li&gt;如果成功，删除对应的 stash&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这个命令适合写着写着发现分支开错了的情况。比如你本来在 &lt;code&gt;dev&lt;/code&gt; 分支上随手改了登录功能，但后来发现应该新开一个 &lt;code&gt;feature-login&lt;/code&gt; 分支。这时就可以先 stash，再用 &lt;code&gt;git stash branch&lt;/code&gt; 把修改转移到新分支上。&lt;/p&gt;
&lt;h2 id=&#34;stash-冲突解决&#34;&gt;
    stash 冲突解决
&lt;/h2&gt;
&lt;p&gt;stash 恢复时也可能产生冲突。比如你 stash 的时候修改了 &lt;code&gt;UserService.java&lt;/code&gt;，后来目标分支也修改了同一个文件的同一段代码。此时执行&lt;code&gt;git stash pop&lt;/code&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git stash pop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Git 可能会提示冲突。&lt;/p&gt;
&lt;p&gt;冲突文件里通常会出现类似结构：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; Updated upstream
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;当前分支中的代码
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;=======
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stash 中恢复出来的代码
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Stashed changes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;解决方式和普通 merge 冲突类似：先打开冲突文件，手动决定保留哪部分代码。修改完成后再次add冲突文件后文件执行就可以接下来的工作了。&lt;/p&gt;
&lt;p&gt;如果你使用的是 &lt;code&gt;pop&lt;/code&gt;，并且发生了冲突，要注意检查 stash 是否还在：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git stash list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果冲突导致 stash 没有被删除，解决完之后可以手动删除：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git stash drop stash@{0}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;命令总结&#34;&gt;
    命令总结
&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;命令&lt;/th&gt;
          &lt;th&gt;作用&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;git stash&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;临时保存当前修改&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;git stash push&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;更推荐的 stash 写法&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;git stash push -m &amp;quot;说明&amp;quot;&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;保存 stash 并添加说明&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;git stash list&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;查看 stash 列表&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;git stash show stash@{0}&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;查看某条 stash 的简略变更&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;git stash show -p stash@{0}&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;查看某条 stash 的详细代码差异&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;git stash apply&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;恢复最新 stash，但不删除记录&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;git stash apply stash@{1}&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;恢复指定 stash，但不删除记录&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;git stash pop&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;恢复最新 stash，并删除记录&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;git stash drop stash@{0}&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;删除某条 stash&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;git stash clear&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;清空所有 stash&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;git stash push -u&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;保存未跟踪文件&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;git stash push -a&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;保存所有文件，包括 ignored 文件&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;git stash branch new-branch stash@{0}&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;从 stash 创建新分支并恢复修改&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;理解图&#34;&gt;
    理解图
&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/assets/git%20stash-20260515161908-u50h01u.png&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;git stash&#34;&gt;
&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git stash&lt;/code&gt; 本质上是 Git 提供的临时保存现场机制。它适合在代码还没完成、不想提交，但又必须切换任务时使用。它不会替代 commit，而是补充 commit 之前那段混乱、临时、半成品的开发过程。用得好的话，stash 可以让你在多个任务之间切换时更从容，不至于因为工作区不干净而手忙脚乱~&lt;/p&gt;
&lt;p&gt;‍&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Git LFS 突破大文件上传限制</title>
      <link>https://Jul1en-Lin.github.io/p/git-lfs-%E7%AA%81%E7%A0%B4%E5%A4%A7%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E9%99%90%E5%88%B6/</link>
      <pubDate>Fri, 03 Apr 2026 00:18:50 +0800</pubDate>
      <guid>https://Jul1en-Lin.github.io/p/git-lfs-%E7%AA%81%E7%A0%B4%E5%A4%A7%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E9%99%90%E5%88%B6/</guid>
      <description>&lt;h1 id=&#34;git-lfs&#34;&gt;
    Git LFS
&lt;/h1&gt;
&lt;h1 id=&#34;接触此技术背景&#34;&gt;
    接触此技术背景
&lt;/h1&gt;
&lt;p&gt;本人一直有将笔记备份的习惯，虽然已经有云同步，但是异地存档能再加多层保险&lt;/p&gt;
&lt;p&gt;随时间推移，笔记内容也越来越多，我的笔记快照的体积越来越大，最近一次直接超出了 Git 单次推送的最大体积限制（100MB），在查询解决方法时，发现 Git 有一种叫 LFS 的技术（Large File Storage），他能很好的解决此问题。&lt;/p&gt;
&lt;h1 id=&#34;技术介绍&#34;&gt;
    技术介绍
&lt;/h1&gt;
&lt;p&gt;Git LFS 是 Git 的一个开源扩展，旨在解决 Git 在处理大尺寸二进制文件（如视频、数据集、压缩包）时的性能瓶颈。&lt;/p&gt;
&lt;p&gt;因为 Git 的设计初衷是管理文本文件，它会完整记录文件的每一个版本。对于像我这样提交这么大我体积的的 ZIP 包，如果修改一次再提交，仓库体积会立刻翻倍。&lt;/p&gt;
&lt;h1 id=&#34;底层原理&#34;&gt;
    底层原理
&lt;/h1&gt;
&lt;p&gt;那么它的思路就是把大文件给“拆开”。&lt;/p&gt;
&lt;p&gt;LFS 的解决方法是：当你将文件放入 LFS 管理时，Git 仓库中存储的不再是那个 180MB 的实体，而是一个几百字节的&lt;strong&gt;指针文件&lt;/strong&gt;。真实的二进制数据被存储在 GitHub 的 LFS 专用服务器上。&lt;/p&gt;
&lt;p&gt;当执行 &lt;code&gt;git checkout&lt;/code&gt;​ 时，LFS 会根据指针里的哈希值，自动从服务器下载对应的真实文件覆盖到你的工作区。这样本地的 &lt;code&gt;.git&lt;/code&gt; 目录（版本库历史）依然保持精简，这个设计非常巧妙。&lt;/p&gt;
&lt;h1 id=&#34;技术实现&#34;&gt;
    技术实现
&lt;/h1&gt;
&lt;p&gt;我的最近一次提交是错误的，虽然提交了但是 push 失败了，故必须通过重置索引并应用 LFS 规则来修复。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;首先要安装 LFS 扩展&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 在你本地的git工作区&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git lfs install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;标记你的大文件由 LFS 来管理，以我的笔记快照为例，它的文件格式就是 &lt;code&gt;.ZIP&lt;/code&gt;，那么命令就是&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git lfs track &lt;span class=&#34;s2&#34;&gt;&amp;#34;*.zip&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;注意：这会生成或更新 &lt;code&gt;.gitattributes&lt;/code&gt; 文件，必须将其一同提交&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;重新添加并提交&lt;/p&gt;
&lt;p&gt;由于你之前的 Commit 已经包含了这个超限文件，需要先撤销上一次失败的提交，重新打包提交&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 撤销上一次 commit，但保留文件变动&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git reset --soft HEAD~1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 重新添加属性文件和大文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add .
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;commit message&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push origin master
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;执行到这一步，就已经能正确 push 上去了&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git-lfs-%E7%AA%81%E7%A0%B4%E5%A4%A7%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E9%99%90%E5%88%B6/assets/image-20260403000015-ovy4iw0_hu_d98ca1303a2f7e2c.webp&#34; width=&#34;1600&#34; height=&#34;360&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git-lfs-%E7%AA%81%E7%A0%B4%E5%A4%A7%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E9%99%90%E5%88%B6/assets/image-20260403000015-ovy4iw0_hu_c44c3ddbcca238ad.webp 800w, https://Jul1en-Lin.github.io/p/git-lfs-%E7%AA%81%E7%A0%B4%E5%A4%A7%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E9%99%90%E5%88%B6/assets/image-20260403000015-ovy4iw0_hu_d98ca1303a2f7e2c.webp 1600w, https://Jul1en-Lin.github.io/p/git-lfs-%E7%AA%81%E7%A0%B4%E5%A4%A7%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E9%99%90%E5%88%B6/assets/image-20260403000015-ovy4iw0_hu_b54f852baf54c2c7.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;image&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;444&#34; data-flex-basis=&#34;1067px&#34;&gt;
&lt;/p&gt;
&lt;h1 id=&#34;后续维护&#34;&gt;
    后续维护
&lt;/h1&gt;
&lt;p&gt;看到这会有疑惑：那么这次能提交成功了，后续该如何维护呢？&lt;/p&gt;
&lt;p&gt;维护 LFS 需要关注  &lt;strong&gt;​&lt;code&gt;.gitattributes&lt;/code&gt;​&lt;/strong&gt; 文件、本地存储占用以及云端配额三个维度&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;追踪管理&lt;/p&gt;
&lt;p&gt;你需要明确告诉 Git 哪些文件属于大文件。使用命令 &lt;code&gt;git lfs track &amp;quot;你的文件&amp;quot;&lt;/code&gt;​。 这会更新 &lt;code&gt;.gitattributes&lt;/code&gt;​ 文件。&lt;strong&gt;&lt;u&gt;每次更新必须提交这个属性文件&lt;/u&gt;&lt;/strong&gt;，否则协作成员拉取代码时，Git 会将其当作普通大文件处理，再次导致推送失败&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;监控状态&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 &lt;code&gt;git lfs ls-files&lt;/code&gt;：查看当前索引中哪些文件正受 LFS 管理&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;git lfs status&lt;/code&gt;：检查当前暂存区的对象状态&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;本地存储清理&lt;/p&gt;
&lt;p&gt;长期频繁更新大文件会导致本地 &lt;code&gt;.git/lfs&lt;/code&gt;​ 目录体积激增。使用 &lt;code&gt;git lfs prune&lt;/code&gt; 可以安全删除本地不再被当前分支引用的旧版二进制块。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;配额管理&lt;/p&gt;
&lt;p&gt;GitHub 免费账户提供 1GB 存储和 1GB 每月下行流量，这要注意它的限制，如果配额耗尽，别人拉下来的包都是指针文本，不会真正下载内容&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;希望对你有帮助，祝您身体健康。&lt;/p&gt;
&lt;p&gt;‍&lt;/p&gt;
</description>
    </item>
    <item>
      <title>🪶 Git命令大全</title>
      <link>https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/</link>
      <pubDate>Mon, 15 Dec 2025 00:47:22 +0800</pubDate>
      <guid>https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/</guid>
      <description>&lt;h1 id=&#34;git命令大全&#34;&gt;
    Git命令大全
&lt;/h1&gt;
&lt;p&gt;前提介绍&lt;/p&gt;
&lt;p&gt;git是一个分布式版本控制系统，相当于一个时光机，拿来保管代码，一旦出错，可以随时回滚到任何一个历史节点&lt;/p&gt;
&lt;p&gt;其核心架构分为三个区域：&lt;strong&gt;工作区（写代码的地方）、暂存区（临时存放的地方）和版本库（安全存档的地方）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/Gemini123_hu_e10a82f4ff2ba24f.webp&#34; width=&#34;1600&#34; height=&#34;1073&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/Gemini123_hu_dbafb9a7b776cf61.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/Gemini123_hu_e10a82f4ff2ba24f.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/Gemini123_hu_91fe44afe684b214.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;Git仓库结构&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;149&#34; data-flex-basis=&#34;357px&#34;&gt;
&lt;/p&gt;
&lt;h1 id=&#34;添加文件&#34;&gt;
    添加文件
&lt;/h1&gt;
&lt;p&gt;​&lt;code&gt;git add .&lt;/code&gt;表示添加所有在工作区的文件至暂存区&lt;/p&gt;
&lt;p&gt;​&lt;code&gt;git add &amp;lt;fileName&amp;gt; &amp;lt;fileName&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;eg：&lt;code&gt;git add file1 file2&lt;/code&gt;&lt;/p&gt;
&lt;h1 id=&#34;提交&#34;&gt;
    提交
&lt;/h1&gt;
&lt;p&gt;提交暂存区的文件至版本库中&lt;/p&gt;
&lt;p&gt;​&lt;code&gt;git commit -m &amp;quot;&amp;lt;填写你要备注的内容&amp;gt;&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;eg：&lt;code&gt;git commit -m &amp;quot;no message commit&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;h1 id=&#34;查看日志&#34;&gt;
    查看日志
&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;查看最近日志：&lt;code&gt;git log&lt;/code&gt;​ / &lt;code&gt;git log --pretty=oneline&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;记录本地每一次提交的命令 &lt;code&gt;git reflog&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;得到每一次的id，此id可用于版本回退功能&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119212943-wvcvc93_hu_6e71c1ebba48129c.webp&#34; width=&#34;1600&#34; height=&#34;1232&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119212943-wvcvc93_hu_46c055af39432610.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119212943-wvcvc93_hu_6e71c1ebba48129c.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119212943-wvcvc93_hu_698797b70999bfa9.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;129&#34; data-flex-basis=&#34;311px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;高亮部分就是每次提交的id，用&lt;code&gt;git reflog&lt;/code&gt;命令也能得到，且id更加简洁&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119215310-0affl22_hu_f707fbca13d4e722.webp&#34; width=&#34;1600&#34; height=&#34;363&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119215310-0affl22_hu_8affcf1a29910fa1.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119215310-0affl22_hu_f707fbca13d4e722.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119215310-0affl22_hu_bfbd937695b645ec.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;440&#34; data-flex-basis=&#34;1057px&#34;&gt;
&lt;/p&gt;
&lt;h1 id=&#34;版本回退&#34;&gt;
    版本回退
&lt;/h1&gt;
&lt;p&gt;它有三个版本&lt;/p&gt;
&lt;p&gt;​&lt;code&gt;git reset [--soft / --mixed / --hard] &amp;lt;HEAD&amp;gt;&lt;/code&gt;，区别如图所示&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251105003923-cmv4tgy_hu_501c1385607c3489.webp&#34; width=&#34;1600&#34; height=&#34;708&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251105003923-cmv4tgy_hu_7dc3ed6670424bf7.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251105003923-cmv4tgy_hu_501c1385607c3489.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251105003923-cmv4tgy_hu_446f50595c0dc564.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;225&#34; data-flex-basis=&#34;542px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;​&lt;code&gt;git reset &amp;lt;使用 git log / git reflog 后查看的对应版本的提交id&amp;gt;&lt;/code&gt;，版本id在&amp;lt;查看日志&amp;gt;部分可得到&lt;/p&gt;
&lt;p&gt;eg：&lt;code&gt;git reset --mixed 3f50f68&lt;/code&gt;&lt;/p&gt;
&lt;h1 id=&#34;查看当前仓库状态&#34;&gt;
    查看当前仓库状态
&lt;/h1&gt;
&lt;p&gt;查看与上一次提交之后到现在是否对文件进行修改（工作区）&lt;/p&gt;
&lt;p&gt;​&lt;code&gt;git status&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;查看是哪个文件被修改了之后，用下面介绍的&lt;code&gt;diff&lt;/code&gt;命令即可查看修改的具体内容&lt;/p&gt;
&lt;h1 id=&#34;查看差异&#34;&gt;
    查看差异
&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;查看暂存区与工作区之间的差异：&lt;code&gt;git diff &amp;lt;fileName&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;eg：&lt;code&gt;git diff ReadMe&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;‍&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;查看版本库和工作区文件的区别：&lt;code&gt;git diff HEAD --&amp;lt;fileName&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;eg：&lt;code&gt;git diff HEAD -- ReadMe&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;撤销修改&#34;&gt;
    撤销修改
&lt;/h1&gt;
&lt;p&gt;如果你在工作区中写了好多天的代码，但是效果还不如初次的，此时你想要退回到未修改的状态，就需要撤销修改操作&lt;/p&gt;
&lt;p&gt;撤销修改虽然可以手动把你自己写的代码删掉，但如果写的太多了，手动删除会有隐患且耗费时间精力&lt;/p&gt;
&lt;p&gt;撤销的目的，就是为了不影响远程仓库，所以撤销修改的前提是代码没有push到远程仓库&lt;/p&gt;
&lt;p&gt;以下是撤销修改的命令，分三种情况&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251109015150-ieem3qz_hu_663cdab081d1111a.webp&#34; width=&#34;1600&#34; height=&#34;644&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251109015150-ieem3qz_hu_e376c604790f16ba.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251109015150-ieem3qz_hu_663cdab081d1111a.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251109015150-ieem3qz_hu_d5f2480a80f899de.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;248&#34; data-flex-basis=&#34;596px&#34;&gt;
&lt;/p&gt;
&lt;h1 id=&#34;删除文件&#34;&gt;
    删除文件
&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;终端命令使用&lt;code&gt;rm &amp;lt;fileName&amp;gt;&lt;/code&gt;​，这时会将工作区的文件删除，如果想提交修改的话后续使用&lt;code&gt;add 、commit&lt;/code&gt;操作，分为三步&lt;/li&gt;
&lt;li&gt;git 也提供了这个命令，将这个流程简化为了两布：&lt;code&gt;git rm &amp;lt;fileName&amp;gt;&lt;/code&gt;​，这是将工作区与暂存区的文件同时删除，此时git已经自动将删除后的文件提交到暂存区中，只需要&lt;code&gt;commit&lt;/code&gt;操作即可&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;‍&lt;/p&gt;
&lt;h1 id=&#34;分支&#34;&gt;
    分支
&lt;/h1&gt;
&lt;h2 id=&#34;查看本地仓库分支情况&#34;&gt;
    查看本地仓库分支情况
&lt;/h2&gt;
&lt;p&gt;​&lt;code&gt;git branch&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;创建分支&#34;&gt;
    创建分支
&lt;/h2&gt;
&lt;p&gt;在&lt;code&gt;git branch&lt;/code&gt;后加上想要添加分支的名字即可&lt;/p&gt;
&lt;p&gt;​&lt;code&gt;git branch &amp;lt;branchName&amp;gt;&lt;/code&gt;​，如：&lt;code&gt;git branch dev&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;切换分支&#34;&gt;
    切换分支
&lt;/h2&gt;
&lt;p&gt;跟撤销修改的命令有点相似，只是少了&lt;code&gt;--&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;​&lt;code&gt;git checkout &amp;lt;已有的分支&amp;gt;&lt;/code&gt;​，如：&lt;code&gt;git checkout dev&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;还能使用切换并创建一个未创建的分支，使用&lt;code&gt;git checkout -b &amp;lt;branchName&amp;gt;&lt;/code&gt;​，相当于&lt;code&gt;git branch &amp;lt;branchName&amp;gt; + git checkout &amp;lt;branchName&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;合并分支&#34;&gt;
    合并分支
&lt;/h2&gt;
&lt;p&gt;合并分支的前提下是在选定某一个分支内对另一分支进行合并，不能合并现在所选的分支上&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;​&lt;code&gt;git merge &amp;lt;branchName&amp;gt;&lt;/code&gt;（Fast-forward模式）&lt;/p&gt;
&lt;p&gt;例如有两个分支：&lt;code&gt;master 和 dev&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;如果想要合并dev分支，那需要讲选中的分支切换到master上，用&lt;code&gt;git branch&lt;/code&gt;来查看现在所处的分支，前面带 * 号的就是所在分支&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118000559-ea8sdim_hu_a30c249c6d4eefe3.webp&#34; width=&#34;1600&#34; height=&#34;656&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118000559-ea8sdim_hu_38ebac5358fbf628.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118000559-ea8sdim_hu_a30c249c6d4eefe3.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118000559-ea8sdim_hu_7deb79a3784f4a98.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;244&#34; data-flex-basis=&#34;585px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;像这样，所在是分支dev，就使用&lt;code&gt;git checkout master&lt;/code&gt;转回master分支&lt;/p&gt;
&lt;p&gt;然后就能进行合并操作了，使用&lt;code&gt;git merge dev&lt;/code&gt;，这时master就指向了dev的最新一次提交&lt;/p&gt;
&lt;p&gt;此时的分支情况为&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118003722-spucr2i_hu_cab24b7ef648722b.webp&#34; width=&#34;1600&#34; height=&#34;770&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118003722-spucr2i_hu_9ee42245d69adadb.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118003722-spucr2i_hu_cab24b7ef648722b.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118003722-spucr2i_hu_fc334b2c33157e65.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;207&#34; data-flex-basis=&#34;498px&#34;&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在这种Fast-forward模式下，删除分支历史时，会丢掉分支的信息，看不出来最新的提交是merge进来的还是master分支上正常提交的，为了更好的溯源以及留痕，日后便于发现是哪个分支提交出了问题，在合并的时候会使用no-ff模式，即No-Fast-forward&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;
&lt;p&gt;​&lt;code&gt;git merge --no-ff -m &amp;quot;新提交的信息&amp;quot; &amp;lt;branchName&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;其中&lt;code&gt;-m &amp;quot;新提交的信息&amp;quot;&lt;/code&gt;表示在使用no-ff的模式下，表示merge之后还带有一个提交，说明no-ff模式下，master必须要指向一个新的提交&lt;/p&gt;
&lt;p&gt;例如：有分支&lt;code&gt;dev、master&lt;/code&gt;​，在选中master分支的前提下使用&lt;code&gt;git merge --no-ff -m &amp;quot;merge dev&amp;quot; dev&lt;/code&gt;，此时分支的情况为&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118004848-3eh6v98_hu_c1623ea127633965.webp&#34; width=&#34;1600&#34; height=&#34;660&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118004848-3eh6v98_hu_dae9cd82303224a6.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118004848-3eh6v98_hu_c1623ea127633965.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118004848-3eh6v98_hu_8de4edfab3c294f1.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;242&#34; data-flex-basis=&#34;581px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;==在平时使用中，更加建议使用no-ff模式，能进行更好的区别与溯源==&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;合并冲突&#34;&gt;
    合并冲突
&lt;/h2&gt;
&lt;p&gt;如果出现merge冲突，需要手动解决，&lt;strong&gt;并进行一次《添加 + 提交》操作！！！如果不提交，是不属于成功的merge&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118002835-0l81g4z_hu_31cfea99eaae0ca0.webp&#34; width=&#34;1600&#34; height=&#34;1152&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118002835-0l81g4z_hu_e8ff61df5029ed3a.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118002835-0l81g4z_hu_31cfea99eaae0ca0.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118002835-0l81g4z_hu_1140aa9e9142e9a0.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;138&#34; data-flex-basis=&#34;333px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;此时的分支情况&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118003231-8009p5k_hu_fe2cd13afa9a621f.webp&#34; width=&#34;1600&#34; height=&#34;824&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118003231-8009p5k_hu_15e38f9aeff7d9fe.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118003231-8009p5k_hu_fe2cd13afa9a621f.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118003231-8009p5k_hu_a3b7b71178a1d7a.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;194&#34; data-flex-basis=&#34;465px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;在git中也支持提交线的可视化图标，使用&lt;code&gt;git log --graph --abbrev-commit&lt;/code&gt;，如图所示&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118003527-w7w7uap_hu_61122a37ad0d33fc.webp&#34; width=&#34;1600&#34; height=&#34;1558&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118003527-w7w7uap_hu_3929686eb2968cd5.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118003527-w7w7uap_hu_61122a37ad0d33fc.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118003527-w7w7uap_hu_5acfc1227813edf6.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;102&#34; data-flex-basis=&#34;246px&#34;&gt;
&lt;/p&gt;
&lt;h2 id=&#34;删除分支&#34;&gt;
    删除分支
&lt;/h2&gt;
&lt;p&gt;删除分支也是只能在其他的分支上删除分支，比如在dev分支上就不能删除dev，必须要切到master分支上才可以&lt;/p&gt;
&lt;p&gt;使用&lt;code&gt;git branch -d &amp;lt;branchName&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;因为创建、合并和删除分支非常快，所以鼓励你使用分支完成某个任务，合并后再删掉分支，这和直接在master分支上工作效果是一样的，但过程更加的安全&lt;/p&gt;
&lt;h2 id=&#34;删除分支2&#34;&gt;
    删除分支2
&lt;/h2&gt;
&lt;p&gt;开发过程中，可能&lt;code&gt;dev&lt;/code&gt;​分支在中途被废弃了，不需要合并到&lt;code&gt;master&lt;/code&gt;​中，直接删除&lt;code&gt;dev&lt;/code&gt;​分支，此时强制删除分支用命令&lt;code&gt;git branch -D &amp;lt;branchName&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;在终端命令中也会提醒你，这个分支未被完全合并到master分支上，如果确定你要删除，使用&lt;code&gt;git branch -D &amp;lt;branchName&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119212250-66ug4cp_hu_7c6a78641b5eae92.webp&#34; width=&#34;1600&#34; height=&#34;360&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119212250-66ug4cp_hu_566c02e28672ba7b.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119212250-66ug4cp_hu_7c6a78641b5eae92.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119212250-66ug4cp_hu_68b878861f4ce654.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;444&#34; data-flex-basis=&#34;1066px&#34;&gt;
&lt;/p&gt;
&lt;h2 id=&#34;分支策略&#34;&gt;
    分支策略
&lt;/h2&gt;
&lt;p&gt;在实际开发中，git给我们的分支管理能力是非常重要的，这能帮我们进行多人协同开发&lt;/p&gt;
&lt;p&gt;在git管理中，需要遵守的几个重要约定&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;master分支应该是非常稳定的，仅用来发布新版本，平时不能在上面修改操作&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;干活修改的内容都应该在dev分支上，等到某个时候迎来版本更新，再把dev分支合并到master上，在master分支上发布新版本&lt;/p&gt;
&lt;p&gt;这样每个人都能在基于master上创建dev分支进行协同开发，每个人都有自己的分支，时不时往dev分支上合并即可&lt;/p&gt;
&lt;p&gt;故团队协同开发的分支belike：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118011057-v5s8oxu_hu_ac66a7625fd96bb6.webp&#34; width=&#34;1600&#34; height=&#34;895&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118011057-v5s8oxu_hu_401414efcda56104.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118011057-v5s8oxu_hu_ac66a7625fd96bb6.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251118011057-v5s8oxu_hu_f7a3bdee437544fd.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;178&#34; data-flex-basis=&#34;429px&#34;&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;bug分支&#34;&gt;
    Bug分支
&lt;/h2&gt;
&lt;p&gt;在平时开发过程中，master分支一般是稳定的版本，其他分支都是基于master分支进行完善开发，但master也有可能有bug，此时如果没能及时发现小bug，其他分支在有bug的master上基础上进行开发，这就需要我们建立bug分支对master进行bug修复&lt;/p&gt;
&lt;p&gt;假如已经建立了分支dev，但是发现了master上有bug，那是不建议在dev分支上进行bug修复的，因为这违背了分支dev的任务，可能dev的任务是对某个模块进行更新，且已经修改了部分文件，所以我们需要再创建分支专门对master分支进行修复bug&lt;/p&gt;
&lt;p&gt;这时候我们切回master分支后其实能看到分支dev修改的代码，虽然这只是在工作区的修改，还未提交到暂存区，但这也影响了对master的创建bug分支的步骤&lt;/p&gt;
&lt;p&gt;比如在dev上修改了readme文件&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119214443-mtmd3j9_hu_64e7116008ab7777.webp&#34; width=&#34;1600&#34; height=&#34;468&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119214443-mtmd3j9_hu_a40c7e5e90aba684.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119214443-mtmd3j9_hu_64e7116008ab7777.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119214443-mtmd3j9_hu_81fe1a1eb283c903.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;341&#34; data-flex-basis=&#34;820px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;在master分支上也能看到dev修改的内容&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119202832-z3gjr98_hu_be3cc836c67b73dd.webp&#34; width=&#34;1600&#34; height=&#34;539&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119202832-z3gjr98_hu_e387d6716c44fe6d.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119202832-z3gjr98_hu_be3cc836c67b73dd.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119202832-z3gjr98_hu_4690996572cd68e4.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;296&#34; data-flex-basis=&#34;712px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;原因是master工作区中的代码有变动的&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119131537-kxueqbn_hu_4e58ec42c653051f.webp&#34; width=&#34;1600&#34; height=&#34;760&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119131537-kxueqbn_hu_5fe35a2bf0de5ae3.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119131537-kxueqbn_hu_4e58ec42c653051f.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119131537-kxueqbn_hu_1b444edd5670a6cd.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;210&#34; data-flex-basis=&#34;505px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;虽然代码只存在工作区中，但我们还是不想在master上看到dev修改的代码，且在dev分支上不影响master，可在dev分支上用&lt;code&gt;git stash&lt;/code&gt;，将工作区中的内容进行储存。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119214215-559d67r_hu_d3144f5cd28a0c70.webp&#34; width=&#34;1600&#34; height=&#34;137&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119214215-559d67r_hu_9feeee2013778462.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119214215-559d67r_hu_d3144f5cd28a0c70.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119214215-559d67r_hu_6b0e5487ee5dd240.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;1167&#34; data-flex-basis=&#34;2802px&#34;&gt;
​此时的&lt;code&gt;tree .git&lt;/code&gt;​仓库一下就能看到&lt;code&gt;stash&lt;/code&gt;分区保存在refs上&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119132237-33kmjue_hu_12b68e4c0b9965ae.webp&#34; width=&#34;1600&#34; height=&#34;1023&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119132237-33kmjue_hu_11476a9b30af369b.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119132237-33kmjue_hu_12b68e4c0b9965ae.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119132237-33kmjue_hu_f27b9ef4ec7a1083.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;156&#34; data-flex-basis=&#34;375px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;此时再返回到&lt;code&gt;master&lt;/code&gt;​分支上，就已经看不到&lt;code&gt;dev&lt;/code&gt;修改的代码了&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119132318-pabl3t4_hu_d45b8c97898286d2.webp&#34; width=&#34;1600&#34; height=&#34;269&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119132318-pabl3t4_hu_9e09a63c504f670f.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119132318-pabl3t4_hu_d45b8c97898286d2.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119132318-pabl3t4_hu_96463a03515f7d99.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;594&#34; data-flex-basis=&#34;1427px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;此时就能对&lt;code&gt;master&lt;/code&gt;​进行bug修复了，先切回&lt;code&gt;master&lt;/code&gt;​分支。然后在&lt;code&gt;master&lt;/code&gt;​上新建fix_bug分支并切换到fix_bug，可用&lt;code&gt;git checkout -b fix_bug&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119132854-0p9u42o_hu_243e48288de4f238.webp&#34; width=&#34;1600&#34; height=&#34;343&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119132854-0p9u42o_hu_6d6ecbc177cc2f1b.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119132854-0p9u42o_hu_243e48288de4f238.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119132854-0p9u42o_hu_c2751367ca5126d8.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;467&#34; data-flex-basis=&#34;1121px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;在fix_bug上修改代码后，更新提交后就可以提交到&lt;code&gt;master&lt;/code&gt;​上了，可合并后直接提交，这里用no-ff方式提交，命令为&lt;code&gt;git merge --no-ff -m &amp;quot;&amp;lt;commit message&amp;gt;&amp;quot; &amp;lt;devName&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119203044-yneddim_hu_cda5f43d9f17a1f.webp&#34; width=&#34;1600&#34; height=&#34;460&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119203044-yneddim_hu_f5e1694d3213127f.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119203044-yneddim_hu_cda5f43d9f17a1f.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119203044-yneddim_hu_a60732bb21314994.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;347&#34; data-flex-basis=&#34;834px&#34;&gt;
&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119203530-9xzrr9z_hu_154241276ae93b6d.webp&#34; width=&#34;1600&#34; height=&#34;414&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119203530-9xzrr9z_hu_369379093d7f2d67.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119203530-9xzrr9z_hu_154241276ae93b6d.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119203530-9xzrr9z_hu_36e645878cca5d67.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;image&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;386&#34; data-flex-basis=&#34;927px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;此时的&lt;code&gt;master&lt;/code&gt;分支上就是已经修复好的bug了&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119203601-j5yioad_hu_2dc14976b6a62417.webp&#34; width=&#34;1600&#34; height=&#34;337&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119203601-j5yioad_hu_85724b87563a1db8.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119203601-j5yioad_hu_2dc14976b6a62417.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119203601-j5yioad_hu_3e5cc297cd90e7dc.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;474&#34; data-flex-basis=&#34;1139px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;但&lt;code&gt;dev&lt;/code&gt;​分支上我们还是以有bug的&lt;code&gt;master&lt;/code&gt;​基础上开发的，那怎么办呢？&lt;code&gt;dev&lt;/code&gt;​分支的修改信息还存在&lt;code&gt;stash&lt;/code&gt;上，我们需要把暂存在stash区的代码给拉回来，这是没拉回来的readme文件&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119203743-j5v93qi_hu_9103d3c486b58812.webp&#34; width=&#34;1600&#34; height=&#34;428&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119203743-j5v93qi_hu_6cf5f1c5befda2db.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119203743-j5v93qi_hu_9103d3c486b58812.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119203743-j5v93qi_hu_335c7b38a33f1cd3.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;373&#34; data-flex-basis=&#34;897px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;在上面提到，&lt;code&gt;dev&lt;/code&gt;​已经修改了readme的内容，那这些内容都存在了&lt;code&gt;stash&lt;/code&gt;​区，且dev本地是没在的。可以用&lt;code&gt;git stash list&lt;/code&gt;查看stash区的状态&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119204025-72pwhka_hu_bb6b8bff8c1c424.webp&#34; width=&#34;1600&#34; height=&#34;253&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119204025-72pwhka_hu_72d63f428281d999.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119204025-72pwhka_hu_bb6b8bff8c1c424.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119204025-72pwhka_hu_9a55dde2e4bfd6b.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;633&#34; data-flex-basis=&#34;1519px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;现在拉回来的dev分支上的readme文件就显示正常了，用到命令&lt;code&gt;git stash pop&lt;/code&gt;，这时readme文件就正常显示了&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119204154-25ds3ni_hu_e6e47ab10f00a1d9.webp&#34; width=&#34;1600&#34; height=&#34;955&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119204154-25ds3ni_hu_739e9054e2716a4c.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119204154-25ds3ni_hu_e6e47ab10f00a1d9.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119204154-25ds3ni_hu_d12ac5675c32c40.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;167&#34; data-flex-basis=&#34;402px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;假设dev分支上已经完成开发，且已经更新最新一次提交。（add + commit）&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119204552-9gswvnm_hu_9eb7462e16ae31c6.webp&#34; width=&#34;1600&#34; height=&#34;637&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119204552-9gswvnm_hu_393b5cb38400fb9f.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119204552-9gswvnm_hu_9eb7462e16ae31c6.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119204552-9gswvnm_hu_9a6c30673c652d0.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;251&#34; data-flex-basis=&#34;602px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;现在要提交到master上，那怎么办呢？它还存有&lt;code&gt;master&lt;/code&gt;​原来的bug代码，&lt;strong&gt;==如果直接合并到==****==​&lt;code&gt;master&lt;/code&gt;​==&lt;strong&gt;​&lt;/strong&gt;==分支上，那会出现合并冲突，需要我们手动解决，手动解决是非常危险的，处理不当可能会污染master分支，变得更加不稳定。==&lt;/strong&gt; 情况如图所示，会更加直观。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119205319-8qfuplj_hu_71ae358282170b17.webp&#34; width=&#34;1600&#34; height=&#34;748&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119205319-8qfuplj_hu_3b4b44de29fe39e4.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119205319-8qfuplj_hu_71ae358282170b17.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119205319-8qfuplj_hu_5e8a4c4429366eb8.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;213&#34; data-flex-basis=&#34;513px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;解决这个问题的一个好的建议是：最好在自己的分支上合并下&lt;code&gt;master&lt;/code&gt;​，再让&lt;code&gt;master&lt;/code&gt;​去合并&lt;code&gt;dev&lt;/code&gt;​，这样做的目的是有冲突可以在本地分支解决并进行测试，而不影响&lt;code&gt;master&lt;/code&gt;，这样做此时的状态为：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119210205-6stwel5_hu_58e9ac4669443f16.webp&#34; width=&#34;1600&#34; height=&#34;774&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119210205-6stwel5_hu_6fbb02db3ea209f3.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119210205-6stwel5_hu_58e9ac4669443f16.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119210205-6stwel5_hu_82fea326087fac05.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;206&#34; data-flex-basis=&#34;496px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119210308-2c4655f_hu_f26f2bb68f9ce979.webp&#34; width=&#34;1600&#34; height=&#34;622&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119210308-2c4655f_hu_ba62865750de1bf8.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119210308-2c4655f_hu_f26f2bb68f9ce979.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119210308-2c4655f_hu_1a27eb5a261d2890.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;257&#34; data-flex-basis=&#34;617px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;具体操作如下，在第一步中不出意外遇到了冲突&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119210545-wdaw7ch_hu_a367dd819b779fcb.webp&#34; width=&#34;1600&#34; height=&#34;266&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119210545-wdaw7ch_hu_344e6ec4b6fc6114.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119210545-wdaw7ch_hu_a367dd819b779fcb.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119210545-wdaw7ch_hu_30d6d1620a92dbb7.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;602&#34; data-flex-basis=&#34;1446px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;手动修改后别忘了提交，然后切回到&lt;code&gt;master&lt;/code&gt;​分支上，再合并&lt;code&gt;dev&lt;/code&gt;​，此时&lt;code&gt;master&lt;/code&gt;​上就既有修改后的代码，也有&lt;code&gt;dev&lt;/code&gt;上提交的新代码且不冲突了&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119211401-fm7zl8x_hu_acb9afedeb795358.webp&#34; width=&#34;1600&#34; height=&#34;615&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119211401-fm7zl8x_hu_a100493bf428b689.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119211401-fm7zl8x_hu_acb9afedeb795358.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251119211401-fm7zl8x_hu_6fb7041f24264ba0.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;260&#34; data-flex-basis=&#34;624px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;完成后记得删分支，这是个好习惯😁&lt;/p&gt;
&lt;p&gt;​&lt;code&gt;git branch -d dev&lt;/code&gt;​、&lt;code&gt;git branch -d fix_bug&lt;/code&gt;&lt;/p&gt;
&lt;h1 id=&#34;推送&#34;&gt;
    推送
&lt;/h1&gt;
&lt;p&gt;​&lt;code&gt;git push origin &amp;lt;远程主机名&amp;gt; &amp;lt;本地分支名&amp;gt;:&amp;lt;远程分支名&amp;gt;&lt;/code&gt;​，比如&lt;code&gt;git push origin test-branch:remote-test-branch&lt;/code&gt;，远程仓库就会出现&lt;/p&gt;
&lt;p&gt;​&lt;code&gt;remote-test-branch&lt;/code&gt; 的新分支&lt;/p&gt;
&lt;h1 id=&#34;拉取&#34;&gt;
    拉取
&lt;/h1&gt;
&lt;p&gt;Pull其实是有拉取 + 合并的操作，拉取过程中自动帮你合并了，且默认的是fast-forward模式&lt;/p&gt;
&lt;p&gt;​&lt;code&gt;git pull origin &amp;lt;远程branchName&amp;gt;:&amp;lt;要拉取到的本地branchName&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124165733-gfaiycq_hu_30c8215e6ced2f29.webp&#34; width=&#34;1600&#34; height=&#34;500&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124165733-gfaiycq_hu_e7fe0a3dace2cedd.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124165733-gfaiycq_hu_30c8215e6ced2f29.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124165733-gfaiycq_hu_8f21db2fa6f4d7ed.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;319&#34; data-flex-basis=&#34;767px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;如果远端的master与本地的分支名字一样，即是拉取到本地master分支，则可以省略&lt;code&gt;:master&lt;/code&gt;​，即&lt;code&gt;git pull origin master&lt;/code&gt;&lt;/p&gt;
&lt;h1 id=&#34;忽略特殊文件&#34;&gt;
    忽略特殊文件
&lt;/h1&gt;
&lt;p&gt;在开发中，有时候有些文件不应该被提交到远端仓库，比如重要的数据库密码等配置文件，那怎么才能让git知道并自动忽略呢？&lt;/p&gt;
&lt;p&gt;在git的工作区根目录上创建一个特殊的&lt;code&gt;.gitignore&lt;/code&gt;文件，然后把忽略的文件名填进去，git就会自动忽略这些文件了&lt;/p&gt;
&lt;p&gt;可以手动创建，如：&lt;code&gt;touch .gitignore&lt;/code&gt;，也可以在创建远程仓库的时候选择&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124172126-rwiu879_hu_46faa0c829fe83d5.webp&#34; width=&#34;1600&#34; height=&#34;283&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124172126-rwiu879_hu_e36dadf735d97e3d.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124172126-rwiu879_hu_46faa0c829fe83d5.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124172126-rwiu879_hu_607b61d2b23e512b.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;564&#34; data-flex-basis=&#34;1354px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;然后修改在&lt;code&gt;.gitignore&lt;/code&gt;​上写上要忽略的文件类型 / 文件后缀名，修改命令为&lt;code&gt;vim&lt;/code&gt;​，如&lt;code&gt;vim .gitignore&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124173342-9h0v7bn_hu_9778314b6d96b602.webp&#34; width=&#34;1600&#34; height=&#34;1001&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124173342-9h0v7bn_hu_e41e07a4c08e3c06.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124173342-9h0v7bn_hu_9778314b6d96b602.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124173342-9h0v7bn_hu_1bb14f971570049b.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;159&#34; data-flex-basis=&#34;383px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;此处我在工作区中新建了&lt;code&gt;file.txt&lt;/code&gt;​、&lt;code&gt;a.io&lt;/code&gt;​、&lt;code&gt;c.io&lt;/code&gt;​、&lt;code&gt;picture.png&lt;/code&gt;文件&lt;/p&gt;
&lt;p&gt;查看git状态的时发现，&lt;code&gt;picture.png&lt;/code&gt;​没有被忽略，&lt;code&gt;file.txt&lt;/code&gt;​、&lt;code&gt;a.io&lt;/code&gt;​和单独指定的&lt;code&gt;c.io&lt;/code&gt;文件被忽略了，没有被git追踪管理，这个结果是理想的&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124174325-f4r8qgh_hu_54d40f70a80841b4.webp&#34; width=&#34;1600&#34; height=&#34;752&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124174325-f4r8qgh_hu_7ac9da9b4467bf1e.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124174325-f4r8qgh_hu_54d40f70a80841b4.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124174325-f4r8qgh_hu_5d1f90eed082adf0.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;212&#34; data-flex-basis=&#34;510px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;有时候&lt;code&gt;.gitignore&lt;/code&gt;​文件太大了，记不清具体忽略了哪些文件，但是又不小心建立了被忽略的文件，手动在ignore文件内查看太费劲了，可以使用命令&lt;code&gt;git check-ignore -v &amp;lt;被忽略的文件名&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124174841-iqiqhgg_hu_58aefd928fc2e5e5.webp&#34; width=&#34;1600&#34; height=&#34;277&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124174841-iqiqhgg_hu_2e95c1ae68ca83bb.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124174841-iqiqhgg_hu_58aefd928fc2e5e5.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251124174841-iqiqhgg_hu_9bbdd4b2bb69729d.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;577&#34; data-flex-basis=&#34;1387px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;这就能看到具体的被忽略的文件的具体位置&lt;/p&gt;
&lt;h1 id=&#34;标签管理&#34;&gt;
    标签管理
&lt;/h1&gt;
&lt;p&gt;标签&lt;code&gt;tag&lt;/code&gt;​，可以简单理解为对某次&lt;code&gt;commit&lt;/code&gt; 的一次标识，相当于起了个别名。&lt;/p&gt;
&lt;p&gt;相较于难以记住的&lt;code&gt;commit id&lt;/code&gt;​，&lt;code&gt;tag&lt;/code&gt;​可以很好的解决这个问题，当我们需要回退某个重要的版本时，直接使用标签就能很快的定位到对应的&lt;code&gt;commit&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;这里引用hutool 工具包的GitHub仓库，能看到不同版本的tag&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251205012941-z67yes7_hu_ec7402335969cc0f.webp&#34; width=&#34;1600&#34; height=&#34;1142&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251205012941-z67yes7_hu_3ad80a10dab44382.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251205012941-z67yes7_hu_ec7402335969cc0f.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251205012941-z67yes7_hu_a988e5c12f07e6de.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;140&#34; data-flex-basis=&#34;336px&#34;&gt;
&lt;/p&gt;
&lt;h2 id=&#34;创建标签&#34;&gt;
    创建标签
&lt;/h2&gt;
&lt;p&gt;在Git中打标签非常简单，首先切换到需要打标签的分支上，直接&lt;code&gt;git tag &amp;lt;name&amp;gt;&lt;/code&gt;​就可以打一个新的标签，&lt;strong&gt;这样的标签默认指向最新的一次提交&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;当然也可以&lt;strong&gt;指定某个提交打&lt;/strong&gt;​&lt;code&gt;tag&lt;/code&gt;​，只需在后面加上提交的id，如：&lt;code&gt;git tag v0.9 f7340fd&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;描述标签&#34;&gt;
    描述标签
&lt;/h2&gt;
&lt;p&gt;新建&lt;code&gt;tag&lt;/code&gt;​​​的同时还能对标签进行一些描述，使用&lt;code&gt;git tag -a v0.8 -m &amp;quot;XXX&amp;quot; &amp;lt;需要指定的哪次提交id，如果没有默认指向最新的一次&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;查看标签&#34;&gt;
    查看标签
&lt;/h2&gt;
&lt;p&gt;使用&lt;code&gt;git tag&lt;/code&gt;就能看到当前目录下有多少个标签，&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251126130810-3tkybqm_hu_dd721ba0963af62a.webp&#34; width=&#34;1600&#34; height=&#34;289&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251126130810-3tkybqm_hu_619c870401988aad.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251126130810-3tkybqm_hu_dd721ba0963af62a.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251126130810-3tkybqm_hu_f00339eefa939e2c.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;553&#34; data-flex-basis=&#34;1328px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;如果需要看具体某一次的&lt;code&gt;tag&lt;/code&gt;​的详细描述，则需要命令&lt;code&gt;git show &amp;lt;某一次的tag&amp;gt;&lt;/code&gt;​，如：&lt;code&gt;git show v0.8&lt;/code&gt;​ / &lt;code&gt;git show v1.0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251126131019-78ja9tl_hu_6a7357f18c857cd.webp&#34; width=&#34;1600&#34; height=&#34;738&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251126131019-78ja9tl_hu_ff8e99f415652894.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251126131019-78ja9tl_hu_6a7357f18c857cd.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251126131019-78ja9tl_hu_a6cd2b8b1e2b5d6c.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;216&#34; data-flex-basis=&#34;520px&#34;&gt;
&lt;/p&gt;
&lt;h2 id=&#34;删除标签&#34;&gt;
    删除标签
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;本地删除：&lt;/strong&gt; 删除标签与删除分支的操作类似：&lt;code&gt;git tag -d &amp;lt;tagName&amp;gt;&lt;/code&gt;​，如&lt;code&gt;git tag -d v0.8&lt;/code&gt;​，可见已经删除了&lt;code&gt;tag&lt;/code&gt;v0.8&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251126131203-8qe7jxs_hu_cc003fa494f57445.webp&#34; width=&#34;1600&#34; height=&#34;324&#34; srcset=&#34;https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251126131203-8qe7jxs_hu_5596281914816d4f.webp 800w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251126131203-8qe7jxs_hu_cc003fa494f57445.webp 1600w, https://Jul1en-Lin.github.io/p/git%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8/assets/image-20251126131203-8qe7jxs_hu_a1cff1ac150687c0.webp 2400w&#34; sizes=&#34;(max-width: 860px) calc(100vw - 40px), 1060px&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34; alt=&#34;&#34; class=&#34;gallery-image&#34; data-flex-grow=&#34;493&#34; data-flex-basis=&#34;1183px&#34;&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;删除远程仓库标签：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;直接在远程仓库删除&lt;/li&gt;
&lt;li&gt;在本地执行&lt;code&gt;git push origin :&amp;lt;你要删除的标签&amp;gt;&lt;/code&gt;​，注意这个标签需要先在本地进行删除，才有变更，变更之后才能&lt;code&gt;push&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;推送标签&#34;&gt;
    推送标签
&lt;/h2&gt;
&lt;p&gt;将标签推送同步至远程仓库&lt;/p&gt;
&lt;p&gt;**推送单一标签：**​&lt;code&gt;git push origin &amp;lt;标签名&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;**一次性推送所有标签：**​&lt;code&gt;git push origin --tags&lt;/code&gt;，就能把本地所有的标签都推送到远程仓库&lt;/p&gt;
&lt;p&gt;‍&lt;/p&gt;
</description>
    </item>
  </channel>
</rss>
