<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Github Template on Sisy's Blog</title><link>https://blog.sisy.cc/tags/github-template/</link><description>Recent content in Github Template on Sisy's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Sun, 03 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.sisy.cc/tags/github-template/index.xml" rel="self" type="application/rss+xml"/><item><title>使用 Github Template 时，如何同步源 Template 的上游更新？</title><link>https://blog.sisy.cc/p/%E4%BD%BF%E7%94%A8-github-template-%E6%97%B6%E5%A6%82%E4%BD%95%E5%90%8C%E6%AD%A5%E6%BA%90-template-%E7%9A%84%E4%B8%8A%E6%B8%B8%E6%9B%B4%E6%96%B0/</link><pubDate>Sun, 03 May 2026 00:00:00 +0000</pubDate><guid>https://blog.sisy.cc/p/%E4%BD%BF%E7%94%A8-github-template-%E6%97%B6%E5%A6%82%E4%BD%95%E5%90%8C%E6%AD%A5%E6%BA%90-template-%E7%9A%84%E4%B8%8A%E6%B8%B8%E6%9B%B4%E6%96%B0/</guid><description>&lt;img src="https://blog.sisy.cc/p/%E4%BD%BF%E7%94%A8-github-template-%E6%97%B6%E5%A6%82%E4%BD%95%E5%90%8C%E6%AD%A5%E6%BA%90-template-%E7%9A%84%E4%B8%8A%E6%B8%B8%E6%9B%B4%E6%96%B0/img/cover.png" alt="Featured image of post 使用 Github Template 时，如何同步源 Template 的上游更新？" /&gt;&lt;h2 id="正文"&gt;正文
&lt;/h2&gt;&lt;p&gt;之前写了一个 DN42 网络信息展示面板，MoonWX 希望后续用我的原仓库来搭建他自己的面板。因此我把原项目重构成了一个 Github Template，然后自己重新用这个 Template 创建了一个新的仓库来放置我自己的信息。我说保持复用性是对的。&lt;/p&gt;
&lt;p&gt;但是问题来了，Github Template 的上游更新无法直接同步到下游仓库。也就是说，如果我在 Template 仓库里修复了一个 bug 或者添加了一个很好的新功能，下游仓库是无法自动获得这个更新的。&lt;/p&gt;
&lt;p&gt;正好今天发现一个小前端问题，在 Template 仓库里修复了这个问题，下面借此实操一下同步。&lt;/p&gt;
&lt;p&gt;首先你需要在本地的下游仓库里添加一个新的上游远程仓库，在我这里就是：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git remote add upstream https://github.com/SisypheOvO/DN42-Network-Info-Template.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git remote -v &lt;span class="c1"&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;或者其 SSH 形式。接下来，就可以拉取更新了：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git fetch upstream
&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;这会将上游 (upstream) 的所有新提交下载到本地，但不会自动修改代码。接下来有两种方式可以选择用于将更新合并到你自己的主分支。&lt;/p&gt;
&lt;h3 id="一git-merge"&gt;一：git merge
&lt;/h3&gt;&lt;p&gt;创建一个合并提交来记录更新，能清晰地保留两个分支的历史，处理冲突时也相对直观安全。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git checkout main &lt;span class="c1"&gt;# 切换到自己的主分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git merge upstream/main &lt;span class="c1"&gt;# 将上游的 main 分支合并到当前分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 此处处理可能出现的冲突 ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git push origin main &lt;span class="c1"&gt;# 将合并后的更新推送到 GitHub&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;在合并过程中，可能会遇到冲突，而且第一次概率很大，因为作为 Template 使用源仓库时，多半还是要改一些配置和数据才能为己用的。如果出现了冲突，Git 会提示哪些文件存在冲突。之后如果需要查看哪些文件仍未解决冲突，可以使用：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git status
&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="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-plaintext" data-lang="plaintext"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; HEAD
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;（你当前分支的内容，即你自己的数据相关配置）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;=======
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;（upstream/main 分支的内容，即模板的样式更新）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; upstream/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;code&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;/code&gt;、&lt;code&gt;=======&lt;/code&gt;、&lt;code&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;这些标记行&lt;/strong&gt;。然后，像普通提交一样，标记冲突已解决并完成合并：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git add .
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git commit -m &lt;span class="s2"&gt;&amp;#34;Merge upstream&amp;#39;s update and resolve conflicts&amp;#34;&lt;/span&gt; &lt;span class="c1"&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;h3 id="二git-rebase"&gt;二：git rebase
&lt;/h3&gt;&lt;p&gt;如果希望保持提交历史是一条整洁、线性的直线，可以使用 &lt;code&gt;git rebase&lt;/code&gt;。它会将你的提交“重新播放”到上游更新的顶部。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git checkout main &lt;span class="c1"&gt;# 切换到自己的主分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git rebase upstream/main &lt;span class="c1"&gt;# 执行变基操作&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 此处处理可能出现的冲突 ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git push origin main --force &lt;span class="c1"&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;变基过程中如果遇到冲突，Git 会暂停并提示（类似 merge）。解决步骤如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;同上手动编辑冲突文件，解决冲突。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; git add &amp;lt;冲突文件&amp;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;/li&gt;
&lt;li&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; git rebase --continue
&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;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;重复上述步骤，直到所有提交都成功应用&lt;/strong&gt;。如果过程中遇到困难，可以用 &lt;code&gt;git rebase --abort&lt;/code&gt; 安全地终止变基操作，回到变基前的状态。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="冷知识"&gt;冷知识
&lt;/h2&gt;&lt;p&gt;如果你本地的 &lt;code&gt;git config user.email&lt;/code&gt; 输出的配置不是认证邮箱，你的 commit 在 GitHub 上会显示为灰色默认头像，而且 commit 状态是 Unverified。&lt;/p&gt;
&lt;p&gt;这时候如果你去 GitHub 的设置里把邮箱加上，你的 commit 就会从黄色的 Unverified 变回绿色的 Verified，这其实说明 commit 的 Verified 状态不是静态的。&lt;/p&gt;
&lt;p&gt;同样这（应该）也适用于 &lt;code&gt;git config user.name&lt;/code&gt;。&lt;/p&gt;</description></item></channel></rss>