<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Cheatsheet on Binary Life</title><link>http://life.urakalee.me/tags/cheatsheet/</link><description>Recent content in Cheatsheet on Binary Life</description><generator>Hugo -- 0.157.0</generator><language>zh-cn</language><lastBuildDate>Sat, 04 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="http://life.urakalee.me/tags/cheatsheet/index.xml" rel="self" type="application/rss+xml"/><item><title>macOS 应用图标：用 Figma 制作超椭圆图标</title><link>http://life.urakalee.me/posts/2026-04-04-macos-app-icon-figma/</link><pubDate>Sat, 04 Apr 2026 00:00:00 +0000</pubDate><guid>http://life.urakalee.me/posts/2026-04-04-macos-app-icon-figma/</guid><description>&lt;p&gt;用 Figma 直接输出带透明背景的图标，替代之前用&amp;quot;预览&amp;quot;的方式。&lt;/p&gt;</description></item><item><title>macOS 应用图标：去背景 + 导入 Xcode</title><link>http://life.urakalee.me/posts/2026-03-28-macos-app-icon-xcode/</link><pubDate>Sat, 28 Mar 2026 00:00:00 +0000</pubDate><guid>http://life.urakalee.me/posts/2026-03-28-macos-app-icon-xcode/</guid><description>&lt;p&gt;两步搞定：用&amp;quot;预览&amp;quot;去掉图标背景，再把透明 PNG 拖进 Xcode 的 AppIcon。&lt;/p&gt;</description></item><item><title>通过跳板机 SSH 一键登录</title><link>http://life.urakalee.me/posts/2026-03-20-ssh-jump-host-cheatsheet/</link><pubDate>Fri, 20 Mar 2026 00:00:00 +0000</pubDate><guid>http://life.urakalee.me/posts/2026-03-20-ssh-jump-host-cheatsheet/</guid><description>&lt;p&gt;两步搞定 SSH 跳板机：配置 &lt;code&gt;~/.ssh/config&lt;/code&gt;，再分发公钥，之后就能一条命令直连目标机器。&lt;/p&gt;</description></item><item><title>Markdown Style</title><link>http://life.urakalee.me/posts/2013-12-16-markdown-style/</link><pubDate>Mon, 16 Dec 2013 15:26:28 +0800</pubDate><guid>http://life.urakalee.me/posts/2013-12-16-markdown-style/</guid><description>&lt;ul&gt;
&lt;li&gt;本文仅用于有洁癖者(本人)统一 markdown 风格, 以及 check style&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="行文"&gt;行文&lt;/h2&gt;
&lt;h3 id="标点"&gt;标点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;除非必要, 所有标点都使用英文标点&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="强调"&gt;强调&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;说明性的词和短语用双引号(&amp;quot;&amp;quot;)强调&lt;/li&gt;
&lt;li&gt;提示性的词和短语用双星号(**)强调&lt;/li&gt;
&lt;li&gt;结论性的短语和句子用三星号(***)强调&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="删除"&gt;删除&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~~删除的文字~~&lt;/code&gt; -&amp;gt; &lt;del&gt;删除的文字&lt;/del&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="空格"&gt;空格&lt;/h3&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;如果英文单词在括号里, 则前后的空格写在括号外, 比如 &amp;quot; (abc) &amp;quot; 或 &amp;quot; (abc 很不错)&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;左引号前和右引号后都需要空格
&lt;ul&gt;
&lt;li&gt;行首不需要前面的空格, 句尾不需要后面的空格&lt;/li&gt;
&lt;/ul&gt;
&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;!-- more --&gt;
&lt;h3 id="链接"&gt;链接&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;行文中需要文字的, 使用引用方式&lt;/li&gt;
&lt;li&gt;直接贴链接不影响行文的, 可以直接贴连接
&lt;ul&gt;
&lt;li&gt;比如 &lt;strong&gt;少量&lt;/strong&gt; &lt;strong&gt;不是很长&lt;/strong&gt; 且 &lt;strong&gt;在行尾&lt;/strong&gt; 的链接&lt;/li&gt;
&lt;li&gt;比如 &lt;strong&gt;少量&lt;/strong&gt; &lt;strong&gt;不是很长&lt;/strong&gt; 的链接列表&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;其它情况均需要使用引用方式, 引用需要集中写在文章或段落末尾&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
[Display Name][name]
...
[name]: http://external.link "Link Description"
[name]: /blog/yyyy/MM/dd/internal-link/ "Link Description"
&lt;/pre&gt;
&lt;h3 id="更新"&gt;更新&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;在文档末尾添加&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
****
Update@yyyy.MM.dd: 更新的内容
&lt;/pre&gt;
&lt;h3 id="大小写"&gt;大小写&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;TODO&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="用词"&gt;用词&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;举例时用 &amp;ldquo;比如&amp;rdquo;, 不用 &amp;ldquo;如&amp;rdquo;; &amp;ldquo;比如&amp;rdquo; 后面不加冒号, 除非后面跟着列表&lt;/li&gt;
&lt;li&gt;并列时用 &amp;ldquo;和&amp;rdquo;, 不用 &amp;ldquo;及&amp;rdquo;; 除非需要使用 &amp;ldquo;以及&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;其他&amp;rdquo; 修饰人, &amp;ldquo;其它&amp;rdquo; 修饰非人&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="代码"&gt;代码&lt;/h2&gt;
&lt;h3 id="单行模式"&gt;单行模式&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;一行可执行代码使用变音符号(`)单行模式&lt;/li&gt;
&lt;li&gt;一行文本内容使用变音符号单行模式或 pre-code 多行模式&lt;/li&gt;
&lt;li&gt;特殊记号使用变音符号单行模式
&lt;ul&gt;
&lt;li&gt;比如文件路径 &lt;code&gt;C:\Windows&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;比如代码元素 &lt;code&gt;++&lt;/code&gt; &lt;code&gt;--&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;变音符号单行模式的空格规则同引号&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="可执行代码和支持代码高亮的文本"&gt;可执行代码和支持代码高亮的文本&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;使用变音符号(`)多行模式&lt;/li&gt;
&lt;li&gt;支持代码高亮的语言列表: &lt;a href="http://pygments.org/docs/lexers/"&gt;http://pygments.org/docs/lexers/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="不支持代码高亮的文本内容"&gt;不支持代码高亮的文本内容&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;使用 pre-code 多行模式&lt;/li&gt;
&lt;li&gt;打开该文本文件的命令可以写在一起, 命令和文本之间空一行&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Linux 手册</title><link>http://life.urakalee.me/posts/2013-12-08-linux-cheatsheet/</link><pubDate>Sun, 08 Dec 2013 12:13:45 +0800</pubDate><guid>http://life.urakalee.me/posts/2013-12-08-linux-cheatsheet/</guid><description>&lt;h2 id="常用命令"&gt;常用命令&lt;/h2&gt;
&lt;h3 id="find"&gt;find&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find . -name &lt;span class="s2"&gt;&amp;#34;*.xyz&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find . -name &lt;span class="s2"&gt;&amp;#34;*abc*&amp;#34;&lt;/span&gt; -delete
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="grep"&gt;grep&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;grep -i &lt;span class="s2"&gt;&amp;#34;abc&amp;#34;&lt;/span&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;grep -R &lt;span class="s2"&gt;&amp;#34;abc&amp;#34;&lt;/span&gt; .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="wc"&gt;wc&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wc -l find -name &lt;span class="s2"&gt;&amp;#34;*.java&amp;#34;&lt;/span&gt; &lt;span class="c1"&gt;# 统计 java 代码行数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="权限"&gt;权限&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod u+x &amp;lt;file&amp;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;chown &amp;lt;name&amp;gt; &amp;lt;file&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chown -R &amp;lt;name&amp;gt; &amp;lt;dir&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chgrp ... &lt;span class="c1"&gt;# 格式同 chown&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="系统工具"&gt;系统工具&lt;/h2&gt;
&lt;h3 id="ssh"&gt;ssh&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ssh-add -D删除所有记住的key
&lt;ul&gt;
&lt;li&gt;解决 Mac 下所有使用过的 key 都会被记住，删除 key 文件没用的问题&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="链接库"&gt;链接库&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;查看链接库是否缺失: &lt;code&gt;ldd &amp;lt;可执行文件&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;修改系统加载库&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vim /etc/ld.so.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/sbin/ldconfig
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Git 手册</title><link>http://life.urakalee.me/posts/2013-12-03-git-cheatsheet/</link><pubDate>Tue, 03 Dec 2013 18:13:53 +0800</pubDate><guid>http://life.urakalee.me/posts/2013-12-03-git-cheatsheet/</guid><description>&lt;h2 id="基本操作"&gt;基本操作&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;创建版本库: &lt;code&gt;git init&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;克隆版本库
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git clone /path/to/repo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git clone user@host:/path/to/repo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;多版本库: &lt;code&gt;git remote add &amp;lt;repo-name&amp;gt; &amp;lt;repo&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;多版本库列表: &lt;code&gt;git remote -v&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;更新版本库
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git pull [repo-name]&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;repo-name 默认为 origin&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git pull --rebase&lt;/code&gt; 可以避免无意义的 pull-merge, 使版本树尽可能是一条直线&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git fetch [repo-name]&lt;/code&gt; - &lt;code&gt;git pull&lt;/code&gt; does a &lt;code&gt;git fetch&lt;/code&gt; followed by a &lt;code&gt;git merge&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;repo-name 默认为 origin&lt;/li&gt;
&lt;li&gt;会把 repo-name 的更新都 fetch 到本地, 包括新分枝和新标签, 但不会建立本地分枝&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;提交到本地
&lt;ul&gt;
&lt;li&gt;stage: &lt;code&gt;git add &amp;lt;file/dir&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git commit -m &amp;quot;&amp;lt;comment&amp;gt;&amp;quot;&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;对于已经处于版本控制中的文件, 可以使用 &lt;code&gt; git commit -am &amp;quot;&amp;lt;comment&amp;gt;&amp;quot;&lt;/code&gt; 略过 stage&lt;/li&gt;
&lt;li&gt;有时需要构造空提交: &lt;code&gt;git commit --allow-empty -m &amp;quot;EMPTY&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;提交到远程
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git push [repo-name] [branch] &lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;repo-name 默认为 origin, branch 默认为当前分枝&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git push -u &amp;lt;repo-name&amp;gt; &amp;lt;branch&amp;gt;&lt;/code&gt; 设置 push/pull 时默认使用的 repo-name&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git push &amp;lt;repo-name&amp;gt; &amp;lt;branch&amp;gt;:&amp;lt;remote-branch&amp;gt;&lt;/code&gt; - 如果本地和远程分枝名字不同&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- more --&gt;
&lt;h2 id="反悔"&gt;反悔&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;revert stage: &lt;code&gt;git reset HEAD &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;reset working: &lt;code&gt;git checkout -- &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;restore(1+2): &lt;code&gt;git checkout HEAD &amp;lt;file&amp;gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;checkout 上一个版本, 放在 stage/working 中: &lt;code&gt;git checkout HEAD~ &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;如果改动, add, 再改动, 使用 &lt;code&gt;1.&lt;/code&gt; 不会恢复到第一次改动的结果; 使用 &lt;code&gt;2.&lt;/code&gt; 才行!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git reset &amp;lt;rev&amp;gt; [file]&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;没有 file 把 HEAD/branch 指向 rev&lt;/li&gt;
&lt;li&gt;有 file 把 rev 版本的 file checkout 出来&lt;/li&gt;
&lt;li&gt;如果 &lt;code&gt;--hard&lt;/code&gt;, 那么 stage 和 working 都更新为 rev; 如果 &lt;code&gt;--soft&lt;/code&gt;, 那么 stage 和 working 都不变(但 &lt;code&gt;git status&lt;/code&gt; 会发现有文件 stage 了, 这是相对运动的结果); 如果 &lt;code&gt;--mixed&lt;/code&gt; (默认), 那么只更新 stage (这时 &lt;code&gt;git status&lt;/code&gt; 会发现 working 中有改动, 原因同上)&lt;/li&gt;
&lt;li&gt;rev 默认为 HEAD: 如果 &lt;code&gt;--hard&lt;/code&gt;, 那么 stage 和 working 都更新为 HEAD (和 &lt;code&gt;3.&lt;/code&gt; 效果一样); &lt;code&gt;--soft&lt;/code&gt; 没意义; 如果 &lt;code&gt;--mixed&lt;/code&gt;, 那么只更新 stage (就是 &lt;code&gt;1.&lt;/code&gt; 咯~)&lt;/li&gt;
&lt;li&gt;没有 file 时 &lt;code&gt;--hard&lt;/code&gt; 类似于 checkout, 区别在于 &lt;code&gt;reset &amp;lt;rev&amp;gt;&lt;/code&gt; 会移动 branch 指针, &lt;code&gt;checkout &amp;lt;branch&amp;gt;&lt;/code&gt; 回不去, 而 &lt;code&gt;checkout &amp;lt;rev&amp;gt;&lt;/code&gt; 再 &lt;code&gt;checkout &amp;lt;branch&amp;gt;&lt;/code&gt; 可以回去&lt;/li&gt;
&lt;li&gt;放弃所有本地改动(含本地提交): &lt;code&gt;git reset --hard &amp;lt;repo-name&amp;gt;/&amp;lt;remote-branch&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git checkout &amp;lt;rev&amp;gt; [file]&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;没有 file 会建立一个 detached HEAD (匿名分枝) - 最好别用!&lt;/li&gt;
&lt;li&gt;有 file 把 rev 版本的 file checkout 出来&lt;/li&gt;
&lt;li&gt;rev 默认为 &lt;code&gt;--&lt;/code&gt; 即 stage, 从 stage checkout 到 working&lt;/li&gt;
&lt;li&gt;其它 rev 从 rev checkout 到 stage 再到 working&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git revert &amp;lt;rev&amp;gt;&lt;/code&gt;: 类似 svn 中的倒着 merge, 生成一个新版本 V+, 和 V-完全一样 - 仅用于 revert 一个很久以前的错误改动!&lt;/li&gt;
&lt;li&gt;修改已经 push 到远程的提交
&lt;ol&gt;
&lt;li&gt;使用下面的方法修改已经 push 到远程的提交&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git push &amp;lt;repo-name&amp;gt; +&amp;lt;branch&amp;gt;:&amp;lt;remote-branch&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;修改上一个提交: &lt;code&gt;git commit --amend&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;修改多个提交(交互式)
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;git rebase -i &amp;lt;rev&amp;gt;&lt;/code&gt;, 编辑 rev 之后的提交, rev 默认为 repo-name/remote-branch&lt;/li&gt;
&lt;li&gt;对于想合并到前一个的提交, 选择 fixup&lt;/li&gt;
&lt;li&gt;对于想删除的提交, 直接删除对应的行&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;将上 N 个提交合并成一个&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git reset --soft HEAD^&lt;span class="o"&gt;(&lt;/span&gt;N-1&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git commit --amend
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="分枝"&gt;分枝&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;建立分枝:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git checkout -b &amp;lt;branch&amp;gt;&lt;/code&gt; 在当前 HEAD 上创建分枝并切换到新分枝&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git checkout -b &amp;lt;branch&amp;gt; &amp;lt;repo-name&amp;gt;/&amp;lt;remote-branch&amp;gt;&lt;/code&gt; 跟踪远程分枝&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;切换分枝: &lt;code&gt;git checkout &amp;lt;branch&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;删除分枝: &lt;code&gt;git branch -d &amp;lt;branch&amp;gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;对于没有合并或提交到远程的分枝, 删除时会提示用 &lt;code&gt;-D&lt;/code&gt; 强制删除&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;将分枝提交到远程(在远程建立新分枝): &lt;code&gt;git push &amp;lt;repo-name&amp;gt; &amp;lt;branch&amp;gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;提交到远程之后, 如果希望能够 pull 该分枝, 需要 &lt;code&gt;git push -u&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;删除远程分枝: &lt;code&gt;git push &amp;lt;repo-name&amp;gt; :&amp;lt;remote-branch&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;删除已删除远程分枝的本地缓存: &lt;code&gt;git remote prune origin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;查看所有分枝: &lt;code&gt;git branch -av&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git branch&lt;/code&gt; 不显示远程分枝&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="diff"&gt;diff&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;分枝 diff: &lt;code&gt;git diff &amp;lt;src-branch&amp;gt; &amp;lt;tgt-branch&amp;gt;&lt;/code&gt; (tgt 默认为当前分枝)
&lt;ul&gt;
&lt;li&gt;如果是和 master 比较, src-branch 应该是master&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;版本 diff: &lt;code&gt;git diff &amp;lt;src-rev&amp;gt; &amp;lt;tgt-rev&amp;gt;&lt;/code&gt; (tgt 默认为当前版本)
&lt;ul&gt;
&lt;li&gt;src-rev 应该是比 tgt-rev 更老的版本(祖先版本)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git merge-base &amp;lt;src-branch&amp;gt; &amp;lt;tgt-branch&amp;gt;&lt;/code&gt; 可能可以得到你需要的 src-rev&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;其它 diff
&lt;ul&gt;
&lt;li&gt;working 和 stage 的 diff: &lt;code&gt;git diff&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;stage 和 HEAD 的 diff: &lt;code&gt;git diff --cached&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;working 和 HEAD 的 diff: &lt;code&gt;git diff HEAD&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;注意&lt;/strong&gt; 上述 3 种方式都不会 diff 新文件(未处于版本控制中的文件)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="合并"&gt;合并&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;合并 branch 到当前分枝: &lt;code&gt;git merge &amp;lt;branch&amp;gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;fetch 后用 &lt;code&gt;git merge &amp;lt;repo-name&amp;gt;/&amp;lt;remote-branch&amp;gt;&lt;/code&gt; merge&lt;/li&gt;
&lt;li&gt;如果 &lt;code&gt;merge &amp;lt;branch&amp;gt;&lt;/code&gt;, 修改 branch, 再 merge, 只 merge 修改的部分&lt;/li&gt;
&lt;li&gt;合并冲突时, 不 merge 而是指定某个版本: &lt;code&gt;git checkout --ours/--theirs &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;复制&amp;rdquo; 一次提交(比如某个分枝只有一次提交需要保留): &lt;code&gt;git cherry-pick &amp;lt;rev&amp;gt;&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;停止 &amp;ldquo;复制&amp;rdquo;: &lt;code&gt;git cherry-pick --abort&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;将当前分枝 rebase 到 tgt-branch: &lt;code&gt;git rebase &amp;lt;tgt-branch&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;merge 与 rebase 的区别
&lt;ul&gt;
&lt;li&gt;merge 建立了一个新版本, 而 rebase 是分枝上有多少新版本, 就会建立多少新版本&lt;/li&gt;
&lt;li&gt;rebase 后需要再做一次快速 merge, 才能使 tgt-branch 的指针正确(两者指针移动方式不同)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="查看状态信息"&gt;查看状态信息&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git status&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git log&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git reflog&lt;/code&gt;: 查看 HEAD 指针的移动历史&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git branch --merge&lt;/code&gt;: 查看哪些分枝已被合并到当前分枝&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git branch --no-merged&lt;/code&gt;: 查看尚未合并的分枝&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git remote show &amp;lt;repo-name&amp;gt;&lt;/code&gt;: 查看远程信息&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="暂存"&gt;暂存&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git stash
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git stash pop
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git stash list
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git stash clear
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git stash apply stash@&lt;span class="o"&gt;{&lt;/span&gt;x&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git stash drop stash@&lt;span class="o"&gt;{&lt;/span&gt;x&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git stash branch &amp;lt;branch&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="标签"&gt;标签&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git tag &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 tag &amp;lt;tag&amp;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 show &amp;lt;tag&amp;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 tag -d &amp;lt;tag&amp;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 &amp;lt;repo-name&amp;gt; &amp;lt;tag&amp;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 &amp;lt;repo-name&amp;gt; :&amp;lt;tag&amp;gt; &lt;span class="c1"&gt;# 删除远程标签&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="submodule-20150413"&gt;submodule @2015.04.13&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git submodule add &amp;lt;remote-path&amp;gt; &lt;span class="o"&gt;[&lt;/span&gt;&amp;lt;local-path&amp;gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;# 添加 remote-path 为当前项目的 submodule&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git rm -r &amp;lt;local-path&amp;gt; &lt;span class="c1"&gt;# 如果有问题, 试试 git rm --cached &amp;lt;local-path&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vim .gitmodules &lt;span class="c1"&gt;# 通常会在 git rm 时自动执行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git commit
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm -rf .git/modules/&amp;lt;local-path&amp;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;vim .git/config
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Octopress 新手小记</title><link>http://life.urakalee.me/posts/2013-11-24-newbie-to-octopress/</link><pubDate>Sun, 24 Nov 2013 21:10:28 +0800</pubDate><guid>http://life.urakalee.me/posts/2013-11-24-newbie-to-octopress/</guid><description>&lt;p&gt;信息焦虑的第二个症状：换过好几个博客，但都因为配置复杂、格式不可控、备份麻烦等原因放弃了。&lt;/p&gt;
&lt;p&gt;作为一个程序员，深深地为自己不能迅速地把博客搞定而惭愧。在构思许久之后，终于还是决定先偷懒，把习惯陪养起来再说。Octopress 还是非常符合我审美的，没有太多可配置的东西，所有格式都能自己掌控，更不用说备份——噢！又犯病了。。。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.devtang.com/blog/2012/02/10/setup-blog-based-on-github/" title="象写程序一样写博客：搭建基于github的博客"&gt;唐巧的博客&lt;/a&gt;很容易搜到，但我还是建议第一次搞的同学看一下官网。如果你像我一样在使用最新版的 MacOS，那么 ruby 部分就会简化许多：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone git://github.com/imathis/octopress.git octopress
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; octopress
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo gem install bundler
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bundle install
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rake install
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rake new_post&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Article Name&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;!-- more --&gt;
&lt;p&gt;写作就是 MarkDown 了, 虽然和 wiki 的写法有些差异, 容易记混. 通常我都会使用 Sublime Text + MarkDown 插件, 同时运行 &lt;code&gt;rake preview&lt;/code&gt; 进行调试(-___-b). Preview 模式下, published:false 的文章会是可见的; 可能由于 bug, 如果你开着 preview 运行 deploy, published:false 的文章也会是可见的&amp;hellip; &lt;em&gt;&lt;strong&gt;&lt;code&gt;rake deploy&lt;/code&gt; 前务必退出 preview, 并运行 &lt;code&gt;rake generate&lt;/code&gt;&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;rake deploy&lt;/code&gt; 之前，要 &lt;code&gt;git add&lt;/code&gt; 和 &lt;code&gt;git push origin source&lt;/code&gt;, git 新手（像我）往往都习惯于顺手来个 &lt;code&gt;git pull&lt;/code&gt;。唔，然后就悲剧了。因为这个时候 git 已经很傻地把你的 source 分枝和远程的 master 分枝关联在一起了，所以 pull 的时候会没头没脑地要 merge 这两个分枝。已经 merge 的怎么回退我就不说了，还没 pull 的，先修改一下 config 文件。&lt;/p&gt;</description></item></channel></rss>