<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>还是要学习一个 - 分类 - Isaac's Blog</title><link>https://neutralmilkzzz.github.io/categories/%E8%BF%98%E6%98%AF%E8%A6%81%E5%AD%A6%E4%B9%A0%E4%B8%80%E4%B8%AA/</link><description>还是要学习一个 - 分类 - Isaac's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><copyright>This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.</copyright><lastBuildDate>Tue, 09 Dec 2025 19:44:47 +0800</lastBuildDate><atom:link href="https://neutralmilkzzz.github.io/categories/%E8%BF%98%E6%98%AF%E8%A6%81%E5%AD%A6%E4%B9%A0%E4%B8%80%E4%B8%AA/" rel="self" type="application/rss+xml"/><item><title>Github指南:2(终)</title><link>https://neutralmilkzzz.github.io/contents/posts/newfile/</link><pubDate>Tue, 09 Dec 2025 19:44:47 +0800</pubDate><author>xxxx</author><guid>https://neutralmilkzzz.github.io/contents/posts/newfile/</guid><description><![CDATA[<p>这一章足够我们搞定90%的东西了，剩下的10%也没必要现在学。
<code>git fetch</code>就是拷贝远程仓库，但是对现在现有的仓库没有任何影响，单纯是抄过来。
<code>git pull</code> = <code>git fetch</code> + <code>git merge</code>
<code>git pull --rebase</code> = <code>git fetch</code> + <code>git rebase</code>
<code>git push</code>就是传过去。
差不多了 收工。
<a href="https://learngitbranching.js.org" target="_blank" rel="noopener noreffer ">https://learngitbranching.js.org</a>是最最最好的git可视化学习网站，如果你想一小时学完，用它就行。</p>
]]></description></item><item><title>Github指南:1</title><link>https://neutralmilkzzz.github.io/github1/</link><pubDate>Tue, 09 Dec 2025 17:01:28 +0800</pubDate><author>xxxx</author><guid>https://neutralmilkzzz.github.io/github1/</guid><description><![CDATA[<p>在学习github的使用前，我们得先掌握git。</p>
<h3 id="11-git与-git-commit">1.1 git与 git commit</h3>
<p>git仓库的提交记录保存的是你的目录下所有文件的快照。就像复制了整个目录，再黏贴。
有几个特点</p>
<ul>
<li>git希望提交记录轻量，因此每次提交后，他只会打包所有更新的部分作为一个提交记录。</li>
<li>git会保存每一次历史记录。因此可以维护提交历史，对大家都有好处。
使用<code>git commit</code>即可提交。</li>
</ul>
<h3 id="12-git-branch">1.2 git branch</h3>
<blockquote>
<p>当你搭建炒股bot的时候，你可能会尝试100种策略，但最终你只会使用最赚钱的那个。因此你得回到历史某一个提交节点上。</p>
</blockquote>
<p>Git 的分支也非常轻量。它们只是简单地指向某个提交记录.
<code>git branch {随便起个名字。比如说 richbot}</code>
这样就创建好了一个指向当前状态的节点了！</p>
<hr>
<p>为了回到我们想要的节点，我们需要使用
<code>git checkout (你取的那个名字）</code></p>
<h3 id="13-git-merge">1.3 git merge</h3>
<blockquote>
<p>我一个trading bot出问题了！我要修复这个bug，但是我的同事正在进一步开发bot，因此我需要在分支上写一个bugfix，再回到main，让主线也包含这个修复bug的插件。</p>
</blockquote>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-git">
        <span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">git checkout main
</span></span><span class="line"><span class="cl">git pull origin main
</span></span><span class="line"><span class="cl">git merge bugFix ###这个是在main主线上把bugfix的内容merge进去。
</span></span><span class="line"><span class="cl">git push origin main</span></span></code></pre></div></div>
<h3 id="14-rebase">1.4 rebase</h3>
<p>merge虽然好，但是我们有时候想要线性的维护记录，我们希望在主线上这就是一个修复bug的更新，而不是什么莫名其妙的branch，这个时候就可以用rebase。</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-git">
        <span class="code-title"><i class="arrow fas fa-angle-right fa-fw" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h fa-fw" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy fa-fw" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">git branch bugFix | git checkout bugFix
</span></span><span class="line"><span class="cl">git commit
</span></span><span class="line"><span class="cl">git rebase main
</span></span><span class="line"><span class="cl">git checkout main
</span></span><span class="line"><span class="cl">git rebase bugFix</span></span></code></pre></div></div>
<hr>
<p>2.0: HEAD</p>
<blockquote>
<p>当然，给每一个节点一个branch，可以随时回归，很不错，但是这个设计哲学也太烂了吧！
所以说，我们得掌握在提交树上移动的办法。</p>
</blockquote>
<p>HEAD 是一个对当前所在分支的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。</p>
<p>HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。</p>
<p>HEAD 通常情况下是指向分支名的（如 bugFix）。在你提交时，改变了 bugFix 的状态，这一变化通过 HEAD 变得可见。</p>
<hr>
<p>好在哪怕你不给每一个节点起名，节点自己也有一个40位的哈希值<code>fed2da64c0efc5293610bdd892f82a58e8cbc5d8</code>像这样，你只要输入<code>git checkout fed2</code>然后tab自动补全就好啦！</p>
<hr>
<p>其实不好。
这tm谁记得住哈希值
还好我们有<strong>相对引用</strong>
使用<code>git checkout HEAD^</code>即可回到上一条。
<code>^</code>表示上一条。系统的讲，你可以选中一个已有的好记的节点，然后移动到附近。
一条一条返回也有点慢，不如用<code>~</code>批量返回。
还可以用<code>git branch -f (branch名) （位置）</code>来改变分支的指向。</p>
<h3 id="21-撤回">2.1 撤回！</h3>
<blockquote>
<p>不是Ctrl Z
两套方法。</p>
</blockquote>
<ol>
<li>用git reset,直接在本地取消一次提交，回到上一个节点。不过在远端没人知道。</li>
<li>用git revert，同样是取消，但是是以新的节点的形式，<em>我的母节点的母节点是我</em>这样方便提交到远端。</li>
</ol>
]]></description></item><item><title>Github指南：0</title><link>https://neutralmilkzzz.github.io/github%E6%8C%87%E5%8D%97/</link><pubDate>Tue, 02 Dec 2025 19:19:16 +0800</pubDate><author>xxxx</author><guid>https://neutralmilkzzz.github.io/github%E6%8C%87%E5%8D%97/</guid><description><![CDATA[<p>虽然HKU CS大一用到github的机会不多，但是早点掌握肯定不是个坏事。
MIT大名鼎鼎的Missing Semester里就有一节课讲了git和版本控制
<div class="bilibili"><iframe src="//player.bilibili.com/player.html?bvid=BV1Wh4y1s7Lj&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe></div>

但是根据我对本篇博客的受众的推测(假定真的有受众)，多半是还没搞明白git和版本控制到底有啥用，所以我要开始碎碎念了。</p>
<h1 id="碎碎念">碎碎念</h1>
<p>我真正意识到需要版本控制的经历来自于玩polymarket。
我从github上clone了一个跟单bot，调好了api，用自己电脑跑了一个晚上赚了7美刀。
我爽飞了。开始设置止盈止损，这个时候还能赚一点钱。
然后我开始排列组合各种alpha因子，反弹率，订单簿。抢尾盘。
然后我跑了一个晚上亏了50美元。
这个悲剧告诉了我两个道理：</p>
<ul>
<li>别用自己电脑跑bot，用服务器</li>
<li>放心修改bot的前提是，你得再爆亏之后，随时回到赚钱版本的老bot
That&rsquo;s why we need version control.</li>
</ul>
<h1 id="github指北">Github指北</h1>
<p>鉴于我会的也不多，我只教最最简单的操作。</p>
<p>如你所见，我有一个账号，上面有很多东西。以<strong>CS61A</strong>为例，我给你示范一下<strong>如何下载</strong>。</p>
<p>我们发现这个项目的网址，于是在linux的命令行中输入</p>
<p><code>git clone https://github.com/Neutralmilkzzz/CS61A-2025-Fall</code></p>
<p>我就把他克隆了下来。</p>
<h2 id="2-修改">2 修改</h2>
<p><code>touch change.py</code>之后，我成功地做到了在原文件夹捏造了一个python文件。
你也可以干别的坏事。</p>
<h2 id="3-同步更新">3 同步更新</h2>
<p><code>git pull --rebase origin main</code>
其实pull就行了，&ndash;rebase是处理冲突的</p>
<h2 id="4-上传新文件">4 上传新文件</h2>
<p><code>git add sth</code>
一般来说我们也不在意上传哪部分，一股脑全扔上去得了，那么就用
<code>git add .</code>就行</p>
<h2 id="5-提交说明">5 提交说明</h2>
<p>解释一下你为啥要更新
<code>git commit -m &quot;upload IntList.java&quot;</code></p>
<h2 id="6-认证身份">6 认证身份</h2>
<p><del>臭名昭著</del>大名鼎鼎的cc好课CCST9017教会了我们RSA，也告诉了我们：一对私钥与公钥可以用于鉴别身份，因为只有私钥的拥有者能生成一个数字签名（Digital Signature）。任何拥有公钥的人，都无法通过公钥推算出私钥，但可以使用公钥来验证该数字签名是否确实由匹配的私钥所创建。因此，公钥的使用者可以确认签名者（即私钥拥有者）的身份是真实的。
github为了保证绝对安全，在2021年之后不再能用账号密码登录，而是转为ssh key
首先你需要在本地生成一对ed25519的密钥，把公钥上传到github/settings/ssh key，加入一个新的key。
这串代码我忘了，keygen什么的，问问ai，他肯定知道。
然后登录
<code>ssh -T git@github.com</code>
收到这个
<code>Hi XXXXXX! You've successfully authenticated, but GitHub does not provide shell access.</code>
就说明你成功了</p>
<h2 id="7-设置远程仓库为ssh模式">7 设置远程仓库为ssh模式</h2>
<p><code>git remote set-url origin git@github.com:Neutralmilkzzz/XXXXXXXXX.git</code></p>
<h2 id="8-推送">8 推送</h2>
<p><code>git push origin main</code></p>
<p>这就是github基本操作了。下次我们仔细讲讲git</p>
]]></description></item></channel></rss>