<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Git on Coder_Studio</title>
        <link>https://iamxurulin.github.io/tags/git/</link>
        <description>Recent content in Git on Coder_Studio</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <copyright>iamxurulin</copyright>
        <lastBuildDate>Sun, 05 Apr 2026 17:35:33 +0000</lastBuildDate><atom:link href="https://iamxurulin.github.io/tags/git/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>开源必备：Git 仓库敏感日志文件清理与脱敏教程</title>
        <link>https://iamxurulin.github.io/p/%E5%BC%80%E6%BA%90%E5%BF%85%E5%A4%87git-%E4%BB%93%E5%BA%93%E6%95%8F%E6%84%9F%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E6%B8%85%E7%90%86%E4%B8%8E%E8%84%B1%E6%95%8F%E6%95%99%E7%A8%8B/</link>
        <pubDate>Wed, 25 Feb 2026 19:45:42 +0000</pubDate>
        
        <guid>https://iamxurulin.github.io/p/%E5%BC%80%E6%BA%90%E5%BF%85%E5%A4%87git-%E4%BB%93%E5%BA%93%E6%95%8F%E6%84%9F%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E6%B8%85%E7%90%86%E4%B8%8E%E8%84%B1%E6%95%8F%E6%95%99%E7%A8%8B/</guid>
        <description>&lt;p&gt;在做个人项目的时候，有时为了开源需要对数据进行脱敏，尤其是一些log文件。&lt;/p&gt;
&lt;p&gt;先确认代码里还有没有其他“XXX”？&lt;/p&gt;
&lt;p&gt;执行这条&lt;strong&gt;精准排除&lt;/strong&gt;命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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 grep -w &lt;span class=&#34;s2&#34;&gt;&amp;#34;XXX&amp;#34;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;git rev-list --all&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt; -- &lt;span class=&#34;s2&#34;&gt;&amp;#34;:!*.log&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果&lt;strong&gt;没有输出&lt;/strong&gt;，证明没有包含相关字符串的文件，如果&lt;strong&gt;有输出&lt;/strong&gt;则需要进行如下操作，彻底删除文件的历史。&lt;/p&gt;
&lt;p&gt;⚠️警告，以下操作会改写所有 Commit 的 Hash 值，必须强制推送！&lt;/p&gt;
&lt;h3 id=&#34;1在项目根目录执行清洗命令&#34;&gt;1.在项目根目录执行清洗命令
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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 filter-branch --force --index-filter &lt;span class=&#34;se&#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;&lt;span class=&#34;s1&#34;&gt;&amp;#39;git rm --cached --ignore-unmatch &amp;#34;*/hs_err_pid*.log&amp;#34;&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#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;--prune-empty --tag-name-filter cat -- --all
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;执行过程中终端会疯狂滚动 “Rewriting &amp;hellip;”，耐心等待即可。&lt;/p&gt;
&lt;h3 id=&#34;2-清理-git-内部备份&#34;&gt;2. 清理 Git 内部备份
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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;rm -rf .git/refs/original/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git reflog expire --expire&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;now --all
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git gc --prune&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;now
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;3-防止再次犯错在-gitignore-中永久屏蔽&#34;&gt;3. 防止再次犯错，在 &lt;code&gt;.gitignore&lt;/code&gt; 中永久屏蔽
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-plain&#34; data-lang=&#34;plain&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# JVM 崩溃日志
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hs_err_pid*.log
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;*.log
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;4删除本地log文件强制推送覆盖远程仓库&#34;&gt;4.删除本地log文件，强制推送覆盖远程仓库
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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;# 删除当前文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rm --force hs_err_pid*.log
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add .gitignore
&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;chore: 删除误上传的JVM崩溃日志 + 屏蔽所有.log文件提交&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 --force --all
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;5验证是否彻底干净&#34;&gt;5.验证是否彻底干净
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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 grep -w &lt;span class=&#34;s2&#34;&gt;&amp;#34;XXX&amp;#34;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;git rev-list --all&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果没有任何输出，则大功告成。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>VS Code图形化界面操作Git</title>
        <link>https://iamxurulin.github.io/p/vs-code%E5%9B%BE%E5%BD%A2%E5%8C%96%E7%95%8C%E9%9D%A2%E6%93%8D%E4%BD%9Cgit/</link>
        <pubDate>Thu, 19 Feb 2026 00:39:53 +0000</pubDate>
        
        <guid>https://iamxurulin.github.io/p/vs-code%E5%9B%BE%E5%BD%A2%E5%8C%96%E7%95%8C%E9%9D%A2%E6%93%8D%E4%BD%9Cgit/</guid>
        <description>&lt;p&gt;命令行操作git有一个比较大的缺点就是，写多行注释的时候不太方便，可以考虑使用VS Code的图形化界面操作。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开 VS Code，左侧点击【源代码管理】图标，也就是下图的①，在这里能看到所有修改过的文件；&lt;/li&gt;
&lt;li&gt;点击面板顶部的【+】，就等价于敲的 &lt;code&gt;git add .&lt;/code&gt;，把所有修改加入到暂存区；&lt;/li&gt;
&lt;li&gt;如果只想提交部分文件，只需要单独点击某个文件右侧的【+】即可；&lt;/li&gt;
&lt;li&gt;在面板顶部的【消息】输入框里，这里就可以直接换行写注释，想写多少行写多少行；&lt;/li&gt;
&lt;li&gt;写完注释后，点击输入框【提交】按钮，Git 就完成提交了；&lt;/li&gt;
&lt;li&gt;提交后，点击下图中的⑤，就可以直接把提交【推送】到远程的 &lt;code&gt;main&lt;/code&gt; 分支了。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/b59910f33038c584135227070a417c27-08e6517d.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;小贴士&#34;&gt;小贴士
&lt;/h3&gt;&lt;p&gt;1.【提交】完成后，面板上会出现一个【同步更改】按钮，点击这个按钮的话VS Code 会先执行 git pull（拉取）再执行 git push（推送），如果只需要执行推送的话，就不要点击这个按钮，直接点击图中的那个⑤。&lt;/p&gt;
&lt;p&gt;2.&lt;strong&gt;提交注释的行业规范前缀：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;feat:&lt;/code&gt; 新增功能（比如：feat: 新增用户登录功能）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fix:&lt;/code&gt; 修复 bug（比如：fix: 修复列表页数据为空的 bug）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docs:&lt;/code&gt; 只修改文档 / 注释（比如：docs: 更新接口文档说明）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;style:&lt;/code&gt; 只改代码格式（比如：style: 格式化代码缩进，无逻辑修改）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;refactor:&lt;/code&gt; 代码重构（比如：refactor: 重构登录模块的逻辑）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;test:&lt;/code&gt; 新增 / 修改测试代码（比如：test: 新增登录功能的单元测试）&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>本地改乱了代码，如何恢复成和 GitHub 仓库一致的干净版本？</title>
        <link>https://iamxurulin.github.io/p/%E6%9C%AC%E5%9C%B0%E6%94%B9%E4%B9%B1%E4%BA%86%E4%BB%A3%E7%A0%81%E5%A6%82%E4%BD%95%E6%81%A2%E5%A4%8D%E6%88%90%E5%92%8C-github-%E4%BB%93%E5%BA%93%E4%B8%80%E8%87%B4%E7%9A%84%E5%B9%B2%E5%87%80%E7%89%88%E6%9C%AC/</link>
        <pubDate>Wed, 18 Feb 2026 23:48:28 +0000</pubDate>
        
        <guid>https://iamxurulin.github.io/p/%E6%9C%AC%E5%9C%B0%E6%94%B9%E4%B9%B1%E4%BA%86%E4%BB%A3%E7%A0%81%E5%A6%82%E4%BD%95%E6%81%A2%E5%A4%8D%E6%88%90%E5%92%8C-github-%E4%BB%93%E5%BA%93%E4%B8%80%E8%87%B4%E7%9A%84%E5%B9%B2%E5%87%80%E7%89%88%E6%9C%AC/</guid>
        <description>&lt;p&gt;⚠️注意：以下操作会永久删除本地未提交的修改，请确保是已经真的不需要这些代码了！&lt;/p&gt;
&lt;h3 id=&#34;情况1&#34;&gt;情况1
&lt;/h3&gt;&lt;p&gt;在本地改了代码、删了文件、新增了文件，但是从来没有执行过 git add（暂存）、 git commit （提交）  。&lt;/p&gt;
&lt;p&gt;执行一行命令即可：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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 checkout .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;情况2&#34;&gt;情况2
&lt;/h3&gt;&lt;p&gt;&lt;font style=&#34;color:rgb(0, 0, 0);background-color:rgba(0, 0, 0, 0);&#34;&gt;情况1&lt;/font&gt;&lt;font style=&#34;color:rgb(0, 0, 0);background-color:rgba(0, 0, 0, 0);&#34;&gt;的命令只会恢复修改/删除的文件，不会删除本地新增的、从来没提交过的文件，如果想把这些新增的无用文件也一起删掉，恢复到绝对干净的状态，执行以下命令：&lt;/font&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-plain&#34; data-lang=&#34;plain&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clean -fd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;font style=&#34;color:rgb(0, 0, 0);background-color:rgba(0, 0, 0, 0);&#34;&gt;小贴士：&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&#34;color:rgb(0, 0, 0);background-color:rgba(0, 0, 0, 0);&#34;&gt;1.情况1的命令只负责还原 Git 认识的文件（修改过的、删除过的）。它不敢随便删除新创建的文件，因为它不知道那些新文件是不是重要数据。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font style=&#34;color:rgb(0, 0, 0);background-color:rgba(0, 0, 0, 0);&#34;&gt;2.情况2的命令，&lt;code&gt;-f&lt;/code&gt;是强制删除文件；&lt;code&gt;-d&lt;/code&gt; 是强制删除文件夹，执行后本地无任何多余文件。它只负责删除 Git 不认识的文件（新增加的）。它不管那些旧文件改没改。&lt;/font&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>已经 Push 到远程的提交，如何修改 Commit 信息？</title>
        <link>https://iamxurulin.github.io/p/%E5%B7%B2%E7%BB%8F-push-%E5%88%B0%E8%BF%9C%E7%A8%8B%E7%9A%84%E6%8F%90%E4%BA%A4%E5%A6%82%E4%BD%95%E4%BF%AE%E6%94%B9-commit-%E4%BF%A1%E6%81%AF/</link>
        <pubDate>Thu, 05 Feb 2026 14:58:05 +0000</pubDate>
        
        <guid>https://iamxurulin.github.io/p/%E5%B7%B2%E7%BB%8F-push-%E5%88%B0%E8%BF%9C%E7%A8%8B%E7%9A%84%E6%8F%90%E4%BA%A4%E5%A6%82%E4%BD%95%E4%BF%AE%E6%94%B9-commit-%E4%BF%A1%E6%81%AF/</guid>
        <description>&lt;p&gt;在 IDEA 中写完了新增各种工具类的代码，完成了 Commit 和 Push，代码已经到了 GitHub远程仓库。&lt;/p&gt;
&lt;p&gt;继续写着下一个功能的代码，突然，我发现刚才的Commit Message少写了一个已经完成的功能实现。&lt;/p&gt;
&lt;p&gt;此时，我的工作区里已经有正在修改但暂时还不想提交的文件：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/b8e4f93b897c439f81cbb5d6366ae436-580a2233.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;于是，我使用了 IDEA 的&lt;strong&gt;修正提交&lt;/strong&gt;功能，补全了信息，重新点击了 Commit：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/6152119abb054b6fba139e008b44ee54-f42d7db4.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;但是，当我再次点击 &lt;strong&gt;Push&lt;/strong&gt; 时，出现了如下报错：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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;error: failed to push some refs to &lt;span class=&#34;s1&#34;&gt;&amp;#39;github.com:xxx/xxx.git&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;!	refs/heads/main:refs/heads/main	&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;rejected&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;non-fast-forward&lt;span class=&#34;o&#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;hint: Updates were rejected because the tip of your current branch is behind
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hint: its remote counterpart.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这个错误说人话就是：推送到远程被拒绝了！并且Git 提示你需要先 Pull。&lt;/p&gt;
&lt;h3 id=&#34;原因分析&#34;&gt;原因分析
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;远程仓库&lt;/strong&gt;保存着&lt;strong&gt;修改前&lt;/strong&gt;的那次提交，我们把它记为 Commit A；&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;本地仓库&lt;/strong&gt;在我使用&lt;strong&gt;修正&lt;/strong&gt;功能时，Git 并没有直接修改 Commit A，而是&lt;strong&gt;把 Commit A 扔掉了，生成了一个全新的 Commit A’&lt;/strong&gt;，这个新的commit有着新的 Hash 值，新的备注。&lt;/p&gt;
&lt;p&gt;当我点击 Push 时，远程仓库发现现在推送的 Commit A’ 和已有的 Commit A 对不上，为了防止覆盖代码，Git 默认拦截了这次推送。&lt;/p&gt;
&lt;h3 id=&#34;解决方案&#34;&gt;解决方案
&lt;/h3&gt;&lt;p&gt;本来我想使用 IDEA 的图形界面，但是，强制推送的按钮居然是灰色的，选不上。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/584a76c044844b5f979852c665585ff5-58557365.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;所有，我使用命令行，在 IDEA 下方的 &lt;strong&gt;Terminal&lt;/strong&gt; 中输入以下命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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 push -f origin main
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;之后，就推送成功了。&lt;/p&gt;
&lt;h3 id=&#34;小贴士&#34;&gt;小贴士
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;这样操作后，GitHub 上并不会多出一条记录，GitHub 上的记录会&lt;strong&gt;原地刷新&lt;/strong&gt;。旧的提交（也就是少信息的那个）会被彻底删除，取而代之的是修改后的新提交。历史记录看起来非常干净，就像从来没有犯过错一样。&lt;/li&gt;
&lt;li&gt;工作区里那个已修改但没勾选的文件不会受到任何影响，可以在下一次准备好时再提交。&lt;/li&gt;
&lt;/ol&gt;
</description>
        </item>
        <item>
        <title>如何把本地文件夹和已存在的 GitHub 远程仓库同步</title>
        <link>https://iamxurulin.github.io/p/%E5%A6%82%E4%BD%95%E6%8A%8A%E6%9C%AC%E5%9C%B0%E6%96%87%E4%BB%B6%E5%A4%B9%E5%92%8C%E5%B7%B2%E5%AD%98%E5%9C%A8%E7%9A%84-github-%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%E5%90%8C%E6%AD%A5/</link>
        <pubDate>Wed, 28 Jan 2026 17:13:44 +0000</pubDate>
        
        <guid>https://iamxurulin.github.io/p/%E5%A6%82%E4%BD%95%E6%8A%8A%E6%9C%AC%E5%9C%B0%E6%96%87%E4%BB%B6%E5%A4%B9%E5%92%8C%E5%B7%B2%E5%AD%98%E5%9C%A8%E7%9A%84-github-%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%E5%90%8C%E6%AD%A5/</guid>
        <description>&lt;p&gt;在&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/qq_44678890/article/details/153917062?ops_request_misc=%257B%2522request%255Fid%2522%253A%252232fa1bfbf414848447621c5ad8e40633%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&amp;amp;request_id=32fa1bfbf414848447621c5ad8e40633&amp;amp;biz_id=0&amp;amp;utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-153917062-null-null.nonecase&amp;amp;utm_term=%E5%9B%BE%E5%BA%8A&amp;amp;spm=1018.2226.3001.4450&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GITHUB仓库上传图片并获取URL&lt;/a&gt; 这篇博客中介绍了如何搭建自己的图床，现在收集了一些图片，想更新一下里面的图片。&lt;/p&gt;
&lt;p&gt;那如何把本地文件夹和已存在的 GitHub 远程仓库同步呢？&lt;/p&gt;
&lt;p&gt;现在的问题是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;GitHub 上已经有一个仓库，里面有一些&lt;strong&gt;图片+README.md&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;本地已经建好了一个文件夹，里面放了很多其他图片&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我希望&lt;strong&gt;先把远程仓库的文件拉到本地&lt;/strong&gt;，&lt;strong&gt;再把本地新增的图片推送上去&lt;/strong&gt;，最终实现双向同步。&lt;/p&gt;
&lt;p&gt;下面分享一个&lt;strong&gt;安全且不容易出错&lt;/strong&gt;的流程，亲测可用。&lt;/p&gt;
&lt;h3 id=&#34;1进入现在的本地文件夹&#34;&gt;1.进入现在的本地文件夹
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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;nb&#34;&gt;cd&lt;/span&gt; /path/to/本地图片文件夹
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;2初始化并关联远程&#34;&gt;2.初始化并关联远程
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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 init
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote add origin git@github.com:/你的用户名/你的仓库名.git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;推荐使用ssh，原因和操作可参考&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/qq_44678890/article/details/156897818?ops_request_misc=%257B%2522request%255Fid%2522%253A%25221f28d3ab9dc693a75e1f21cb95ce575f%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&amp;amp;request_id=1f28d3ab9dc693a75e1f21cb95ce575f&amp;amp;biz_id=0&amp;amp;utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-156897818-null-null.nonecase&amp;amp;utm_term=ssh&amp;amp;spm=1018.2226.3001.4450&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;配置ssh解决https不稳定的问题&lt;/a&gt; 。&lt;/p&gt;
&lt;h3 id=&#34;3拉取远程内容&#34;&gt;3.拉取远程内容
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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;# 从名叫 “origin” 的远程仓库（通常就是你的GitHub仓库）拉取（fetch）最新的数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git fetch origin
&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;#把你的工作目录切换（checkout）到名叫 “main” 的分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout main
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这一步会把远程的文件下载到本地。&lt;/p&gt;
&lt;p&gt;这里解释一下&lt;code&gt;git fetch&lt;/code&gt;跟 &lt;code&gt;git pull&lt;/code&gt; 的区别：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;git fetch：只下载，不合并（安全、无副作用）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;git pull：相当于 &lt;code&gt;git fetch&lt;/code&gt; +&lt;code&gt; git merge&lt;/code&gt;（下载完立刻合并到当前分支，可能会改你本地文件）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;4添加本地文件并推送&#34;&gt;4.添加本地文件并推送
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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 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;合并本地图片到远程仓库&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 main
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;以上方法亲测可行，当然，如果害怕出错，最稳的做法是&lt;strong&gt;先 clone 远程仓库到一个新目录➡️复制本地文件进去 ➡️commit &amp;amp; push&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这样既能保留远程的文件，又能安全地把本地新增内容上传上去，避免各种奇怪的冲突。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>CRLF与LF的行分隔符警告⚠️</title>
        <link>https://iamxurulin.github.io/p/crlf%E4%B8%8Elf%E7%9A%84%E8%A1%8C%E5%88%86%E9%9A%94%E7%AC%A6%E8%AD%A6%E5%91%8A%EF%B8%8F/</link>
        <pubDate>Mon, 26 Jan 2026 16:20:07 +0000</pubDate>
        
        <guid>https://iamxurulin.github.io/p/crlf%E4%B8%8Elf%E7%9A%84%E8%A1%8C%E5%88%86%E9%9A%94%E7%AC%A6%E8%AD%A6%E5%91%8A%EF%B8%8F/</guid>
        <description>&lt;p&gt;在IDEA开发环境中，点击提交出现以下警告：
&lt;img src=&#34;https://iamxurulin.github.io/images/8553e99abef1ed10456168bc69f62d77-847631fb.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CR：Carriage Return（回车）&lt;/li&gt;
&lt;li&gt;LF：Line Feed（换行）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因为在Windows 系统中默认使用 CRLF（回车+换行）作为一行的结束，但是，在Linux/Mac 系统/Git 内部，默认使用 LF（仅换行）作为一行的结束。&lt;/p&gt;
&lt;p&gt;这个警告的意思是当前的文件里包含 Windows 风格的换行符 (CRLF)。&lt;/p&gt;
&lt;p&gt;而Git 的标准规范建议：&lt;/p&gt;
&lt;p&gt;在仓库（服务器）里统一保存为 LF 格式，以保证不管是谁（用 Windows 还是 Mac 的同事）拉取代码都能正常工作。&lt;/p&gt;
&lt;p&gt;如果点击“修复并提交”，则会执行命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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 config --global core.autocrlf &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这样的话，提交时会自动把本地的 CRLF 转换成 LF 存入仓库，保持仓库的纯净。&lt;br&gt;
在拉取时，会自动把仓库里的 LF 转换回 CRLF 给 Windows 系统用，保证在本地看代码不会出现乱码。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>推送错了仓库的解决办法</title>
        <link>https://iamxurulin.github.io/p/%E6%8E%A8%E9%80%81%E9%94%99%E4%BA%86%E4%BB%93%E5%BA%93%E7%9A%84%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/</link>
        <pubDate>Fri, 16 Jan 2026 17:59:10 +0000</pubDate>
        
        <guid>https://iamxurulin.github.io/p/%E6%8E%A8%E9%80%81%E9%94%99%E4%BA%86%E4%BB%93%E5%BA%93%E7%9A%84%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/</guid>
        <description>&lt;p&gt;今天在本地调好代码之后，准备把代码提交到仓库中，在命令行出现了以下报错：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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;To github.com:iamxurulin/static-resource.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;! &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;rejected&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;        main -&amp;gt; main &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;fetch first&lt;span class=&#34;o&#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;error: failed to push some refs to &lt;span class=&#34;s1&#34;&gt;&amp;#39;github.com:iamxurulin/static-resource.git&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hint: Updates were rejected because the remote contains work that you &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt; not
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hint: have locally. This is usually caused by another repository pushing to
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hint: the same ref. If you want to integrate the remote changes, use
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hint: &lt;span class=&#34;s1&#34;&gt;&amp;#39;git pull&amp;#39;&lt;/span&gt; before pushing again.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hint: See the &lt;span class=&#34;s1&#34;&gt;&amp;#39;Note about fast-forwards&amp;#39;&lt;/span&gt; in &lt;span class=&#34;s1&#34;&gt;&amp;#39;git push --help&amp;#39;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; details.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;我开始以为是GitHub（远程仓库）上有一些本地仓库里没有的更新，所以执行了强制推送的指令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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 push -f origin main
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;执行完操作后，我就跑去&lt;strong&gt;源代码仓库&lt;/strong&gt;查看，发现没有提交记录。&lt;/p&gt;
&lt;p&gt;后面跑去&lt;code&gt;static-resource&lt;/code&gt;仓库一看才发现，刚才把代码全部提交到这个仓库了，并且git 的推送机制把本地历史记录强制同步到了远程，把这个仓库原有的&lt;code&gt;commit&lt;/code&gt;记录全部覆盖了，想通过&lt;strong&gt;SHA哈希值&lt;/strong&gt;恢复到以前的版本也恢复不了。&lt;/p&gt;
&lt;p&gt;怎么办呢？&lt;/p&gt;
&lt;p&gt;GitHub 个人动态在执行强制推送时，会记录这一动作，但是我打开 GitHub 个人主页在页面中间的 Contribution activity（贡献动态）中也没有找到最近几小时的&lt;code&gt;commit&lt;/code&gt;记录。&lt;/p&gt;
&lt;p&gt;别急，Git 是有“后悔药”的。&lt;/p&gt;
&lt;p&gt;既然有两个仓库，本地电脑上是不是应该有两个文件夹？&lt;/p&gt;
&lt;p&gt;我进入到存放 static-resource 的文件夹，右键 -&amp;gt; Git Bash Here ，输入 &lt;code&gt;git log -1&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;这时，屏幕上显示了 &lt;code&gt;commit xxxxxxxx &lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;接下来，我在这个文件夹打开终端，输入：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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 push -f https://github.com/username/static-resource.git xxxxxxxx:main
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;之后，打开&lt;code&gt;static-resource&lt;/code&gt;仓库，发现已经恢复了。&lt;/p&gt;
&lt;p&gt;所以，后续推送的时候记得执行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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 remote -v
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;确认一下要推送到的远程仓库。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>下载-GitHub-仓库「单个文件夹」的方法</title>
        <link>https://iamxurulin.github.io/p/%E4%B8%8B%E8%BD%BD-github-%E4%BB%93%E5%BA%93%E5%8D%95%E4%B8%AA%E6%96%87%E4%BB%B6%E5%A4%B9%E7%9A%84%E6%96%B9%E6%B3%95/</link>
        <pubDate>Thu, 15 Jan 2026 12:25:31 +0000</pubDate>
        
        <guid>https://iamxurulin.github.io/p/%E4%B8%8B%E8%BD%BD-github-%E4%BB%93%E5%BA%93%E5%8D%95%E4%B8%AA%E6%96%87%E4%BB%B6%E5%A4%B9%E7%9A%84%E6%96%B9%E6%B3%95/</guid>
        <description>&lt;h4 id=&#34;方法1&#34;&gt;方法1
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;&lt;font style=&#34;color:rgb(31, 35, 41);background-color:rgba(0, 0, 0, 0);&#34;&gt;打开 GitHub，找到要下载的「目标文件夹」，&lt;/font&gt;&lt;strong&gt;&lt;font style=&#34;color:rgb(31, 35, 41);background-color:rgba(0, 0, 0, 0);&#34;&gt;点击进入这个文件夹的页面&lt;/font&gt;&lt;/strong&gt;&lt;font style=&#34;color:rgb(31, 35, 41);background-color:rgba(0, 0, 0, 0);&#34;&gt;&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font style=&#34;color:rgb(31, 35, 41);background-color:rgba(0, 0, 0, 0);&#34;&gt;复制浏览器地址栏里的「文件夹完整 URL」（比如：&lt;/font&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/letere-gzj/live2d-widget-v3/tree/main/Resources&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/letere-gzj/live2d-widget-v3/tree/main/Resources&lt;/a&gt;&lt;font style=&#34;color:rgb(31, 35, 41);background-color:rgba(0, 0, 0, 0);&#34;&gt;）&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font style=&#34;color:rgb(31, 35, 41);background-color:rgba(0, 0, 0, 0);&#34;&gt;打开 DownGit 官网：&lt;/font&gt;&lt;font style=&#34;color:rgb(31, 35, 41);background-color:rgba(0, 0, 0, 0);&#34;&gt;&lt;/font&gt;&lt;font style=&#34;color:rgb(31, 35, 41);background-color:rgba(0, 0, 0, 0);&#34;&gt; &lt;/font&gt;&lt;a class=&#34;link&#34; href=&#34;https://minhaskamal.github.io/DownGit/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;font style=&#34;color:rgb(0, 87, 255);background-color:rgba(0, 0, 0, 0);&#34;&gt;https://minhaskamal.github.io/DownGit/&lt;/font&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;font style=&#34;color:rgb(31, 35, 41);background-color:rgba(0, 0, 0, 0);&#34;&gt;把第2步复制的文件夹 URL 粘贴到 DownGit 的输入框里，点击「&lt;/font&gt;&lt;strong&gt;&lt;font style=&#34;color:rgb(31, 35, 41);background-color:rgba(0, 0, 0, 0);&#34;&gt;Download&lt;/font&gt;&lt;/strong&gt;&lt;font style=&#34;color:rgb(31, 35, 41);background-color:rgba(0, 0, 0, 0);&#34;&gt;」按钮即可&lt;/font&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;方法2&#34;&gt;&lt;font style=&#34;color:rgb(31, 35, 41);background-color:rgba(0, 0, 0, 0);&#34;&gt;方法2&lt;/font&gt;
&lt;/h4&gt;&lt;p&gt;可以选择在【桌面】打开命令行窗口：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;初始化克隆仓库&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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 clone --filter&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;blob:none --no-checkout https://github.com/用户名/仓库名.git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;进入克隆的仓库目录&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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;nb&#34;&gt;cd&lt;/span&gt; 仓库名
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;开启「稀疏检出」功能，告诉Git：我只需要指定文件夹&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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 sparse-checkout init --cone
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;指定要下载的「单个文件夹路径」（路径从仓库根目录开始写，不用加/）&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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 sparse-checkout &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; 文件夹路径/文件夹名称
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;拉取指定文件夹的所有内容&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果是仓库的其他分支名，比如master分支，需要将main换成master&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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 checkout main  
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;以下载&lt;a class=&#34;link&#34; href=&#34;https://github.com/letere-gzj/live2d-widget-v3/tree/main/Resources&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/letere-gzj/live2d-widget-v3/tree/main/Resources&lt;/a&gt;这个文件夹举例，依次输入以下指令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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 clone --filter&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;blob:none --no-checkout https://github.com/letere-gzj/live2d-widget-v3.git
&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;nb&#34;&gt;cd&lt;/span&gt; live2d-widget-v3
&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;git sparse-checkout init --cone
&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;git sparse-checkout &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; Resources
&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;git checkout main
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
        </item>
        <item>
        <title>配置ssh解决https不稳定的问题</title>
        <link>https://iamxurulin.github.io/p/%E9%85%8D%E7%BD%AEssh%E8%A7%A3%E5%86%B3https%E4%B8%8D%E7%A8%B3%E5%AE%9A%E7%9A%84%E9%97%AE%E9%A2%98/</link>
        <pubDate>Tue, 13 Jan 2026 12:26:04 +0000</pubDate>
        
        <guid>https://iamxurulin.github.io/p/%E9%85%8D%E7%BD%AEssh%E8%A7%A3%E5%86%B3https%E4%B8%8D%E7%A8%B3%E5%AE%9A%E7%9A%84%E9%97%AE%E9%A2%98/</guid>
        <description>&lt;p&gt;将本地文件推送到github仓库时会遇到各种各样的问题，比如：&lt;/p&gt;
&lt;!-- 这是一张图片，ocr 内容为： --&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/64fd978473f1f882604b64b66b938fb9-79183cab.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
 &lt;!-- 这是一张图片，ocr 内容为： --&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/5019cbd27b7de37ba1b02dde823b5f11-a57ba6db.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;!-- 这是一张图片，ocr 内容为： --&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/ee8bd4a0962c027db3a089bbde691a76-746345af.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;为了解决这个GitHub 官方都承认的 HTTPS 不稳定问题，可以考虑使用ssh：&lt;/p&gt;
&lt;h3 id=&#34;-生成-ssh-key如果以前没配过&#34;&gt;① 生成 SSH Key（如果以前没配过）
&lt;/h3&gt;&lt;p&gt;在 &lt;strong&gt;任意目录&lt;/strong&gt; 打开命令行窗口，执行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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;ssh-keygen -t ed25519 -C &lt;span class=&#34;s2&#34;&gt;&amp;#34;你的GitHub邮箱&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;一路 &lt;strong&gt;直接回车 × 3&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;成功后会看到类似：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-latex&#34; data-lang=&#34;latex&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Your identification has been saved in ...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;-复制-ssh-公钥关键&#34;&gt;② 复制 SSH 公钥（关键）
&lt;/h3&gt;&lt;p&gt;用windows的文本阅读器打开id_ed25519.pub文件，&lt;strong&gt;复制整行内容&lt;/strong&gt;（以 &lt;code&gt;ssh-ed25519&lt;/code&gt; 开头）&lt;/p&gt;
&lt;h3 id=&#34;-github-添加-ssh-key&#34;&gt;③ GitHub 添加 SSH Key
&lt;/h3&gt;&lt;p&gt;登录 GitHub账户，右上角头像 → Settings→ SSH and GPG keys→ New SSH key&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Title&lt;/strong&gt;：任意起一个名字（如 &lt;code&gt;my-ssh-key&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key&lt;/strong&gt;：粘贴刚才复制的内容&lt;/p&gt;
&lt;h3 id=&#34;-测试-ssh-是否通&#34;&gt;④ 测试 SSH 是否通
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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;ssh -T git@github.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;第一次会问：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-latex&#34; data-lang=&#34;latex&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Are you sure you want to continue connecting (yes/no)?
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;输入：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-latex&#34; data-lang=&#34;latex&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果看到：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-latex&#34; data-lang=&#34;latex&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Hi iamxurulin! You&amp;#39;ve successfully authenticated
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;说明 SSH 配置成功&lt;/p&gt;
&lt;h3 id=&#34;接下来把仓库从-https-切到-ssh&#34;&gt;⑤接下来把仓库从 HTTPS 切到 SSH
&lt;/h3&gt;&lt;p&gt;在 &lt;code&gt;public&lt;/code&gt; 目录执行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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 remote set-url origin git@github.com:iamxurulin/iamxurulin.github.io.git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;验证：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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 remote -v
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;可以看到：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-latex&#34; data-lang=&#34;latex&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;origin  git@github.com:iamxurulin/iamxurulin.github.io.git (fetch)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;origin  git@github.com:iamxurulin/iamxurulin.github.io.git (push)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;重新强制推送&#34;&gt;⑥重新强制推送
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#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 push -f origin main
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
        </item>
        <item>
        <title>Github仓库上传图片并获取URL</title>
        <link>https://iamxurulin.github.io/p/github%E4%BB%93%E5%BA%93%E4%B8%8A%E4%BC%A0%E5%9B%BE%E7%89%87%E5%B9%B6%E8%8E%B7%E5%8F%96url/</link>
        <pubDate>Sun, 26 Oct 2025 11:16:02 +0000</pubDate>
        
        <guid>https://iamxurulin.github.io/p/github%E4%BB%93%E5%BA%93%E4%B8%8A%E4%BC%A0%E5%9B%BE%E7%89%87%E5%B9%B6%E8%8E%B7%E5%8F%96url/</guid>
        <description>&lt;p&gt;网上有很多免费的在线图床能够做到快速上传图片并获取URL。&lt;/p&gt;
&lt;p&gt;但是作为一个纯粹的技术人，我还是想通过专业一点的手法实现这样一个功能。&lt;/p&gt;
&lt;p&gt;利用GitHub的公共仓库存储图片，再通过仓库的文件原始链接（Raw URL）获取图片地址，能够免费无限存储、URL永久有效。&lt;/p&gt;
&lt;p&gt;下面介绍采用Edge浏览器在GitHub网页端进行操作。&lt;/p&gt;
&lt;h3 id=&#34;操作步骤&#34;&gt;操作步骤
&lt;/h3&gt;&lt;p&gt;1.在 &lt;a class=&#34;link&#34; href=&#34;https://github.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GitHub官网&lt;/a&gt; 免费注册一个账号，并登录。&lt;/p&gt;
&lt;p&gt;2.创建一个公共仓库，因为GitHub的私有仓库文件URL需要权限验证，无法直接公开访问，所以这里必须创建&lt;strong&gt;公共仓库&lt;/strong&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「Repository name」：取一个名字（例如&lt;code&gt;picture-storage&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;「Description」：比如“图片存储库”。&lt;/li&gt;
&lt;li&gt;勾选「Public」（必须公开，否则图片URL无法直接访问）。&lt;/li&gt;
&lt;li&gt;勾选「Add a README file」（方便管理）。
&lt;img src=&#34;https://iamxurulin.github.io/images/d0bf6dbbb2534148bf0ede2462b619aa-9e47e9b9.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;在这里插入图片描述&#34;
	
	
&gt;
3.进入创建的仓库（例如 &lt;code&gt;https://github.com/你的用户名/picture-storage&lt;/code&gt;），上传图片：
&lt;img src=&#34;https://iamxurulin.github.io/images/7054051b810b436593c63fdf44f1e23e-8a6e70e7.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;在这里插入图片描述&#34;
	
	
&gt;&lt;/li&gt;
&lt;li&gt;点击「+」图标，选择「Upload files」&lt;/li&gt;
&lt;li&gt;点击「choose your files」选择本地的图片进行上传&lt;/li&gt;
&lt;li&gt;选择好图片后在「Commit changes」区域填写备注（例如“上传头像图片”），然后点击「Commit changes」确认上传。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;4.上传后，图片会保存在仓库中，由于普通预览链接无法直接显示图片，需要获取其“原始文件链接”（Raw URL）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在仓库中找到刚上传的图片，点击图片名称进入预览页面（例如 &lt;code&gt;https://github.com/你的用户名/picture-storage/blob/main/xxx.png&lt;/code&gt;）；&lt;/li&gt;
&lt;li&gt;在图片预览页面，右键点击图片，选择「在新标签页中打开图像」；&lt;/li&gt;
&lt;li&gt;在新的标签页地址栏的URL就是Raw链接（例如
&lt;code&gt;https://raw.githubusercontent.com/你的用户名/picture-storage/main/xxx.png&lt;/code&gt;），直接复制即可。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://iamxurulin.github.io/images/ec0bd540ed334d9fbecf4da0186e35bf-7b091d03.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;在这里插入图片描述&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;通过以上步骤，即可快速通过GitHub上传图片并获取可用的URL，适用于Markdown文档、个人博客、社交平台等场景。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
