<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>小教学 on RinChord的小本本</title>
        <link>https://blog.rinchord.top/categories/%E5%B0%8F%E6%95%99%E5%AD%A6/</link>
        <description>Recent content in 小教学 on RinChord的小本本</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Wed, 10 Dec 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.rinchord.top/categories/%E5%B0%8F%E6%95%99%E5%AD%A6/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>PID基本知识</title>
        <link>https://blog.rinchord.top/p/pid%E5%9F%BA%E6%9C%AC%E7%9F%A5%E8%AF%86/</link>
        <pubDate>Wed, 10 Dec 2025 00:00:00 +0000</pubDate>
        
        <guid>https://blog.rinchord.top/p/pid%E5%9F%BA%E6%9C%AC%E7%9F%A5%E8%AF%86/</guid>
        <description>


  &lt;blockquote&gt;
    &lt;p&gt;参考内容&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.bilibili.com/video/BV1G9zdYQEr3&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.bilibili.com/video/BV1G9zdYQEr3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://zh.wikipedia.org/wiki/%e7%a9%8d%e5%88%86%e9%a3%bd%e5%92%8c&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;积分饱和 - 维基百科，自由的百科全书&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

  &lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;PID基本理论公式&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
$$
out(t)=K_p*error(t)+K_i*\int^{t}_{0}error(t)dt+K_d*\frac{derror(t)}{dt}
$$&lt;p&gt;&lt;br&gt;
&lt;img src=&#34;https://blog.rinchord.top/p/pid%E5%9F%BA%E6%9C%AC%E7%9F%A5%E8%AF%86/Y6dedMEd0zuAkJbBigXtDrCY.png&#34;
	width=&#34;1290&#34;
	height=&#34;447&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;image-20251010195316893&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;288&#34;
		data-flex-basis=&#34;692px&#34;
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;比例项&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;比例项的输出仅取决于当前时刻的误差，$K_p$越大，第一部分的值越大，系统响应越快，==稳态误差==越小，但==超调==也会增加。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;稳态误差&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;一种处于非理想情况下会出现的外部因素，如：电机的摩擦力，加热板的自然散热等&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;纯比例项控制时，如果误差为0，则$K_p$比例也是0，给被控对象的输入就是0，此时，被控对象可能会自发地向一个方向偏移而产生误差&lt;/p&gt;
&lt;p&gt;这个误差会让$K_p$开始负反馈调控，当调控输出力度与自发偏移力度一致时，系统将达到稳态 (如：电机的输出与电机的摩擦达到一致)。&lt;/p&gt;



  &lt;blockquote class=&#34;alert alert-tip&#34;&gt;
    &lt;p class=&#34;alert-heading&#34;&gt;
      💡
      
        Tip
      
    &lt;/p&gt;
    &lt;p&gt;思考： 系统认为当前的输出可以让被控设备达到稳态，但实际上被控设备存在一些未知的阻力。&lt;/p&gt;
&lt;p&gt;系统想要设备更靠近目标状态一些，但问题是设备上有阻力，当前误差所带来的驱动力太小的话是没办法克服阻力的。&lt;/p&gt;
&lt;p&gt;所以，当驱动力=阻力时，设备就没办法继续向目标状态靠近，而是进入稳态了  在这种情况下的K_p提供了对抗摩擦力的输出&lt;/p&gt;
  &lt;/blockquote&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;给系统输入0，系统自发偏移的方向就是稳态误差的方向。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.rinchord.top/p/pid%E5%9F%BA%E6%9C%AC%E7%9F%A5%E8%AF%86/WMWg2ngpJclG8QNZOczFKRs-.png&#34;
	width=&#34;889&#34;
	height=&#34;580&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;image-20251010202023517&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;153&#34;
		data-flex-basis=&#34;367px&#34;
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;积分项&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;积分的本质是&lt;code&gt;累加&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;$K_i$会不断累加过去的误差（包括正误差和负误差),将之作为当前的输出。&lt;/p&gt;
&lt;p&gt;这意味着$K_i$的输出是具有滞后性的，在系统输入目标改变一段时间后，输出才会到达目标值。（图一）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;$K_i$会消除稳态误差的原因是：如果系统无法达到目标值，它所提供的输出会越来越大，&lt;strong&gt;直到&lt;/strong&gt;系统达到目标值为止。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在$K_p$和$K_i$联合运作时，先是$K_p$快速地提高输出，然后在稳态误差的作用下停止输出，此后$K_i$再依靠不断累计的输出将被控设备运动到位。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.rinchord.top/p/pid%E5%9F%BA%E6%9C%AC%E7%9F%A5%E8%AF%86/SnCMU5iqa1h0L8iPRP2htmkF.png&#34;
	width=&#34;1271&#34;
	height=&#34;512&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;image-20251010203557427&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;248&#34;
		data-flex-basis=&#34;595px&#34;
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;微分项&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;微分的本质是求误差变化的斜率，而斜率和当前时刻附近误差变化的趋势有关系&lt;/li&gt;
&lt;li&gt;误差变化的越大，误差变化率的斜率就越大根据斜率来输出阻力，就可以阻碍误差的急剧变化。
&lt;ul&gt;
&lt;li&gt;当误差急剧升高时，对误差求导得到的斜率就会变大&lt;/li&gt;
&lt;li&gt;当误差急剧降低时，对误差求导得到的斜率就会变小&lt;/li&gt;
&lt;li&gt;直接使用这个斜率作为参数再乘以一个常量就可以给系统引入阻尼了。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;如果$K_d$给的过大，阻尼就会过大，此时系统会表现得“卡卡的”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.rinchord.top/p/pid%E5%9F%BA%E6%9C%AC%E7%9F%A5%E8%AF%86/5oFtDv1jHaDqZh4MuBJhYurV.png&#34;
	width=&#34;574&#34;
	height=&#34;249&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;image-20251010205004615&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;230&#34;
		data-flex-basis=&#34;553px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;倒立摆电机编码器在不同$K_d$时的输出值拟合曲线。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;将PID离散化&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.rinchord.top/p/pid%E5%9F%BA%E6%9C%AC%E7%9F%A5%E8%AF%86/8TfW2X9exXHWmlapGSKkBoNw.png&#34;
	width=&#34;266&#34;
	height=&#34;216&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;image-20251010232522266&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;123&#34;
		data-flex-basis=&#34;295px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;原有的pid公式是一个线性过程，适用于模拟电路。但是在数字电路中并不适用，所以需要进行离散化&lt;/p&gt;
&lt;p&gt;原有公式$out(t)=K_p&lt;em&gt;error(t)+K_i&lt;/em&gt;\int^{t}_{0}error(t)dt+K_d*\frac{derror(t)}{dt}$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;通过面积法，可以把$K_i$转换为$K_i*T\sum^t_{j=0}error(j)$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;其中$T$为单个步长，即“所有矩形面积相加之和”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;通过中值定理，可以把$K_d$转换为$K_d*\frac{error(k)-error(k-1)}{T}$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;公式中分数的含义即对应“矩形的中值”。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最终得到公式&lt;br&gt;
&lt;/p&gt;
$$
out(t)=K_p*error(k)+K_i*T\sum^t_{j=0}error(j)+K_d*\frac{error(k)-error(k-1)}{T}
$$&lt;p&gt;&lt;br&gt;
当然我们也可以把T并入到$K_i$和$K_d$中，也就是&lt;br&gt;
&lt;/p&gt;
$$
out(t)=K_p*error(k)+K_i*\sum^t_{j=0}error(j)+K_d*error(k)-error(k-1)
$$&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;全量式PID和增量式PID&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;全量式PID&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;即传统式PID&lt;/li&gt;
&lt;li&gt;优势
&lt;ul&gt;
&lt;li&gt;可以直接输出给目标设备&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;增量式PID&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;即输出为上一次的增量(或负增量)&lt;/li&gt;
&lt;li&gt;优势
&lt;ul&gt;
&lt;li&gt;计算方便：只需要得到&lt;code&gt;out(k)&lt;/code&gt; &lt;code&gt;out(k-1)&lt;/code&gt; &lt;code&gt;out(k-2)&lt;/code&gt;这三个值就可以计算增量了&lt;/li&gt;
&lt;li&gt;限幅更方便（防止积分饱和&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;与过摆）&lt;/li&gt;
&lt;li&gt;因为会持续存储控制状态，在手动切换到自动的过渡中会更平缓(全量式pid需要一定的时间来进行适应)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;计算公式：$\Delta out(k)=out(k)-out(k-1)$&lt;/li&gt;
&lt;/ul&gt;
$$
\Delta out(k)=[K_p*(error(k)-error(k-1))]+[K_i*error(k)]+[K_d*(error(k)-2error(k-1)+error(k-2)])
$$&lt;hr&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;更高级的PID&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;积分限幅&lt;/p&gt;
&lt;p&gt;积分分离(线性&amp;amp;非线性)&lt;/p&gt;
&lt;p&gt;【待补充】&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;积分饱和是指&lt;a class=&#34;link&#34; href=&#34;https://zh.wikipedia.org/wiki/PID%e6%8e%a7%e5%88%b6%e5%99%a8&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;PID控制器&lt;/a&gt;或是其他有&lt;a class=&#34;link&#34; href=&#34;https://zh.wikipedia.org/wiki/%e7%a9%8d%e5%88%86%e5%99%a8&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;积分器&lt;/a&gt;的控制器中的现象，是指误差有大幅变化（例如大幅增加），积分器因为误差的大幅增加有很大的累计量，因此造成&lt;a class=&#34;link&#34; href=&#34;https://zh.wikipedia.org/wiki/%e8%bf%87%e5%86%b2&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;过冲&lt;/a&gt;，而且当误差变为负时，其过冲仍维持一段时间之后才恢复正常的情形&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>AutoLab 基本使用</title>
        <link>https://blog.rinchord.top/p/autolab-%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/</link>
        <pubDate>Wed, 23 Apr 2025 00:00:00 +0000</pubDate>
        
        <guid>https://blog.rinchord.top/p/autolab-%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/</guid>
        <description>&lt;p&gt;因为好多人（包括作者）都不太会用Autolab，所以这篇小贴士便应运而生&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.rinchord.top/p/autolab-%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/4149d28e49d3424c818f7bab4dd8079f.png&#34;
	width=&#34;1000&#34;
	height=&#34;495&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;image-6-1.png&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;202&#34;
		data-flex-basis=&#34;484px&#34;
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;01-在提交代码时&#34;&gt;01: 在提交代码时
&lt;/h2&gt;&lt;p&gt;提交代码前请务必把你的&lt;code&gt;IDE\文本编辑器\任何可以写出代码的东西&lt;/code&gt;的编码调整为UTF-8&lt;br&gt;
（具体怎么做请自行Google）&lt;/p&gt;
&lt;h2 id=&#34;02-如果判卷结果与预期不一致&#34;&gt;02: 如果判卷结果与预期不一致
&lt;/h2&gt;&lt;p&gt;如果你的代码被判定为0分，这意味着以下几种可能性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你的代码具有语法错误&lt;/li&gt;
&lt;li&gt;某个返回值为0以外的其他值&lt;/li&gt;
&lt;li&gt;Autolab行为异常&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;03-在提交代码后&#34;&gt;03: 在提交代码后
&lt;/h2&gt;&lt;p&gt;在你提交代码后，如果有某几项分数显示为“-”（而不是诸如“0”这样的数字），这意味着该项目将由人工评分。&lt;/p&gt;
&lt;h2 id=&#34;04-大小写严格匹配&#34;&gt;04: 大小写严格匹配
&lt;/h2&gt;&lt;p&gt;autolab严格匹配&lt;code&gt;大小写&lt;/code&gt;、&lt;code&gt;全半角&lt;/code&gt;、&lt;code&gt;空格&lt;/code&gt;等字符，请仔细检查后继续提交&lt;/p&gt;
&lt;h2 id=&#34;05-有限的提交次数&#34;&gt;05: 有限的提交次数
&lt;/h2&gt;&lt;p&gt;一般来讲，autolab有限定的提交次数【一般为三次】。当你的提交超过限定次数后，将存在按比例扣分的惩罚，请谨慎提交。&lt;/p&gt;
&lt;h2 id=&#34;06-关于如何查看判卷结果与答案&#34;&gt;06: 关于如何查看判卷结果与答案
&lt;/h2&gt;&lt;p&gt;Autolab内网网址:http://172.31.13.200/&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.rinchord.top/p/autolab-%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/1184ab92a72042cf8b93463aa8e6731e.png&#34;
	width=&#34;1000&#34;
	height=&#34;505&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;image-1-3.png&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;198&#34;
		data-flex-basis=&#34;475px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.rinchord.top/p/autolab-%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/45ddf498c48a4d859696a7c57490032e.png&#34;
	width=&#34;1000&#34;
	height=&#34;553&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;image-2-1.png&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;180&#34;
		data-flex-basis=&#34;433px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.rinchord.top/p/autolab-%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/a713509c5f294be0aa21296a9aa2c301.png&#34;
	width=&#34;1000&#34;
	height=&#34;549&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;image-3-3.png&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;182&#34;
		data-flex-basis=&#34;437px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Grace day属于没有在C语言课上运用的机制。本意是给每个学生可以自由分配迟交天数。假设一个课给了每个学生5个Grace Day，那么理想情况就是这个学生因为自己的私事/身体原因等，自由的决定一些特定的作业进行迟交。而迟交的天数如果总共不超过5，都不会额外扣分。&lt;/p&gt;
&lt;h2 id=&#34;07-避免程序无法通过&#34;&gt;07: 避免程序无法通过
&lt;/h2&gt;


  &lt;blockquote&gt;
    &lt;p&gt;autolab很大一部分时候循环输出后面要加一个空格再换行，这样可以大大增加程序输出格式通过率（Hu，2024）&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;08-comment给分方式&#34;&gt;08: Comment给分方式
&lt;/h2&gt;&lt;p&gt;自动判卷程序依靠注释数量给分，请多写几条注释~~（个人测试：一般写10条就够）~~&lt;/p&gt;
&lt;h2 id=&#34;09-遇到makefile报错&#34;&gt;09: 遇到Makefile报错
&lt;/h2&gt;&lt;p&gt;如果在提交过程中遇到此报错信息&lt;code&gt;The missing file are:/.../autograde-makefile&lt;/code&gt;，请直接无视，这是自动判卷程序的答案未上传导致的报错，不影响正常提交。&lt;/p&gt;
&lt;p&gt;本文中图片由&lt;a class=&#34;link&#34; href=&#34;https://blog.zlicdt.top/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;某同学&lt;/a&gt;友情提供&lt;/p&gt;
</description>
        </item>
        <item>
        <title>git 基本使用</title>
        <link>https://blog.rinchord.top/p/git-%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/</link>
        <pubDate>Wed, 23 Apr 2025 00:00:00 +0000</pubDate>
        
        <guid>https://blog.rinchord.top/p/git-%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/</guid>
        <description>&lt;h1 id=&#34;简单的git教学&#34;&gt;简单的GIT教学
&lt;/h1&gt;&lt;h2 id=&#34;开箱配置&#34;&gt;开箱配置
&lt;/h2&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  git config --global user.email &amp;#34;you@example.com&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  git config --global user.name &amp;#34;Your Name&amp;#34;
&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;h2 id=&#34;常用命令&#34;&gt;常用命令
&lt;/h2&gt;&lt;h4 id=&#34;git-init&#34;&gt;&lt;code&gt;git init&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;在指定的根目录创建.git，这就是代码仓库，别动它！&lt;/p&gt;
&lt;h4 id=&#34;git-clone&#34;&gt;&lt;code&gt;git clone&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;把别人的在线仓库下载到本地&lt;/p&gt;
&lt;h4 id=&#34;git-log&#34;&gt;&lt;code&gt;git log&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;查看提交记录、文件变更、提交id&lt;/p&gt;
&lt;h4 id=&#34;git-status&#34;&gt;&lt;code&gt;git status&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;查看是否有未提交的新更改&lt;/p&gt;
&lt;h4 id=&#34;git-diff-&#34;&gt;&lt;code&gt;git diff &amp;lt;&amp;gt;&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;当使用commit id来代替&lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt;时，将查看该次提交的具体变更记录&lt;br&gt;
当使用文件名来代替&lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt;时，将查看该文件的具体变更记录&lt;/p&gt;
&lt;h2 id=&#34;提交流程&#34;&gt;提交流程
&lt;/h2&gt;&lt;h4 id=&#34;git-add-filename&#34;&gt;&lt;code&gt;git add &amp;lt;filename&amp;gt;&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;(仅当你创建了新的文件时才需要使用)&lt;br&gt;
把你的更改提交到本地暂存区&lt;br&gt;
&lt;code&gt;&amp;lt;filename&amp;gt;&lt;/code&gt;用你想要提交的文件名替代，如果你想要提交仓库根目录的所有文件，使用&lt;code&gt;.&lt;/code&gt;来替代&lt;code&gt;&amp;lt;filename&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h4 id=&#34;git-commit--m-comment&#34;&gt;&lt;code&gt;git commit -m &amp;quot;comment&amp;quot;&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;提交本地暂存区的文件&lt;br&gt;
&lt;code&gt;comment&lt;/code&gt;是可选内容，如果需要，用注释（本次提交的简单概括）来替代&lt;/p&gt;
&lt;h2 id=&#34;backtrack&#34;&gt;Backtrack
&lt;/h2&gt;


  &lt;blockquote&gt;
    &lt;p&gt;使用&lt;code&gt;git log&lt;/code&gt;以查看提交id，&lt;br&gt;
如果显示信息太多，使用如下命令&lt;br&gt;
&lt;code&gt;git log –pretty=oneline&lt;/code&gt;&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h4 id=&#34;git-diff-commit-id&#34;&gt;&lt;code&gt;git diff &amp;lt;commit id&amp;gt;&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;使用提交id替代&lt;code&gt;&amp;lt;commit id&amp;gt;&lt;/code&gt;，即可查看该次提交的具体变动&lt;/p&gt;
&lt;h4 id=&#34;git-reset---hard-&#34;&gt;&lt;code&gt;git reset --hard &amp;lt;&amp;gt;&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;使用&lt;code&gt;^&lt;/code&gt;替代&lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt;，将回到上一提交&lt;br&gt;
使用提交id替代&lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt;，将回到id对应提交&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在git reset前想清楚！你到底需不需要reset！&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;误git-reset后的挽回手段&#34;&gt;误git reset后的挽回手段
&lt;/h3&gt;&lt;h4 id=&#34;git-reflog&#34;&gt;&lt;code&gt;git reflog&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;展示当前仓库的引用日志，记录当前仓库的“HEAD、分支或其他引用”的变化记录&lt;br&gt;
我们使用这个命令来获取需恢复提交记录的哈希&lt;/p&gt;
&lt;h4 id=&#34;git-checkout-commit-id&#34;&gt;&lt;code&gt;git checkout &amp;lt;commit id&amp;gt;&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;使用你获取到的提交记录哈希值替换&lt;code&gt;&amp;lt;commit id&amp;gt;&lt;/code&gt;，来恢复对应提交记录&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在完成恢复后，你会处于&lt;code&gt;detached HEAD&lt;/code&gt;分支状态，请创建新分支来继续开发&lt;/li&gt;
&lt;li&gt;记得跟你的团队成员说一声你误操作了，在你向线上仓库提交之前&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;branch&#34;&gt;Branch
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;git具有一个强大的分支功能&lt;/li&gt;
&lt;li&gt;一个项目，一定具有一个主分支（以前叫&lt;code&gt;master&lt;/code&gt;现在叫&lt;code&gt;main&lt;/code&gt;..因为&lt;code&gt;master&lt;/code&gt;有奴隶主的意思,要避嫌)&lt;/li&gt;
&lt;li&gt;搞开发请自己创建一个dev分支，在dev分支上干活，干完活并确保没问题后再把内容合并到main上。&lt;/li&gt;
&lt;li&gt;往主分支上丢东西要慎重！无论何时，主分支应该永远是你最稳定的分支&lt;/li&gt;
&lt;li&gt;主分支的内容必定小于等于其他分支，如果主分支的东西比其他分支多了，那么提交的时候就会出现合并冲突！&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;git-branch&#34;&gt;&lt;code&gt;git branch&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;查看分支&lt;/p&gt;
&lt;h4 id=&#34;git-checkout-b-name&#34;&gt;&lt;code&gt;git checkout –b &amp;lt;name&amp;gt;&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;创建+切换分支&lt;/p&gt;
&lt;h4 id=&#34;git-checkout-name&#34;&gt;&lt;code&gt;git checkout &amp;lt;name&amp;gt;&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;切换分支&lt;/p&gt;
&lt;h4 id=&#34;git-merge-name&#34;&gt;&lt;code&gt;git merge &amp;lt;name&amp;gt;&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;合并某分支到当前分支&lt;/p&gt;
&lt;h4 id=&#34;git-branch-d-name&#34;&gt;&lt;code&gt;git branch –d &amp;lt;name&amp;gt;&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;删除分支&lt;/p&gt;
&lt;h2 id=&#34;remote-repo&#34;&gt;Remote repo
&lt;/h2&gt;&lt;h3 id=&#34;把你的本地仓库与云端仓库关联起来&#34;&gt;把你的本地仓库与云端仓库关联起来
&lt;/h3&gt;&lt;h4 id=&#34;生成私钥文件&#34;&gt;生成私钥文件
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;执行命令&lt;br&gt;
&lt;code&gt;ssh-keygen -t rsa -C &amp;quot;xxxx@example.com&amp;quot;&lt;/code&gt;&lt;br&gt;
把&lt;code&gt;xxxx@example.com&lt;/code&gt;替换成你的邮箱地址（用于识别你）&lt;/li&gt;
&lt;li&gt;直接回车生成默认目录&lt;/li&gt;
&lt;li&gt;密码不想设置可以直接回车两下，如设置密码后每次提交均需要输入密码&lt;/li&gt;
&lt;li&gt;私钥的默认存储路径为&lt;code&gt;/c/Users/&amp;lt;username&amp;gt;/.ssh/id_rsa&lt;/code&gt;，在gitbash窗口里也有写&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;导出你的私钥内容&#34;&gt;导出你的私钥内容
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;转到存储刚才生成的私钥目录&lt;/li&gt;
&lt;li&gt;在当前目录右键打开git bash&lt;/li&gt;
&lt;li&gt;使用命令&lt;code&gt;cat ~/.ssh/id_rsa.pub&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;复制输出的内容，以&lt;code&gt;ssh-rsa&lt;/code&gt;开头，而以&lt;code&gt;.com&lt;/code&gt;作为结尾&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;配置github&#34;&gt;配置GitHub
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;打开github的settings页面&lt;/li&gt;
&lt;li&gt;&lt;img src=&#34;https://blog.rinchord.top/p/git-%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/f0da251aba1a7f8b9a8f6313cac36374.png&#34;
	width=&#34;1920&#34;
	height=&#34;1001&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;f0da251aba1a7f8b9a8f6313cac36374.png&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;191&#34;
		data-flex-basis=&#34;460px&#34;
	
&gt;&lt;/li&gt;
&lt;li&gt;&lt;img src=&#34;https://blog.rinchord.top/p/git-%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/8bef1ee9f4cd15b7e43c2ea6bd75999e.png&#34;
	width=&#34;1920&#34;
	height=&#34;957&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;8bef1ee9f4cd15b7e43c2ea6bd75999e.png&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;200&#34;
		data-flex-basis=&#34;481px&#34;
	
&gt;&lt;/li&gt;
&lt;li&gt;把你刚才复制的私钥内容粘进去，请注意，&lt;code&gt;rsa&lt;/code&gt;开头的是私钥，不能泄露&lt;/li&gt;
&lt;li&gt;起个有意义的名字填上去&lt;/li&gt;
&lt;li&gt;保存&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;与云端仓库进行同步&#34;&gt;与云端仓库进行同步
&lt;/h3&gt;&lt;h4 id=&#34;建个仓库不需要教吧&#34;&gt;建个仓库不需要教吧
&lt;/h4&gt;&lt;h4 id=&#34;git-remote-add-origin-your-repo-link&#34;&gt;&lt;code&gt;git remote add origin &amp;lt;your repo link&amp;gt;&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;使用你的仓库地址替代&lt;code&gt;&amp;lt;your repo link&amp;gt;&lt;/code&gt;，&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;把本地库的内容推送到远程，使用 git push命令，实际上是把当前分支master推送到远程。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;由于远程库是空的，我们第一次推送&lt;code&gt;main&lt;/code&gt;分支时，加上了 &lt;code&gt;–u&lt;/code&gt;参数，Git不但会把本地的&lt;code&gt;main&lt;/code&gt;分支内容推送的远程新的&lt;code&gt;main&lt;/code&gt;分支，还会把本地的&lt;code&gt;main&lt;/code&gt;分支和远程的&lt;code&gt;master&lt;/code&gt;分支关联起来，在以后的推送或者拉取时就可以简化命令。&lt;br&gt;
例如：&lt;br&gt;
&lt;code&gt;git remote add origin https://github.com/Rinsutoringu/COMP1023-Foundations-of-C-Programming.git&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;git-push-origin-branch-name&#34;&gt;&lt;code&gt;git push origin &amp;lt;branch name&amp;gt;&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;把&lt;code&gt;&amp;lt;branch name&amp;gt;&lt;/code&gt;替换为分支名（如main）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;之后对云端已存储的某分支作修改后，使用这条指令向云同步。&lt;/li&gt;
&lt;/ul&gt;



  &lt;blockquote&gt;
    &lt;p&gt;不要在远程仓库上干活，搞什么乱七八糟的事情在本地搞好了再push上去！&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h3 id=&#34;多人协作&#34;&gt;多人协作
&lt;/h3&gt;


  &lt;blockquote&gt;
    &lt;p&gt;当你从远程库克隆时候，实际上Git自动把本地的master分支和远程的master分支对应起来了，并且远程库的默认名称是origin。&lt;br&gt;
如果要多人协作的话，每个人都要开一个属于自己的分支来干活，干完活的内容要提交到属于自己的main分支上，经过审核后才能合并到主要的main分支。&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h4 id=&#34;git-remote&#34;&gt;&lt;code&gt;git remote&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;查看远程库的信息(如名称)&lt;/p&gt;
&lt;h4 id=&#34;git-remote-v&#34;&gt;&lt;code&gt;git remote –v&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;查看远程库的详细信息&lt;br&gt;
&lt;img src=&#34;https://blog.rinchord.top/p/git-%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/2a817565907a2ca48706a5b7c0496708.png&#34;
	width=&#34;619&#34;
	height=&#34;169&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;2a817565907a2ca48706a5b7c0496708.png&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;366&#34;
		data-flex-basis=&#34;879px&#34;
	
&gt;&lt;/p&gt;
&lt;h4 id=&#34;git-push-origin-branch-name-1&#34;&gt;&lt;code&gt;git push origin &amp;lt;branch name&amp;gt;&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;推送本地指定分支到云端&lt;/p&gt;
&lt;h4 id=&#34;git-checkout-b-branch-name-originbranch-name&#34;&gt;&lt;code&gt;git checkout –b &amp;lt;branch name&amp;gt; origin/&amp;lt;branch name&amp;gt;&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;从云端拉取指定名称的分支到本地&lt;/p&gt;
&lt;h4 id=&#34;git-pull-origin-branch-name&#34;&gt;&lt;code&gt;git pull origin &amp;lt;branch name&amp;gt;&lt;/code&gt;
&lt;/h4&gt;&lt;p&gt;从云端合并到本地&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果其他人改动了项目的其他结构，那么你就没法直接向云端提交了。&lt;/li&gt;
&lt;li&gt;因为git的逻辑是多的那方给少的那方提交资料&lt;/li&gt;
&lt;li&gt;你就得执行这条指令来同步其他人的工作，然后再提交自己的东西。&lt;/li&gt;
&lt;li&gt;就算仓库同名，也不一定能push上去，因为git需要关联远程仓库，请关注git的错误提示来进行手动关联。&lt;/li&gt;
&lt;li&gt;&lt;img src=&#34;https://blog.rinchord.top/p/git-%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/32ed163ee6b322610b7d549bc7c7cbbb.png&#34;
	width=&#34;646&#34;
	height=&#34;199&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;32ed163ee6b322610b7d549bc7c7cbbb.png&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;324&#34;
		data-flex-basis=&#34;779px&#34;
	
&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;解决合并冲突&#34;&gt;解决合并冲突
&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://blog.rinchord.top/p/git-%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/a4bb7c7de5328a02ff9ca02aada235e2.png&#34;
	width=&#34;634&#34;
	height=&#34;589&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;a4bb7c7de5328a02ff9ca02aada235e2.png&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;107&#34;
		data-flex-basis=&#34;258px&#34;
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;先尝试合并，如果有冲突会报错，看着报错信息自行处理。&lt;/li&gt;
&lt;li&gt;处理好了重新提交即可&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;记得配置代理&#34;&gt;记得配置代理！
&lt;/h2&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 config --global http.proxy http://127.0.0.1:1080
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global https.proxy https://127.0.0.1:1080
&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&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 config --global http.https://github.com.proxy https://127.0.0.1:1080
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global https.https://github.com.proxy https://127.0.0.1:1080
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;// 仅配置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;a class=&#34;link&#34; href=&#34;https://www.cnblogs.com/China-Dream/p/16476775.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Git 代理设置方法 - 余以为&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
