语法高亮,滚动条美化,设置页面调整

This commit is contained in:
fofolee
2019-04-19 02:41:09 +08:00
parent 1e8f76c000
commit 359d29ee0b
1590 changed files with 12328 additions and 11441 deletions

View File

@@ -13,13 +13,13 @@
<p>历史就是这么偶然如果不是当年BitMover公司威胁Linux社区可能现在我们就没有免费而超级好用的Git了。</p>
<p><a href="https://github.com/jaywcjlove/handbook/blob/master/other/Git%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E6%B8%85%E5%8D%95.md">Git常用命令清单</a></p>
<h3 id="语法">语法</h3>
<pre><code>git [--version] [--help] [-C &lt;path&gt;] [-c name=value]
<pre><code class="language-bash">git [--version] [--help] [-C &lt;path&gt;] [-c name=value]
[--exec-path[=&lt;path&gt;]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=&lt;path&gt;] [--work-tree=&lt;path&gt;] [--namespace=&lt;name&gt;]
&lt;command&gt; [&lt;args&gt;]</code></pre>
<h3 id="选项">选项</h3>
<pre><code>add 将文件内容添加到索引
<pre><code class="language-bash">add 将文件内容添加到索引
bisect 通过二进制查找引入错误的更改
branch 列出,创建或删除分支
checkout 检查分支或路径到工作树
@@ -54,7 +54,7 @@ tag 创建列出删除或验证使用GPG签名的标签对象
<p>remote</p>
<p><code>git remote add origin git@github.com:JSLite/test.git</code> #添加源</p>
<p>push</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb3-1" data-line-number="1"><span class="fu">git</span> push -u origin master <span class="co"># push同事设置默认跟踪分支 </span></a>
<div class="sourceCode" id="cb3"><pre><code class="language-bash"><a class="sourceLine" id="cb3-1" data-line-number="1"><span class="fu">git</span> push -u origin master <span class="co"># push同事设置默认跟踪分支 </span></a>
<a class="sourceLine" id="cb3-2" data-line-number="2"><span class="fu">git</span> push origin master </a>
<a class="sourceLine" id="cb3-3" data-line-number="3"><span class="fu">git</span> push -f origin master <span class="co"># 强制推送文件,缩写 -f全写--force</span></a></code></pre></div>
<p>clone</p>
@@ -62,7 +62,7 @@ tag 创建列出删除或验证使用GPG签名的标签对象
<code>git clone git://github.com/JSLite/JSLite.js.git mypro</code> #克隆到自定义文件夹<br />
<code>git clone [user@]example.com:path/to/repo.git/</code> #SSH协议还有另一种写法。</p>
<p>git clone支持多种协议除了HTTP(s)以外还支持SSH、Git、本地文件协议等下面是一些例子。<code>git clone &lt;版本库的网址&gt; &lt;本地目录名&gt;</code></p>
<div class="sourceCode" id="cb4"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb4-1" data-line-number="1">$ <span class="fu">git</span> clone http[s]://example.com/path/to/repo.git/</a>
<div class="sourceCode" id="cb4"><pre><code class="language-bash"><a class="sourceLine" id="cb4-1" data-line-number="1">$ <span class="fu">git</span> clone http[s]://example.com/path/to/repo.git/</a>
<a class="sourceLine" id="cb4-2" data-line-number="2">$ <span class="fu">git</span> clone ssh://example.com/path/to/repo.git/</a>
<a class="sourceLine" id="cb4-3" data-line-number="3">$ <span class="fu">git</span> clone git://example.com/path/to/repo.git/</a>
<a class="sourceLine" id="cb4-4" data-line-number="4">$ <span class="fu">git</span> clone /opt/git/project.git </a>
@@ -72,17 +72,17 @@ tag 创建列出删除或验证使用GPG签名的标签对象
<h2 id="配置">配置</h2>
<p>首先是配置帐号信息 <code>ssh -T git@github.com</code> 测试。</p>
<h2 id="修改项目中的个人信息">修改项目中的个人信息</h2>
<div class="sourceCode" id="cb5"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb5-1" data-line-number="1"><span class="fu">git</span> help config <span class="co"># 获取帮助信息,查看修改个人信息的参数 </span></a>
<div class="sourceCode" id="cb5"><pre><code class="language-bash"><a class="sourceLine" id="cb5-1" data-line-number="1"><span class="fu">git</span> help config <span class="co"># 获取帮助信息,查看修改个人信息的参数 </span></a>
<a class="sourceLine" id="cb5-2" data-line-number="2"><span class="fu">git</span> config --global user.name <span class="st">&quot;小弟调调&quot;</span> # 修改全局名字</a>
<a class="sourceLine" id="cb5-3" data-line-number="3"><span class="fu">git</span> config --global user.email <span class="st">&quot;wowohoo@qq.com&quot;</span> # 修改全局邮箱</a>
<a class="sourceLine" id="cb5-4" data-line-number="4"><span class="fu">git</span> config --list # 查看配置的信息 </a></code></pre></div>
<h3 id="配置自动换行">配置自动换行</h3>
<p>自动转换坑太大提交到git是自动将换行符转换为lf</p>
<div class="sourceCode" id="cb6"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb6-1" data-line-number="1"><span class="fu">git</span> config --global core.autocrlf input</a></code></pre></div>
<div class="sourceCode" id="cb6"><pre><code class="language-bash"><a class="sourceLine" id="cb6-1" data-line-number="1"><span class="fu">git</span> config --global core.autocrlf input</a></code></pre></div>
<h2 id="常见使用场景">常见使用场景</h2>
<h3 id="创建ssh密钥">创建SSH密钥</h3>
<p>这个密钥用来跟 github 通信,在本地终端里生成然后上传到 github</p>
<div class="sourceCode" id="cb7"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb7-1" data-line-number="1"><span class="fu">ssh-keygen</span> -t rsa -C <span class="st">&#39;wowohoo@qq.com&#39;</span> <span class="co"># 生成密钥 </span></a>
<div class="sourceCode" id="cb7"><pre><code class="language-bash"><a class="sourceLine" id="cb7-1" data-line-number="1"><span class="fu">ssh-keygen</span> -t rsa -C <span class="st">&#39;wowohoo@qq.com&#39;</span> <span class="co"># 生成密钥 </span></a>
<a class="sourceLine" id="cb7-2" data-line-number="2"><span class="fu">ssh-keygen</span> -t rsa -C <span class="st">&quot;wowohoo@qq.com&quot;</span> -f ~/.ssh/ww_rsa <span class="co"># 指定生成目录文件名字</span></a>
<a class="sourceLine" id="cb7-3" data-line-number="3"><span class="fu">ssh</span> -T git@github.com <span class="co"># 测试是否成功 </span></a></code></pre></div>
<h3 id="多账号ssh配置">多账号ssh配置</h3>
@@ -94,7 +94,7 @@ tag 创建列出删除或验证使用GPG签名的标签对象
打开公钥文件 <code>jslite_rsa.pub</code> ,并把内容复制至代码托管平台上</p>
<p><strong>3.修改config文件</strong></p>
<p><code>vim ~/.ssh/config</code> #修改config文件如果没有创建 <code>config</code></p>
<div class="sourceCode" id="cb8"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb8-1" data-line-number="1"><span class="ex">Host</span> jslite.github.com</a>
<div class="sourceCode" id="cb8"><pre><code class="language-bash"><a class="sourceLine" id="cb8-1" data-line-number="1"><span class="ex">Host</span> jslite.github.com</a>
<a class="sourceLine" id="cb8-2" data-line-number="2"> <span class="ex">HostName</span> github.com</a>
<a class="sourceLine" id="cb8-3" data-line-number="3"> <span class="ex">User</span> git</a>
<a class="sourceLine" id="cb8-4" data-line-number="4"> <span class="ex">IdentityFile</span> ~/.ssh/jslite_rsa</a>
@@ -113,33 +113,33 @@ tag 创建列出删除或验证使用GPG签名的标签对象
<li><code>IdentityFile</code> 使用的公钥文件地址</li>
</ul>
<p><strong>4.测试</strong></p>
<div class="sourceCode" id="cb9"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb9-1" data-line-number="1"><span class="fu">ssh</span> -T git@jslite.github.com # <span class="kw">`</span><span class="ex">@</span><span class="kw">`</span>后面跟上定义的Host </a>
<div class="sourceCode" id="cb9"><pre><code class="language-bash"><a class="sourceLine" id="cb9-1" data-line-number="1"><span class="fu">ssh</span> -T git@jslite.github.com # <span class="kw">`</span><span class="ex">@</span><span class="kw">`</span>后面跟上定义的Host </a>
<a class="sourceLine" id="cb9-2" data-line-number="2"><span class="fu">ssh</span> -T work.github.com # 通过别名测试</a>
<a class="sourceLine" id="cb9-3" data-line-number="3"><span class="fu">ssh</span> -i ~/公钥文件地址 Host别名 # 如 ssh -i ~/.ssh/work_rsa work.github.com</a></code></pre></div>
<p><strong>5.使用</strong></p>
<div class="sourceCode" id="cb10"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb10-1" data-line-number="1"><span class="co"># 原来的写法</span></a>
<div class="sourceCode" id="cb10"><pre><code class="language-bash"><a class="sourceLine" id="cb10-1" data-line-number="1"><span class="co"># 原来的写法</span></a>
<a class="sourceLine" id="cb10-2" data-line-number="2"><span class="fu">git</span> clone git@github.com:<span class="op">&lt;</span>jslite的用户名<span class="op">&gt;</span>/learngit.git</a>
<a class="sourceLine" id="cb10-3" data-line-number="3"><span class="co"># 现在的写法</span></a>
<a class="sourceLine" id="cb10-4" data-line-number="4"><span class="fu">git</span> clone git@jslite.github.com:<span class="op">&lt;</span>jslite的用户名<span class="op">&gt;</span>/learngit.git</a>
<a class="sourceLine" id="cb10-5" data-line-number="5"><span class="fu">git</span> clone git@work.github.com:<span class="op">&lt;</span>work的用户名<span class="op">&gt;</span>/learngit.git</a></code></pre></div>
<p><strong>5.注意</strong></p>
<p>如果你修改了id_rsa的名字你需要将ssh key添加到SSH agent中</p>
<div class="sourceCode" id="cb11"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb11-1" data-line-number="1"><span class="fu">ssh-add</span> ~/.ssh/jslite_rsa</a>
<div class="sourceCode" id="cb11"><pre><code class="language-bash"><a class="sourceLine" id="cb11-1" data-line-number="1"><span class="fu">ssh-add</span> ~/.ssh/jslite_rsa</a>
<a class="sourceLine" id="cb11-2" data-line-number="2"><span class="fu">ssh-add</span> -l # 查看所有的key</a>
<a class="sourceLine" id="cb11-3" data-line-number="3"><span class="fu">ssh-add</span> -D # 删除所有的key</a>
<a class="sourceLine" id="cb11-4" data-line-number="4"><span class="fu">ssh-add</span> -d ~/.ssh/jslite_rsa <span class="co"># 删除指定的key</span></a></code></pre></div>
<h3 id="免密码登录远程服务器">免密码登录远程服务器</h3>
<div class="sourceCode" id="cb12"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb12-1" data-line-number="1">$ <span class="fu">ssh-keygen</span> -t rsa -P <span class="st">&#39;&#39;</span> -f ~/.ssh/aliyunserver.key</a>
<div class="sourceCode" id="cb12"><pre><code class="language-bash"><a class="sourceLine" id="cb12-1" data-line-number="1">$ <span class="fu">ssh-keygen</span> -t rsa -P <span class="st">&#39;&#39;</span> -f ~/.ssh/aliyunserver.key</a>
<a class="sourceLine" id="cb12-2" data-line-number="2">$ <span class="ex">ssh-copy-id</span> -i ~/.ssh/aliyunserver.key.pub root@192.168.182.112 <span class="co"># 这里需要输入密码一次</span></a></code></pre></div>
<p>编辑 <code>~/.ssh/config</code></p>
<div class="sourceCode" id="cb13"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb13-1" data-line-number="1"><span class="ex">Host</span> aliyun1</a>
<div class="sourceCode" id="cb13"><pre><code class="language-bash"><a class="sourceLine" id="cb13-1" data-line-number="1"><span class="ex">Host</span> aliyun1</a>
<a class="sourceLine" id="cb13-2" data-line-number="2"> <span class="ex">HostName</span> 192.168.182.112</a>
<a class="sourceLine" id="cb13-3" data-line-number="3"> <span class="ex">User</span> root</a>
<a class="sourceLine" id="cb13-4" data-line-number="4"> <span class="ex">PreferredAuthentications</span> publickey</a>
<a class="sourceLine" id="cb13-5" data-line-number="5"> <span class="ex">IdentityFile</span> ~/.ssh/aliyunserver.key</a></code></pre></div>
<p>上面配置完了可以通过命令登录不需要输入IP地址和密码 <code>ssh aliyun1</code></p>
<h3 id="https协议下提交代码免密码">https协议下提交代码免密码</h3>
<div class="sourceCode" id="cb14"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb14-1" data-line-number="1"><span class="fu">git</span> clone https://github.com/username/rep.git</a></code></pre></div>
<div class="sourceCode" id="cb14"><pre><code class="language-bash"><a class="sourceLine" id="cb14-1" data-line-number="1"><span class="fu">git</span> clone https://github.com/username/rep.git</a></code></pre></div>
<p>通过上面方式克隆可能需要密码,解决办法:进入当前克隆的项目 <code>vi rep/.git/config</code> 编辑 <code>config</code>, 按照下面方式修改,你就可以提交代码不用输入密码了。</p>
<div class="sourceCode" id="cb15"><pre class="sourceCode diff"><code class="sourceCode diff"><a class="sourceLine" id="cb15-1" data-line-number="1">[core]</a>
<a class="sourceLine" id="cb15-2" data-line-number="2"> repositoryformatversion = 0</a>
@@ -157,21 +157,21 @@ tag 创建列出删除或验证使用GPG签名的标签对象
<a class="sourceLine" id="cb15-14" data-line-number="14"> merge = refs/heads/master</a></code></pre></div>
<h3 id="文件推向3个git库">文件推向3个git库</h3>
<p><strong>1. 增加3个远程库地址</strong></p>
<div class="sourceCode" id="cb16"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb16-1" data-line-number="1"><span class="fu">git</span> remote add origin https://github.com/JSLite/JSLite.git </a>
<div class="sourceCode" id="cb16"><pre><code class="language-bash"><a class="sourceLine" id="cb16-1" data-line-number="1"><span class="fu">git</span> remote add origin https://github.com/JSLite/JSLite.git </a>
<a class="sourceLine" id="cb16-2" data-line-number="2"><span class="fu">git</span> remote set-url --add origin https://gitlab.com/wang/JSLite.js.git </a>
<a class="sourceLine" id="cb16-3" data-line-number="3"><span class="fu">git</span> remote set-url --add origin https://oschina.net/wang/JSLite.js.git </a></code></pre></div>
<p><strong>2. 删除其中一个 set-url 地址</strong></p>
<div class="sourceCode" id="cb17"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb17-1" data-line-number="1"><span class="ex">usage</span>: git remote set-url [--push] <span class="op">&lt;</span>name<span class="op">&gt;</span> <span class="op">&lt;</span>newurl<span class="op">&gt;</span> [<span class="op">&lt;</span>oldurl<span class="op">&gt;</span>]</a>
<div class="sourceCode" id="cb17"><pre><code class="language-bash"><a class="sourceLine" id="cb17-1" data-line-number="1"><span class="ex">usage</span>: git remote set-url [--push] <span class="op">&lt;</span>name<span class="op">&gt;</span> <span class="op">&lt;</span>newurl<span class="op">&gt;</span> [<span class="op">&lt;</span>oldurl<span class="op">&gt;</span>]</a>
<a class="sourceLine" id="cb17-2" data-line-number="2"> <span class="ex">or</span>: git remote set-url --add <span class="op">&lt;</span>name<span class="op">&gt;</span> <span class="op">&lt;</span>newurl<span class="op">&gt;</span></a>
<a class="sourceLine" id="cb17-3" data-line-number="3"> <span class="ex">or</span>: git remote set-url --delete <span class="op">&lt;</span>name<span class="op">&gt;</span> <span class="op">&lt;</span>url<span class="op">&gt;</span></a></code></pre></div>
<p><code>git remote set-url --delete origin https://oschina.net/wang/JSLite.js.git</code></p>
<p><strong>3.推送代码</strong></p>
<div class="sourceCode" id="cb18"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb18-1" data-line-number="1"><span class="fu">git</span> push origin master</a>
<div class="sourceCode" id="cb18"><pre><code class="language-bash"><a class="sourceLine" id="cb18-1" data-line-number="1"><span class="fu">git</span> push origin master</a>
<a class="sourceLine" id="cb18-2" data-line-number="2"><span class="fu">git</span> push -f origin master # 强制推送 </a></code></pre></div>
<p><strong>4.拉代码</strong></p>
<p>只能拉取 <code>origin</code> 里的一个url地址这个fetch-url<br />
默认为你添加的到 <code>origin</code>的第一个地址</p>
<div class="sourceCode" id="cb19"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb19-1" data-line-number="1"><span class="fu">git</span> pull origin master </a>
<div class="sourceCode" id="cb19"><pre><code class="language-bash"><a class="sourceLine" id="cb19-1" data-line-number="1"><span class="fu">git</span> pull origin master </a>
<a class="sourceLine" id="cb19-2" data-line-number="2"><span class="fu">git</span> pull --all <span class="co"># 获取远程所有内容包括tag </span></a>
<a class="sourceLine" id="cb19-3" data-line-number="3"><span class="fu">git</span> pull origin next:master <span class="co"># 取回origin主机的next分支与本地的master分支合并 </span></a>
<a class="sourceLine" id="cb19-4" data-line-number="4"><span class="fu">git</span> pull origin next <span class="co"># 远程分支是与当前分支合并 </span></a>
@@ -181,59 +181,59 @@ tag 创建列出删除或验证使用GPG签名的标签对象
<a class="sourceLine" id="cb19-8" data-line-number="8"><span class="fu">git</span> merge origin/next </a></code></pre></div>
<p>如果远程主机删除了某个分支默认情况下git pull 不会在拉取远程分支的时候删除对应的本地分支。这是为了防止由于其他人操作了远程主机导致git pull不知不觉删除了本地分支。<br />
但是,你可以改变这个行为,加上参数 -p 就会在本地删除远程已经删除的分支。</p>
<div class="sourceCode" id="cb20"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb20-1" data-line-number="1">$ <span class="fu">git</span> pull -p</a>
<div class="sourceCode" id="cb20"><pre><code class="language-bash"><a class="sourceLine" id="cb20-1" data-line-number="1">$ <span class="fu">git</span> pull -p</a>
<a class="sourceLine" id="cb20-2" data-line-number="2"><span class="co"># 等同于下面的命令</span></a>
<a class="sourceLine" id="cb20-3" data-line-number="3">$ <span class="fu">git</span> fetch --prune origin </a>
<a class="sourceLine" id="cb20-4" data-line-number="4">$ <span class="fu">git</span> fetch -p</a></code></pre></div>
<p><strong>5.更改pull</strong></p>
<p>只需要更改config文件里那三个url的顺序即可fetch-url会直接对应排行第一的那个utl连接。</p>
<h3 id="修改远程仓库地址">修改远程仓库地址</h3>
<div class="sourceCode" id="cb21"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb21-1" data-line-number="1"><span class="fu">git</span> remote remove origin # 删除该远程路径 </a>
<div class="sourceCode" id="cb21"><pre><code class="language-bash"><a class="sourceLine" id="cb21-1" data-line-number="1"><span class="fu">git</span> remote remove origin # 删除该远程路径 </a>
<a class="sourceLine" id="cb21-2" data-line-number="2"><span class="fu">git</span> remote add origin git@jslite.github.com:JSLite/JSLite.git # 添加远程路径 </a></code></pre></div>
<h3 id="撤销远程记录">撤销远程记录</h3>
<div class="sourceCode" id="cb22"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb22-1" data-line-number="1"><span class="fu">git</span> reset --hard HEAD~1 <span class="co"># 撤销一条记录 </span></a>
<div class="sourceCode" id="cb22"><pre><code class="language-bash"><a class="sourceLine" id="cb22-1" data-line-number="1"><span class="fu">git</span> reset --hard HEAD~1 <span class="co"># 撤销一条记录 </span></a>
<a class="sourceLine" id="cb22-2" data-line-number="2"><span class="fu">git</span> push -f origin HEAD:master <span class="co"># 同步到远程仓库 </span></a></code></pre></div>
<h3 id="放弃本地的文件修改">放弃本地的文件修改</h3>
<div class="sourceCode" id="cb23"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb23-1" data-line-number="1"><span class="fu">git</span> reset --hard FETCH_HEAD <span class="co"># FETCH_HEAD表示上一次成功git pull之后形成的commit点。然后git pull</span></a></code></pre></div>
<div class="sourceCode" id="cb23"><pre><code class="language-bash"><a class="sourceLine" id="cb23-1" data-line-number="1"><span class="fu">git</span> reset --hard FETCH_HEAD <span class="co"># FETCH_HEAD表示上一次成功git pull之后形成的commit点。然后git pull</span></a></code></pre></div>
<p><code>git reset --hard FETCH_HEAD</code> 出现错误</p>
<div class="sourceCode" id="cb24"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb24-1" data-line-number="1"><span class="fu">git</span> pull</a>
<div class="sourceCode" id="cb24"><pre><code class="language-bash"><a class="sourceLine" id="cb24-1" data-line-number="1"><span class="fu">git</span> pull</a>
<a class="sourceLine" id="cb24-2" data-line-number="2"><span class="ex">You</span> are not currently on a branch, so I cannot use any</a>
<a class="sourceLine" id="cb24-3" data-line-number="3"><span class="st">&#39;branch.&lt;branchname&gt;.merge&#39;</span> <span class="kw">in</span> <span class="ex">your</span> configuration file.</a>
<a class="sourceLine" id="cb24-4" data-line-number="4"><span class="ex">Please</span> specify which remote branch you want to use on the command</a>
<a class="sourceLine" id="cb24-5" data-line-number="5"><span class="ex">line</span> and try again (e.g. <span class="st">&#39;git pull &lt;repository&gt; &lt;refspec&gt;&#39;</span>)<span class="ex">.</span></a>
<a class="sourceLine" id="cb24-6" data-line-number="6"><span class="ex">See</span> git-pull(1) <span class="ex">FOR</span> details.</a></code></pre></div>
<p>解决方法:</p>
<div class="sourceCode" id="cb25"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb25-1" data-line-number="1"><span class="fu">git</span> checkout -b temp <span class="co"># 新建+切换到temp分支 </span></a>
<div class="sourceCode" id="cb25"><pre><code class="language-bash"><a class="sourceLine" id="cb25-1" data-line-number="1"><span class="fu">git</span> checkout -b temp <span class="co"># 新建+切换到temp分支 </span></a>
<a class="sourceLine" id="cb25-2" data-line-number="2"><span class="fu">git</span> checkout master</a></code></pre></div>
<h3 id="最简单放弃本地修改内容">最简单放弃本地修改内容</h3>
<div class="sourceCode" id="cb26"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb26-1" data-line-number="1"><span class="co"># 如果有的修改以及加入暂存区的话</span></a>
<div class="sourceCode" id="cb26"><pre><code class="language-bash"><a class="sourceLine" id="cb26-1" data-line-number="1"><span class="co"># 如果有的修改以及加入暂存区的话</span></a>
<a class="sourceLine" id="cb26-2" data-line-number="2"><span class="fu">git</span> reset --hard </a>
<a class="sourceLine" id="cb26-3" data-line-number="3"><span class="co"># 还原所有修改,不会删除新增的文件</span></a>
<a class="sourceLine" id="cb26-4" data-line-number="4"><span class="fu">git</span> checkout . </a>
<a class="sourceLine" id="cb26-5" data-line-number="5"><span class="co"># 下面命令会删除新增的文件</span></a>
<a class="sourceLine" id="cb26-6" data-line-number="6"><span class="fu">git</span> clean -xdf</a></code></pre></div>
<p>通过存储暂存区stash在删除暂存区的方法放弃本地修改。</p>
<div class="sourceCode" id="cb27"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb27-1" data-line-number="1"><span class="fu">git</span> stash <span class="kw">&amp;&amp;</span> <span class="fu">git</span> stash drop </a></code></pre></div>
<div class="sourceCode" id="cb27"><pre><code class="language-bash"><a class="sourceLine" id="cb27-1" data-line-number="1"><span class="fu">git</span> stash <span class="kw">&amp;&amp;</span> <span class="fu">git</span> stash drop </a></code></pre></div>
<h3 id="回滚到某个commit提交">回滚到某个commit提交</h3>
<div class="sourceCode" id="cb28"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb28-1" data-line-number="1"><span class="fu">git</span> revert HEAD~1 <span class="co"># 撤销一条记录 会弹出 commit 编辑</span></a>
<div class="sourceCode" id="cb28"><pre><code class="language-bash"><a class="sourceLine" id="cb28-1" data-line-number="1"><span class="fu">git</span> revert HEAD~1 <span class="co"># 撤销一条记录 会弹出 commit 编辑</span></a>
<a class="sourceLine" id="cb28-2" data-line-number="2"><span class="fu">git</span> push <span class="co"># 提交回滚</span></a></code></pre></div>
<h3 id="回退到某一个版本">回退到某一个版本</h3>
<div class="sourceCode" id="cb29"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb29-1" data-line-number="1"><span class="fu">git</span> reset --hard <span class="op">&lt;</span>hash<span class="op">&gt;</span></a>
<div class="sourceCode" id="cb29"><pre><code class="language-bash"><a class="sourceLine" id="cb29-1" data-line-number="1"><span class="fu">git</span> reset --hard <span class="op">&lt;</span>hash<span class="op">&gt;</span></a>
<a class="sourceLine" id="cb29-2" data-line-number="2"><span class="co"># 例如 git reset --hard a3hd73r</span></a>
<a class="sourceLine" id="cb29-3" data-line-number="3"><span class="co"># --hard代表丢弃工作区的修改让工作区与版本代码一模一样与之对应</span></a>
<a class="sourceLine" id="cb29-4" data-line-number="4"><span class="co"># --soft参数代表保留工作区的修改。</span></a></code></pre></div>
<h3 id="去掉某个commit">去掉某个commit</h3>
<div class="sourceCode" id="cb30"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb30-1" data-line-number="1"><span class="co"># 实质是新建了一个与原来完全相反的commit抵消了原来commit的效果</span></a>
<div class="sourceCode" id="cb30"><pre><code class="language-bash"><a class="sourceLine" id="cb30-1" data-line-number="1"><span class="co"># 实质是新建了一个与原来完全相反的commit抵消了原来commit的效果</span></a>
<a class="sourceLine" id="cb30-2" data-line-number="2"><span class="fu">git</span> revert <span class="op">&lt;</span>commit-hash<span class="op">&gt;</span> </a></code></pre></div>
<h3 id="新建一个空分支">新建一个空分支</h3>
<div class="sourceCode" id="cb31"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb31-1" data-line-number="1"><span class="co"># 这种方式新建的分支(gh-pages)是没有 commit 记录的</span></a>
<div class="sourceCode" id="cb31"><pre><code class="language-bash"><a class="sourceLine" id="cb31-1" data-line-number="1"><span class="co"># 这种方式新建的分支(gh-pages)是没有 commit 记录的</span></a>
<a class="sourceLine" id="cb31-2" data-line-number="2"><span class="fu">git</span> checkout --orphan gh-pages</a>
<a class="sourceLine" id="cb31-3" data-line-number="3"><span class="co"># 删除新建的gh-pages分支原本的内容如果不删除提交将作为当前分支的第一个commit</span></a>
<a class="sourceLine" id="cb31-4" data-line-number="4"><span class="fu">git</span> rm -rf .</a>
<a class="sourceLine" id="cb31-5" data-line-number="5"><span class="co"># 查看一下状态 有可能上面一条命令,没有删除还没有提交的的文件</span></a>
<a class="sourceLine" id="cb31-6" data-line-number="6"><span class="fu">git</span> state </a></code></pre></div>
<h3 id="合并多个commit">合并多个commit</h3>
<div class="sourceCode" id="cb32"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb32-1" data-line-number="1"><span class="co"># 这个命令将最近4个commit合并为1个HEAD代表当前版本。</span></a>
<div class="sourceCode" id="cb32"><pre><code class="language-bash"><a class="sourceLine" id="cb32-1" data-line-number="1"><span class="co"># 这个命令将最近4个commit合并为1个HEAD代表当前版本。</span></a>
<a class="sourceLine" id="cb32-2" data-line-number="2"><span class="co"># 将进入VIM界面你可以修改提交信息。</span></a>
<a class="sourceLine" id="cb32-3" data-line-number="3"><span class="fu">git</span> rebase -i HEAD~4 </a>
<a class="sourceLine" id="cb32-4" data-line-number="4"><span class="co"># 可以看到其中分为两个部分,上方未注释的部分是填写要执行的指令,</span></a>
@@ -251,7 +251,7 @@ tag 创建列出删除或验证使用GPG签名的标签对象
<a class="sourceLine" id="cb32-16" data-line-number="16"><span class="co"># 将修改强制推送到前端</span></a>
<a class="sourceLine" id="cb32-17" data-line-number="17"><span class="fu">git</span> push -f origin master</a></code></pre></div>
<h3 id="修改远程commit记录">修改远程Commit记录</h3>
<div class="sourceCode" id="cb33"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb33-1" data-line-number="1"><span class="fu">git</span> commit --amend</a>
<div class="sourceCode" id="cb33"><pre><code class="language-bash"><a class="sourceLine" id="cb33-1" data-line-number="1"><span class="fu">git</span> commit --amend</a>
<a class="sourceLine" id="cb33-2" data-line-number="2"><span class="co"># amend只能修改没有提交到线上的最后一次commit记录</span></a>
<a class="sourceLine" id="cb33-3" data-line-number="3"><span class="fu">git</span> rebase -i HEAD~3</a>
<a class="sourceLine" id="cb33-4" data-line-number="4"><span class="co"># 表示要修改当前版本的倒数第三次状态</span></a>
@@ -270,7 +270,7 @@ tag 创建列出删除或验证使用GPG签名的标签对象
<a class="sourceLine" id="cb33-17" data-line-number="17"><span class="co"># x, exec = run command (the rest of the line) using shell</span></a>
<a class="sourceLine" id="cb33-18" data-line-number="18"><span class="co"># d, drop = remove commit</span></a></code></pre></div>
<p>保存并退出,会弹出下面提示</p>
<div class="sourceCode" id="cb34"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb34-1" data-line-number="1"><span class="co"># You can amend the commit now, with</span></a>
<div class="sourceCode" id="cb34"><pre><code class="language-bash"><a class="sourceLine" id="cb34-1" data-line-number="1"><span class="co"># You can amend the commit now, with</span></a>
<a class="sourceLine" id="cb34-2" data-line-number="2"><span class="co"># </span></a>
<a class="sourceLine" id="cb34-3" data-line-number="3"><span class="co"># git commit --amend</span></a>
<a class="sourceLine" id="cb34-4" data-line-number="4"><span class="co"># </span></a>
@@ -287,7 +287,7 @@ tag 创建列出删除或验证使用GPG签名的标签对象
<a class="sourceLine" id="cb34-15" data-line-number="15"><span class="co"># 最后确保别人没有提交进行push最好不要加 -f 强制推送</span></a>
<a class="sourceLine" id="cb34-16" data-line-number="16"><span class="fu">git</span> push -f origin master</a></code></pre></div>
<h3 id="添加忽略文件">添加忽略文件</h3>
<pre><code>echo node_modules/ &gt;&gt; .gitignore</code></pre>
<pre><code class="language-bash">echo node_modules/ &gt;&gt; .gitignore</code></pre>
<h3 id="利用commit关闭一个issue">利用commit关闭一个issue</h3>
<p>这个功能在Github上可以玩儿Gitlab上特别老的版本不能玩儿哦那么如何跟随着commit关闭一个issue呢? 在confirm merge的时候可以使用一下命令来关闭相关issue:</p>
<p><code>fixes #xxx</code><code>fixed #xxx</code><code>fix #xxx</code><code>closes #xxx</code><code>close #xxx</code><code>closed #xxx</code></p>
@@ -295,7 +295,7 @@ tag 创建列出删除或验证使用GPG签名的标签对象
<p><a href="https://help.github.com/articles/syncing-a-fork/">Github教程同步fork教程</a><a href="http://www.miss77.net/549.html">在Github上同步一个分支(fork)</a></p>
<p><strong>设置添加多个远程仓库地址。</strong></p>
<p>在同步之前,需要创建一个远程点指向上游仓库(repo).如果你已经派生了一个原始仓库,可以按照如下方法做。</p>
<div class="sourceCode" id="cb36"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb36-1" data-line-number="1">$ <span class="fu">git</span> remote -v</a>
<div class="sourceCode" id="cb36"><pre><code class="language-bash"><a class="sourceLine" id="cb36-1" data-line-number="1">$ <span class="fu">git</span> remote -v</a>
<a class="sourceLine" id="cb36-2" data-line-number="2"><span class="co"># List the current remotes (列出当前远程仓库)</span></a>
<a class="sourceLine" id="cb36-3" data-line-number="3"><span class="co"># origin https://github.com/user/repo.git (fetch)</span></a>
<a class="sourceLine" id="cb36-4" data-line-number="4"><span class="co"># origin https://github.com/user/repo.git (push)</span></a>
@@ -309,7 +309,7 @@ tag 创建列出删除或验证使用GPG签名的标签对象
<a class="sourceLine" id="cb36-12" data-line-number="12"><span class="co"># upstream https://github.com/otheruser/repo.git (push)</span></a></code></pre></div>
<p><strong>同步更新仓库内容</strong></p>
<p>同步上游仓库到你的仓库需要执行两步:首先你需要从远程拉去,之后你需要合并你希望的分支到你的本地副本分支。从上游的存储库中提取分支以及各自的提交内容。 <code>master</code> 将被存储在本地分支机构 <code>upstream/master</code></p>
<div class="sourceCode" id="cb37"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb37-1" data-line-number="1"><span class="fu">git</span> fetch upstream</a>
<div class="sourceCode" id="cb37"><pre><code class="language-bash"><a class="sourceLine" id="cb37-1" data-line-number="1"><span class="fu">git</span> fetch upstream</a>
<a class="sourceLine" id="cb37-2" data-line-number="2"><span class="co"># remote: Counting objects: 75, done.</span></a>
<a class="sourceLine" id="cb37-3" data-line-number="3"><span class="co"># remote: Compressing objects: 100% (53/53), done.</span></a>
<a class="sourceLine" id="cb37-4" data-line-number="4"><span class="co"># remote: Total 62 (delta 27), reused 44 (delta 9)</span></a>
@@ -317,10 +317,10 @@ tag 创建列出删除或验证使用GPG签名的标签对象
<a class="sourceLine" id="cb37-6" data-line-number="6"><span class="co"># From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY</span></a>
<a class="sourceLine" id="cb37-7" data-line-number="7"><span class="co"># * [new branch] master -&gt; upstream/master</span></a></code></pre></div>
<p>检查你的 forks 本地 <code>master</code> 分支</p>
<div class="sourceCode" id="cb38"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb38-1" data-line-number="1"><span class="fu">git</span> checkout master</a>
<div class="sourceCode" id="cb38"><pre><code class="language-bash"><a class="sourceLine" id="cb38-1" data-line-number="1"><span class="fu">git</span> checkout master</a>
<a class="sourceLine" id="cb38-2" data-line-number="2"><span class="co"># Switched to branch &#39;master&#39;</span></a></code></pre></div>
<p>合并来自 <code>upstream/master</code> 的更改到本地 master 分支上。 这使你的前 forks <code>master</code> 分支与上游资源库同步,而不会丢失你本地修改。</p>
<div class="sourceCode" id="cb39"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb39-1" data-line-number="1"><span class="fu">git</span> merge upstream/master</a>
<div class="sourceCode" id="cb39"><pre><code class="language-bash"><a class="sourceLine" id="cb39-1" data-line-number="1"><span class="fu">git</span> merge upstream/master</a>
<a class="sourceLine" id="cb39-2" data-line-number="2"><span class="co"># Updating a422352..5fdff0f</span></a>
<a class="sourceLine" id="cb39-3" data-line-number="3"><span class="co"># Fast-forward</span></a>
<a class="sourceLine" id="cb39-4" data-line-number="4"><span class="co"># README | 9 -------</span></a>
@@ -331,14 +331,14 @@ tag 创建列出删除或验证使用GPG签名的标签对象
<h3 id="批量修改历史commit中的名字和邮箱">批量修改历史commit中的名字和邮箱</h3>
<p><strong>1.克隆仓库</strong></p>
<p>注意参数这个不是普通的cloneclone下来的仓库并不能参与开发</p>
<div class="sourceCode" id="cb40"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb40-1" data-line-number="1"><span class="fu">git</span> clone --bare https://github.com/user/repo.git</a>
<div class="sourceCode" id="cb40"><pre><code class="language-bash"><a class="sourceLine" id="cb40-1" data-line-number="1"><span class="fu">git</span> clone --bare https://github.com/user/repo.git</a>
<a class="sourceLine" id="cb40-2" data-line-number="2"><span class="bu">cd</span> repo.git</a></code></pre></div>
<p><strong>2.命令行中运行代码</strong></p>
<p>OLD_EMAIL原来的邮箱<br />
CORRECT_NAME更正的名字<br />
CORRECT_EMAIL更正的邮箱</p>
<p>将下面代码复制放到命令行中执行</p>
<div class="sourceCode" id="cb41"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb41-1" data-line-number="1"><span class="fu">git</span> filter-branch -f --env-filter <span class="st">&#39;</span></a>
<div class="sourceCode" id="cb41"><pre><code class="language-bash"><a class="sourceLine" id="cb41-1" data-line-number="1"><span class="fu">git</span> filter-branch -f --env-filter <span class="st">&#39;</span></a>
<a class="sourceLine" id="cb41-2" data-line-number="2"><span class="st">OLD_EMAIL=&quot;wowohoo@qq.com&quot;</span></a>
<a class="sourceLine" id="cb41-3" data-line-number="3"><span class="st">CORRECT_NAME=&quot;小弟调调&quot;</span></a>
<a class="sourceLine" id="cb41-4" data-line-number="4"><span class="st">CORRECT_EMAIL=&quot;更正的邮箱@qq.com&quot;</span></a>
@@ -354,20 +354,20 @@ CORRECT_EMAIL更正的邮箱</p>
<a class="sourceLine" id="cb41-14" data-line-number="14"><span class="st">fi</span></a>
<a class="sourceLine" id="cb41-15" data-line-number="15"><span class="st">&#39;</span> --tag-name-filter cat -- --branches --tags</a></code></pre></div>
<p>执行过程</p>
<div class="sourceCode" id="cb42"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb42-1" data-line-number="1"><span class="ex">Rewrite</span> 160d4df2689ff6df3820563bfd13b5f1fb9ba832 (479/508) <span class="kw">(</span><span class="ex">16</span> seconds passed, remaining 0 predicted<span class="kw">)</span></a>
<div class="sourceCode" id="cb42"><pre><code class="language-bash"><a class="sourceLine" id="cb42-1" data-line-number="1"><span class="ex">Rewrite</span> 160d4df2689ff6df3820563bfd13b5f1fb9ba832 (479/508) <span class="kw">(</span><span class="ex">16</span> seconds passed, remaining 0 predicted<span class="kw">)</span></a>
<a class="sourceLine" id="cb42-2" data-line-number="2"><span class="ex">Ref</span> <span class="st">&#39;refs/heads/dev&#39;</span> was rewritten</a>
<a class="sourceLine" id="cb42-3" data-line-number="3"><span class="ex">Ref</span> <span class="st">&#39;refs/heads/master&#39;</span> was rewritten</a></code></pre></div>
<p><strong>3.同步到远程仓库</strong></p>
<p>同步到push远程git仓库</p>
<div class="sourceCode" id="cb43"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb43-1" data-line-number="1"><span class="fu">git</span> push --force --tags origin <span class="st">&#39;refs/heads/*&#39;</span></a></code></pre></div>
<div class="sourceCode" id="cb43"><pre><code class="language-bash"><a class="sourceLine" id="cb43-1" data-line-number="1"><span class="fu">git</span> push --force --tags origin <span class="st">&#39;refs/heads/*&#39;</span></a></code></pre></div>
<p>我还遇到了如下面错误lab默认给master分支加了保护不允许强制覆盖。<code>Project(项目)</code>-&gt;<code>Setting</code>-&gt;<code>Repository</code> 菜单下面的<code>Protected branches</code>把master的保护去掉就可以了。修改完之后建议把master的保护再加回来毕竟强推不是件好事。</p>
<div class="sourceCode" id="cb44"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb44-1" data-line-number="1"><span class="ex">remote</span>: GitLab: You are not allowed to force push code to a protected branch on this project.</a></code></pre></div>
<div class="sourceCode" id="cb44"><pre><code class="language-bash"><a class="sourceLine" id="cb44-1" data-line-number="1"><span class="ex">remote</span>: GitLab: You are not allowed to force push code to a protected branch on this project.</a></code></pre></div>
<p>当上面的push 不上去的时候,先 <code>git pull</code> 确保最新代码</p>
<div class="sourceCode" id="cb45"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb45-1" data-line-number="1"><span class="fu">git</span> pull --allow-unrelated-histories</a>
<div class="sourceCode" id="cb45"><pre><code class="language-bash"><a class="sourceLine" id="cb45-1" data-line-number="1"><span class="fu">git</span> pull --allow-unrelated-histories</a>
<a class="sourceLine" id="cb45-2" data-line-number="2"><span class="co"># 或者指定分枝</span></a>
<a class="sourceLine" id="cb45-3" data-line-number="3"><span class="fu">git</span> pull origin master --allow-unrelated-histories</a></code></pre></div>
<h3 id="查看某个文件历史">查看某个文件历史</h3>
<div class="sourceCode" id="cb46"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb46-1" data-line-number="1"><span class="fu">git</span> log --pretty=oneline 文件名 # 列出文件的所有改动历史 </a>
<div class="sourceCode" id="cb46"><pre><code class="language-bash"><a class="sourceLine" id="cb46-1" data-line-number="1"><span class="fu">git</span> log --pretty=oneline 文件名 # 列出文件的所有改动历史 </a>
<a class="sourceLine" id="cb46-2" data-line-number="2"><span class="fu">git</span> show c178bf49 # 某次的改动的修改记录 </a>
<a class="sourceLine" id="cb46-3" data-line-number="3"><span class="fu">git</span> log -p c178bf49 <span class="co"># 某次的改动的修改记录 </span></a>
<a class="sourceLine" id="cb46-4" data-line-number="4"><span class="fu">git</span> blame 文件名 # 显示文件的每一行是在那个版本最后修改。 </a>
@@ -380,7 +380,7 @@ CORRECT_EMAIL更正的邮箱</p>
<p>配置好后再输入git命令的时候就不用再输入一大段了例如我们要查看状态只需</p>
<div class="sourceCode" id="cb48"><pre class="sourceCode sh"><code class="sourceCode bash"><a class="sourceLine" id="cb48-1" data-line-number="1"><span class="fu">git</span> st</a></code></pre></div>
<h3 id="中文乱码的解决方案">中文乱码的解决方案</h3>
<div class="sourceCode" id="cb49"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb49-1" data-line-number="1"><span class="fu">git</span> config --global core.quotepath false</a></code></pre></div>
<div class="sourceCode" id="cb49"><pre><code class="language-bash"><a class="sourceLine" id="cb49-1" data-line-number="1"><span class="fu">git</span> config --global core.quotepath false</a></code></pre></div>
<h2 id="新建仓库">新建仓库</h2>
<h3 id="init">init</h3>
<p><code>git init</code> #初始化</p>
@@ -395,7 +395,7 @@ CORRECT_EMAIL更正的邮箱</p>
<h3 id="remote">remote</h3>
<p><code>git remote add origin git@github.com:JSLite/test.git</code> #添加源</p>
<h3 id="push">push</h3>
<div class="sourceCode" id="cb50"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb50-1" data-line-number="1"><span class="fu">git</span> push -u origin master <span class="co"># push同事设置默认跟踪分支 </span></a>
<div class="sourceCode" id="cb50"><pre><code class="language-bash"><a class="sourceLine" id="cb50-1" data-line-number="1"><span class="fu">git</span> push -u origin master <span class="co"># push同事设置默认跟踪分支 </span></a>
<a class="sourceLine" id="cb50-2" data-line-number="2"><span class="fu">git</span> push origin master </a>
<a class="sourceLine" id="cb50-3" data-line-number="3"><span class="fu">git</span> push -f origin master <span class="co"># 强制推送文件,缩写 -f全写--force</span></a></code></pre></div>
<h2 id="clone">clone</h2>
@@ -403,7 +403,7 @@ CORRECT_EMAIL更正的邮箱</p>
<code>git clone git://github.com/JSLite/JSLite.js.git mypro</code> #克隆到自定义文件夹<br />
<code>git clone [user@]example.com:path/to/repo.git/</code> #SSH协议还有另一种写法。</p>
<p>git clone支持多种协议除了HTTP(s)以外还支持SSH、Git、本地文件协议等下面是一些例子。<code>git clone &lt;版本库的网址&gt; &lt;本地目录名&gt;</code></p>
<div class="sourceCode" id="cb51"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb51-1" data-line-number="1">$ <span class="fu">git</span> clone http[s]://example.com/path/to/repo.git/</a>
<div class="sourceCode" id="cb51"><pre><code class="language-bash"><a class="sourceLine" id="cb51-1" data-line-number="1">$ <span class="fu">git</span> clone http[s]://example.com/path/to/repo.git/</a>
<a class="sourceLine" id="cb51-2" data-line-number="2">$ <span class="fu">git</span> clone ssh://example.com/path/to/repo.git/</a>
<a class="sourceLine" id="cb51-3" data-line-number="3">$ <span class="fu">git</span> clone git://example.com/path/to/repo.git/</a>
<a class="sourceLine" id="cb51-4" data-line-number="4">$ <span class="fu">git</span> clone /opt/git/project.git </a>
@@ -412,18 +412,18 @@ CORRECT_EMAIL更正的邮箱</p>
<a class="sourceLine" id="cb51-7" data-line-number="7">$ <span class="fu">git</span> clone rsync://example.com/path/to/repo.git/</a></code></pre></div>
<h2 id="本地">本地</h2>
<h3 id="help">help</h3>
<div class="sourceCode" id="cb52"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb52-1" data-line-number="1"><span class="fu">git</span> help config <span class="co"># 获取帮助信息 </span></a></code></pre></div>
<div class="sourceCode" id="cb52"><pre><code class="language-bash"><a class="sourceLine" id="cb52-1" data-line-number="1"><span class="fu">git</span> help config <span class="co"># 获取帮助信息 </span></a></code></pre></div>
<h3 id="add-1">add</h3>
<div class="sourceCode" id="cb53"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb53-1" data-line-number="1"><span class="fu">git</span> add * # 跟踪新文件 </a>
<div class="sourceCode" id="cb53"><pre><code class="language-bash"><a class="sourceLine" id="cb53-1" data-line-number="1"><span class="fu">git</span> add * # 跟踪新文件 </a>
<a class="sourceLine" id="cb53-2" data-line-number="2"><span class="fu">git</span> add -u [path] # 添加[指定路径下]已跟踪文件 </a></code></pre></div>
<h3 id="rm">rm</h3>
<div class="sourceCode" id="cb54"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb54-1" data-line-number="1"><span class="fu">rm</span> *<span class="kw">&amp;</span><span class="fu">git</span> rm * # 移除文件 </a>
<div class="sourceCode" id="cb54"><pre><code class="language-bash"><a class="sourceLine" id="cb54-1" data-line-number="1"><span class="fu">rm</span> *<span class="kw">&amp;</span><span class="fu">git</span> rm * # 移除文件 </a>
<a class="sourceLine" id="cb54-2" data-line-number="2"><span class="fu">git</span> rm -f * # 移除文件 </a>
<a class="sourceLine" id="cb54-3" data-line-number="3"><span class="fu">git</span> rm --cached * # 取消跟踪 </a>
<a class="sourceLine" id="cb54-4" data-line-number="4"><span class="fu">git</span> mv file_from file_to # 重命名跟踪文件 </a>
<a class="sourceLine" id="cb54-5" data-line-number="5"><span class="fu">git</span> log # 查看提交记录 </a></code></pre></div>
<h3 id="commit-1">commit</h3>
<div class="sourceCode" id="cb55"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb55-1" data-line-number="1"><span class="fu">git</span> commit <span class="co">#提交更新 </span></a>
<div class="sourceCode" id="cb55"><pre><code class="language-bash"><a class="sourceLine" id="cb55-1" data-line-number="1"><span class="fu">git</span> commit <span class="co">#提交更新 </span></a>
<a class="sourceLine" id="cb55-2" data-line-number="2"><span class="fu">git</span> commit -m <span class="st">&#39;message&#39;</span> <span class="co">#提交说明 </span></a>
<a class="sourceLine" id="cb55-3" data-line-number="3"><span class="fu">git</span> commit -a <span class="co">#跳过使用暂存区域,把所有已经跟踪过的文件暂存起来一并提交 </span></a>
<a class="sourceLine" id="cb55-4" data-line-number="4"><span class="fu">git</span> commit --amend <span class="co">#修改最后一次提交 </span></a>
@@ -432,23 +432,23 @@ CORRECT_EMAIL更正的邮箱</p>
<a class="sourceLine" id="cb55-7" data-line-number="7"><span class="fu">git</span> commit -m <span class="st">&quot;fix #133&quot;</span> commit关闭issue </a>
<a class="sourceLine" id="cb55-8" data-line-number="8"><span class="fu">git</span> commit -m <span class="st">&#39;概要描述&#39;$&#39;</span><span class="dt">\n\n</span><span class="st">&#39;&#39;1.详细描述&#39;$&#39;</span><span class="dt">\n</span><span class="st">&#39;&#39;2.详细描述&#39;</span> <span class="co">#提交简要描述和详细描述 </span></a></code></pre></div>
<h3 id="reset">reset</h3>
<div class="sourceCode" id="cb56"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb56-1" data-line-number="1"><span class="fu">git</span> reset HEAD * # 取消已经暂存的文件 </a>
<div class="sourceCode" id="cb56"><pre><code class="language-bash"><a class="sourceLine" id="cb56-1" data-line-number="1"><span class="fu">git</span> reset HEAD * # 取消已经暂存的文件 </a>
<a class="sourceLine" id="cb56-2" data-line-number="2"><span class="fu">git</span> reset --mixed HEAD * <span class="co"># 同上 </span></a>
<a class="sourceLine" id="cb56-3" data-line-number="3"><span class="fu">git</span> reset --soft HEAD * # 重置到指定状态,不会修改索引区和工作树 </a>
<a class="sourceLine" id="cb56-4" data-line-number="4"><span class="fu">git</span> reset --hard HEAD * # 重置到指定状态,会修改索引区和工作树 </a>
<a class="sourceLine" id="cb56-5" data-line-number="5"><span class="fu">git</span> reset -- files * # 重置index区文件 </a></code></pre></div>
<h3 id="revert">revert</h3>
<div class="sourceCode" id="cb57"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb57-1" data-line-number="1"><span class="fu">git</span> revert HEAD # 撤销前一次操作 </a>
<div class="sourceCode" id="cb57"><pre><code class="language-bash"><a class="sourceLine" id="cb57-1" data-line-number="1"><span class="fu">git</span> revert HEAD # 撤销前一次操作 </a>
<a class="sourceLine" id="cb57-2" data-line-number="2"><span class="fu">git</span> revert HEAD~ # 撤销前前一次操作 </a>
<a class="sourceLine" id="cb57-3" data-line-number="3"><span class="fu">git</span> revert commit <span class="co"># 撤销指定操作 </span></a></code></pre></div>
<h3 id="checkout">checkout</h3>
<div class="sourceCode" id="cb58"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb58-1" data-line-number="1"><span class="fu">git</span> checkout -- file # 取消对文件的修改从暂存区——覆盖worktree file </a>
<div class="sourceCode" id="cb58"><pre><code class="language-bash"><a class="sourceLine" id="cb58-1" data-line-number="1"><span class="fu">git</span> checkout -- file # 取消对文件的修改从暂存区——覆盖worktree file </a>
<a class="sourceLine" id="cb58-2" data-line-number="2"><span class="fu">git</span> checkout branch<span class="kw">|</span><span class="ex">tag</span><span class="kw">|</span><span class="ex">commit</span> -- file_name # 从仓库取出file覆盖当前分支 </a>
<a class="sourceLine" id="cb58-3" data-line-number="3"><span class="fu">git</span> checkout HEAD~1 [文件] # 将会更新 working directory 去匹配某次 commit </a>
<a class="sourceLine" id="cb58-4" data-line-number="4"><span class="fu">git</span> checkout -- . # 从暂存区取出文件覆盖工作区 </a>
<a class="sourceLine" id="cb58-5" data-line-number="5"><span class="fu">git</span> checkout -b gh-pages 0c304c9 # 这个表示 从当前分支 commit 哈希值为 0c304c9 的节点分一个新的分支gh-pages出来并切换到 gh-pages </a></code></pre></div>
<h3 id="diff">diff</h3>
<div class="sourceCode" id="cb59"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb59-1" data-line-number="1"><span class="fu">git</span> diff file # 查看指定文件的差异 </a>
<div class="sourceCode" id="cb59"><pre><code class="language-bash"><a class="sourceLine" id="cb59-1" data-line-number="1"><span class="fu">git</span> diff file # 查看指定文件的差异 </a>
<a class="sourceLine" id="cb59-2" data-line-number="2"><span class="fu">git</span> diff --stat # 查看简单的diff结果 </a>
<a class="sourceLine" id="cb59-3" data-line-number="3"><span class="fu">git</span> diff # 比较Worktree和Index之间的差异 </a>
<a class="sourceLine" id="cb59-4" data-line-number="4"><span class="fu">git</span> diff --cached # 比较Index和HEAD之间的差异 </a>
@@ -459,19 +459,19 @@ CORRECT_EMAIL更正的邮箱</p>
<a class="sourceLine" id="cb59-9" data-line-number="9"><span class="fu">git</span> diff master..test # 上面这条命令只显示两个分支间的差异 </a>
<a class="sourceLine" id="cb59-10" data-line-number="10"><span class="fu">git</span> diff master...test # 你想找出master,test的共有 父分支和<span class="st">&#39;test&#39;</span>分支之间的差异你用3个.<span class="st">&#39;来取代前面的两个&#39;</span>.<span class="st">&#39; </span></a></code></pre></div>
<h3 id="stash">stash</h3>
<div class="sourceCode" id="cb60"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb60-1" data-line-number="1"><span class="fu">git</span> stash <span class="co"># 将工作区现场(已跟踪文件)储藏起来,等以后恢复后继续工作。 </span></a>
<div class="sourceCode" id="cb60"><pre><code class="language-bash"><a class="sourceLine" id="cb60-1" data-line-number="1"><span class="fu">git</span> stash <span class="co"># 将工作区现场(已跟踪文件)储藏起来,等以后恢复后继续工作。 </span></a>
<a class="sourceLine" id="cb60-2" data-line-number="2"><span class="fu">git</span> stash list # 查看保存的工作现场 </a>
<a class="sourceLine" id="cb60-3" data-line-number="3"><span class="fu">git</span> stash apply <span class="co"># 恢复工作现场 </span></a>
<a class="sourceLine" id="cb60-4" data-line-number="4"><span class="fu">git</span> stash drop # 删除stash内容 </a>
<a class="sourceLine" id="cb60-5" data-line-number="5"><span class="fu">git</span> stash pop # 恢复的同时直接删除stash内容 </a>
<a class="sourceLine" id="cb60-6" data-line-number="6"><span class="fu">git</span> stash apply stash@<span class="dt">{0}</span> <span class="co"># 恢复指定的工作现场,当你保存了不只一份工作现场时。 </span></a></code></pre></div>
<h3 id="merge">merge</h3>
<div class="sourceCode" id="cb61"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb61-1" data-line-number="1"><span class="fu">git</span> merge --squash test <span class="co"># 合并压缩将test上的commit压缩为一条 </span></a></code></pre></div>
<div class="sourceCode" id="cb61"><pre><code class="language-bash"><a class="sourceLine" id="cb61-1" data-line-number="1"><span class="fu">git</span> merge --squash test <span class="co"># 合并压缩将test上的commit压缩为一条 </span></a></code></pre></div>
<h3 id="cherry-pick">cherry-pick</h3>
<div class="sourceCode" id="cb62"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb62-1" data-line-number="1"><span class="fu">git</span> cherry-pick commit # 拣选合并将commit合并到当前分支 </a>
<div class="sourceCode" id="cb62"><pre><code class="language-bash"><a class="sourceLine" id="cb62-1" data-line-number="1"><span class="fu">git</span> cherry-pick commit # 拣选合并将commit合并到当前分支 </a>
<a class="sourceLine" id="cb62-2" data-line-number="2"><span class="fu">git</span> cherry-pick -n commit <span class="co"># 拣选多个提交,合并完后可以继续拣选下一个提交 </span></a></code></pre></div>
<h3 id="rebase">rebase</h3>
<div class="sourceCode" id="cb63"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb63-1" data-line-number="1"><span class="fu">git</span> rebase master # 将master分之上超前的提交变基到当前分支 </a>
<div class="sourceCode" id="cb63"><pre><code class="language-bash"><a class="sourceLine" id="cb63-1" data-line-number="1"><span class="fu">git</span> rebase master # 将master分之上超前的提交变基到当前分支 </a>
<a class="sourceLine" id="cb63-2" data-line-number="2"><span class="fu">git</span> rebase --onto master 169a6 # 限制回滚范围rebase当前分支从169a6以后的提交 </a>
<a class="sourceLine" id="cb63-3" data-line-number="3"><span class="fu">git</span> rebase --interactive <span class="co"># 交互模式修改commit </span></a>
<a class="sourceLine" id="cb63-4" data-line-number="4"><span class="fu">git</span> rebase --continue # 处理完冲突继续合并 </a>
@@ -479,25 +479,25 @@ CORRECT_EMAIL更正的邮箱</p>
<a class="sourceLine" id="cb63-6" data-line-number="6"><span class="fu">git</span> rebase --abort # 取消合并 </a></code></pre></div>
<h2 id="分支branch">分支branch</h2>
<h3 id="删除">删除</h3>
<div class="sourceCode" id="cb64"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb64-1" data-line-number="1"><span class="fu">git</span> push origin :branchName # 删除远程分支 </a>
<div class="sourceCode" id="cb64"><pre><code class="language-bash"><a class="sourceLine" id="cb64-1" data-line-number="1"><span class="fu">git</span> push origin :branchName # 删除远程分支 </a>
<a class="sourceLine" id="cb64-2" data-line-number="2"><span class="fu">git</span> push origin --delete new <span class="co"># 删除远程分支new </span></a>
<a class="sourceLine" id="cb64-3" data-line-number="3"><span class="fu">git</span> branch -d branchName # 删除本地分支,强制删除用-D </a>
<a class="sourceLine" id="cb64-4" data-line-number="4"><span class="fu">git</span> branch -d test # 删除本地test分支 </a>
<a class="sourceLine" id="cb64-5" data-line-number="5"><span class="fu">git</span> branch -D test # 强制删除本地test分支 </a>
<a class="sourceLine" id="cb64-6" data-line-number="6"><span class="fu">git</span> remote prune origin <span class="co"># 远程删除了,本地还能看到远程存在,这条命令删除远程不存在的分支</span></a></code></pre></div>
<h3 id="提交">提交</h3>
<div class="sourceCode" id="cb65"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb65-1" data-line-number="1"><span class="fu">git</span> push -u origin branchName <span class="co"># 提交分支到远程origin主机中 </span></a></code></pre></div>
<div class="sourceCode" id="cb65"><pre><code class="language-bash"><a class="sourceLine" id="cb65-1" data-line-number="1"><span class="fu">git</span> push -u origin branchName <span class="co"># 提交分支到远程origin主机中 </span></a></code></pre></div>
<h3 id="拉取">拉取</h3>
<p><code>git fetch -p</code> #拉取远程分支时,自动清理 远程分支已删除,本地还存在的对应同名分支。</p>
<h3 id="分支合并">分支合并</h3>
<div class="sourceCode" id="cb66"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb66-1" data-line-number="1"><span class="fu">git</span> merge branchName # 合并分支 - 将分支branchName和当前所在分支合并 </a>
<div class="sourceCode" id="cb66"><pre><code class="language-bash"><a class="sourceLine" id="cb66-1" data-line-number="1"><span class="fu">git</span> merge branchName # 合并分支 - 将分支branchName和当前所在分支合并 </a>
<a class="sourceLine" id="cb66-2" data-line-number="2"><span class="fu">git</span> merge origin/master # 在本地分支上合并远程分支。 </a>
<a class="sourceLine" id="cb66-3" data-line-number="3"><span class="fu">git</span> rebase origin/master # 在本地分支上合并远程分支。 </a>
<a class="sourceLine" id="cb66-4" data-line-number="4"><span class="fu">git</span> merge test # 将test分支合并到当前分支 </a></code></pre></div>
<h3 id="重命名">重命名</h3>
<p><code>git branch -m old new</code> #重命名分支</p>
<h3 id="查看">查看</h3>
<div class="sourceCode" id="cb67"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb67-1" data-line-number="1"><span class="fu">git</span> branch # 列出本地分支 </a>
<div class="sourceCode" id="cb67"><pre><code class="language-bash"><a class="sourceLine" id="cb67-1" data-line-number="1"><span class="fu">git</span> branch # 列出本地分支 </a>
<a class="sourceLine" id="cb67-2" data-line-number="2"><span class="fu">git</span> branch -r # 列出远端分支 </a>
<a class="sourceLine" id="cb67-3" data-line-number="3"><span class="fu">git</span> branch -a # 列出所有分支 </a>
<a class="sourceLine" id="cb67-4" data-line-number="4"><span class="fu">git</span> branch -v # 查看各个分支最后一个提交对象的信息 </a>
@@ -505,19 +505,19 @@ CORRECT_EMAIL更正的邮箱</p>
<a class="sourceLine" id="cb67-6" data-line-number="6"><span class="fu">git</span> branch --no-merge # 查看为合并到当前分支的分支 </a>
<a class="sourceLine" id="cb67-7" data-line-number="7"><span class="fu">git</span> remote show origin # 可以查看remote地址远程分支</a></code></pre></div>
<h3 id="新建">新建</h3>
<div class="sourceCode" id="cb68"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb68-1" data-line-number="1"><span class="fu">git</span> branch test <span class="co"># 新建test分支 </span></a>
<div class="sourceCode" id="cb68"><pre><code class="language-bash"><a class="sourceLine" id="cb68-1" data-line-number="1"><span class="fu">git</span> branch test <span class="co"># 新建test分支 </span></a>
<a class="sourceLine" id="cb68-2" data-line-number="2"><span class="fu">git</span> branch newBrach 3defc69 <span class="co"># 指定哈希3defc69新建分支名字为newBrach</span></a>
<a class="sourceLine" id="cb68-3" data-line-number="3"><span class="fu">git</span> checkout -b newBrach origin/master <span class="co"># 取回远程主机的更新以后,在它的基础上创建一个新的分支 </span></a>
<a class="sourceLine" id="cb68-4" data-line-number="4"><span class="fu">git</span> checkout -b newBrach 3defc69 <span class="co"># 以哈希值3defc69新建 newBrach 分支,并切换到该分支</span></a></code></pre></div>
<h3 id="连接">连接</h3>
<div class="sourceCode" id="cb69"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb69-1" data-line-number="1"><span class="fu">git</span> branch --set-upstream dev origin/dev # 将本地dev分支与远程dev分支之间建立链接 </a>
<div class="sourceCode" id="cb69"><pre><code class="language-bash"><a class="sourceLine" id="cb69-1" data-line-number="1"><span class="fu">git</span> branch --set-upstream dev origin/dev # 将本地dev分支与远程dev分支之间建立链接 </a>
<a class="sourceLine" id="cb69-2" data-line-number="2"><span class="fu">git</span> branch --set-upstream master origin/next <span class="co"># 手动建立追踪关系 </span></a></code></pre></div>
<h3 id="分支切换">分支切换</h3>
<div class="sourceCode" id="cb70"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb70-1" data-line-number="1"><span class="fu">git</span> checkout test # 切换到test分支 </a>
<div class="sourceCode" id="cb70"><pre><code class="language-bash"><a class="sourceLine" id="cb70-1" data-line-number="1"><span class="fu">git</span> checkout test # 切换到test分支 </a>
<a class="sourceLine" id="cb70-2" data-line-number="2"><span class="fu">git</span> checkout -b test # 新建+切换到test分支 </a>
<a class="sourceLine" id="cb70-3" data-line-number="3"><span class="fu">git</span> checkout -b test dev <span class="co"># 基于dev新建test分支并切换 </span></a></code></pre></div>
<h2 id="远端">远端</h2>
<div class="sourceCode" id="cb71"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb71-1" data-line-number="1"><span class="fu">git</span> fetch <span class="op">&lt;</span>远程主机名<span class="op">&gt;</span> <span class="op">&lt;</span>分支名<span class="op">&gt;</span> # fetch取回所有分支branch的更新 </a>
<div class="sourceCode" id="cb71"><pre><code class="language-bash"><a class="sourceLine" id="cb71-1" data-line-number="1"><span class="fu">git</span> fetch <span class="op">&lt;</span>远程主机名<span class="op">&gt;</span> <span class="op">&lt;</span>分支名<span class="op">&gt;</span> # fetch取回所有分支branch的更新 </a>
<a class="sourceLine" id="cb71-2" data-line-number="2"><span class="fu">git</span> fetch origin remotebranch[:localbranch] # 从远端拉去分支[到本地指定分支] </a>
<a class="sourceLine" id="cb71-3" data-line-number="3"><span class="fu">git</span> merge origin/branch # 合并远端上指定分支 </a>
<a class="sourceLine" id="cb71-4" data-line-number="4"><span class="fu">git</span> pull origin remotebranch:localbranch # 拉去远端分支到本地分支 </a>
@@ -527,25 +527,25 @@ CORRECT_EMAIL更正的邮箱</p>
<a class="sourceLine" id="cb71-8" data-line-number="8"><span class="fu">git</span> checkout -b [--track] test origin/dev <span class="co"># 基于远端dev分支新建本地test分支[同时设置跟踪] </span></a></code></pre></div>
<h2 id="submodule">submodule</h2>
<p>克隆项目同时克隆submodule</p>
<div class="sourceCode" id="cb72"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb72-1" data-line-number="1"><span class="fu">git</span> clone https://github.com/jaywcjlove/handbook.git --depth=1 --recurse-submodules</a></code></pre></div>
<div class="sourceCode" id="cb72"><pre><code class="language-bash"><a class="sourceLine" id="cb72-1" data-line-number="1"><span class="fu">git</span> clone https://github.com/jaywcjlove/handbook.git --depth=1 --recurse-submodules</a></code></pre></div>
<p>克隆项目,之后再手动克隆 submodule 子项目</p>
<div class="sourceCode" id="cb73"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb73-1" data-line-number="1"><span class="fu">git</span> submodule add --force <span class="st">&#39;仓库地址&#39;</span> <span class="st">&#39;路径&#39;</span></a>
<div class="sourceCode" id="cb73"><pre><code class="language-bash"><a class="sourceLine" id="cb73-1" data-line-number="1"><span class="fu">git</span> submodule add --force <span class="st">&#39;仓库地址&#39;</span> <span class="st">&#39;路径&#39;</span></a>
<a class="sourceLine" id="cb73-2" data-line-number="2"><span class="co"># 其中,仓库地址是指子模块仓库地址,路径指将子模块放置在当前工程下的路径。</span></a>
<a class="sourceLine" id="cb73-3" data-line-number="3"><span class="co"># 注意:路径不能以 / 结尾(会造成修改不生效)、不能是现有工程已有的目录(不能順利 Clone</span></a>
<a class="sourceLine" id="cb73-4" data-line-number="4"><span class="fu">git</span> submodule init <span class="co"># 初始化submodule</span></a>
<a class="sourceLine" id="cb73-5" data-line-number="5"><span class="fu">git</span> submodule update <span class="co"># 更新submodule(必须在根目录执行命令)</span></a>
<a class="sourceLine" id="cb73-6" data-line-number="6"><span class="fu">git</span> submodule update --init --recursive # 下载的工程带有submodule</a></code></pre></div>
<p>当使用<code>git clone</code>下来的工程中带有submodule时初始的时候submodule的内容并不会自动下载下来的此时只需执行如下命令</p>
<div class="sourceCode" id="cb74"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb74-1" data-line-number="1"><span class="fu">git</span> submodule foreach git pull # submodule 里有其他的 submodule 一次更新</a>
<div class="sourceCode" id="cb74"><pre><code class="language-bash"><a class="sourceLine" id="cb74-1" data-line-number="1"><span class="fu">git</span> submodule foreach git pull # submodule 里有其他的 submodule 一次更新</a>
<a class="sourceLine" id="cb74-2" data-line-number="2"><span class="fu">git</span> submodule foreach git pull origin master <span class="co"># submodule更新</span></a>
<a class="sourceLine" id="cb74-3" data-line-number="3"></a>
<a class="sourceLine" id="cb74-4" data-line-number="4"><span class="fu">git</span> submodule foreach --recursive git submodule init</a>
<a class="sourceLine" id="cb74-5" data-line-number="5"><span class="fu">git</span> submodule foreach --recursive git submodule update</a></code></pre></div>
<h2 id="删除文件">删除文件</h2>
<div class="sourceCode" id="cb75"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb75-1" data-line-number="1"><span class="fu">git</span> rm -rf node_modules/</a></code></pre></div>
<div class="sourceCode" id="cb75"><pre><code class="language-bash"><a class="sourceLine" id="cb75-1" data-line-number="1"><span class="fu">git</span> rm -rf node_modules/</a></code></pre></div>
<h2 id="remote-1">remote</h2>
<p>git是一个分布式代码管理工具所以可以支持多个仓库在git里服务器上的仓库在本地称之为remote。个人开发时多源用的可能不多但多源其实非常有用。</p>
<div class="sourceCode" id="cb76"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb76-1" data-line-number="1"><span class="fu">git</span> remote add origin1 git@github.com:yanhaijing/data.js.git </a>
<div class="sourceCode" id="cb76"><pre><code class="language-bash"><a class="sourceLine" id="cb76-1" data-line-number="1"><span class="fu">git</span> remote add origin1 git@github.com:yanhaijing/data.js.git </a>
<a class="sourceLine" id="cb76-2" data-line-number="2"><span class="fu">git</span> remote # 显示全部源 </a>
<a class="sourceLine" id="cb76-3" data-line-number="3"><span class="fu">git</span> remote -v <span class="co"># 显示全部源+详细信息 </span></a>
<a class="sourceLine" id="cb76-4" data-line-number="4"><span class="fu">git</span> remote rename origin1 origin2 <span class="co"># 重命名 </span></a>
@@ -553,7 +553,7 @@ CORRECT_EMAIL更正的邮箱</p>
<a class="sourceLine" id="cb76-6" data-line-number="6"><span class="fu">git</span> remote show origin # 查看指定源的全部信息 </a></code></pre></div>
<h2 id="标签tag">标签tag</h2>
<p>当开发到一定阶段时,给程序打标签是非常棒的功能。</p>
<div class="sourceCode" id="cb77"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb77-1" data-line-number="1"><span class="fu">git</span> tag -a v0.1 -m <span class="st">&#39;my version 1.4&#39;</span> <span class="co"># 新建带注释标签 </span></a>
<div class="sourceCode" id="cb77"><pre><code class="language-bash"><a class="sourceLine" id="cb77-1" data-line-number="1"><span class="fu">git</span> tag -a v0.1 -m <span class="st">&#39;my version 1.4&#39;</span> <span class="co"># 新建带注释标签 </span></a>
<a class="sourceLine" id="cb77-2" data-line-number="2"><span class="fu">git</span> push origin --tags # 一次性推送所有分支 </a>
<a class="sourceLine" id="cb77-3" data-line-number="3"><span class="fu">git</span> push origin v1.5 # 推送单个tag到orgin源上 </a>
<a class="sourceLine" id="cb77-4" data-line-number="4"><span class="fu">git</span> tag -v v1.4.2.1 # 验证标签,验证已经签署的标签</a>
@@ -567,7 +567,7 @@ CORRECT_EMAIL更正的邮箱</p>
<a class="sourceLine" id="cb77-12" data-line-number="12"><span class="fu">git</span> pull --all <span class="co"># 获取远程所有内容包括tag </span></a>
<a class="sourceLine" id="cb77-13" data-line-number="13"><span class="fu">git</span> --git-dir=<span class="st">&#39;&lt;绝对地址&gt;/.git&#39;</span> describe --tags HEAD <span class="co"># 查看本地版本信息 </span></a></code></pre></div>
<h2 id="日志log">日志log</h2>
<div class="sourceCode" id="cb78"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb78-1" data-line-number="1"><span class="fu">git</span> config format.pretty oneline #显示历史记录时,每个提交的信息只显示一行 </a>
<div class="sourceCode" id="cb78"><pre><code class="language-bash"><a class="sourceLine" id="cb78-1" data-line-number="1"><span class="fu">git</span> config format.pretty oneline #显示历史记录时,每个提交的信息只显示一行 </a>
<a class="sourceLine" id="cb78-2" data-line-number="2"><span class="fu">git</span> config color.ui true <span class="co">#彩色的 git 输出 </span></a>
<a class="sourceLine" id="cb78-3" data-line-number="3"><span class="fu">git</span> log <span class="co">#查看最近的提交日志 </span></a>
<a class="sourceLine" id="cb78-4" data-line-number="4"><span class="fu">git</span> log --pretty=oneline <span class="co">#单行显示提交日志 </span></a>
@@ -645,29 +645,29 @@ CORRECT_EMAIL更正的邮箱</p>
</table>
<p><a href="https://git-scm.com/docs/git-log#_pretty_formats">Pretty Formats</a></p>
<h2 id="重写历史">重写历史</h2>
<div class="sourceCode" id="cb79"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb79-1" data-line-number="1"><span class="fu">git</span> commit --amend # 改变最近一次提交 </a>
<div class="sourceCode" id="cb79"><pre><code class="language-bash"><a class="sourceLine" id="cb79-1" data-line-number="1"><span class="fu">git</span> commit --amend # 改变最近一次提交 </a>
<a class="sourceLine" id="cb79-2" data-line-number="2"><span class="fu">git</span> rebase -i HEAD~3 # 修改最近三次的提交说明,或者其中任意一次 </a>
<a class="sourceLine" id="cb79-3" data-line-number="3"><span class="fu">git</span> commit --amend # 保存好了,这些指示很明确地告诉了你该干什么 </a>
<a class="sourceLine" id="cb79-4" data-line-number="4"><span class="fu">git</span> rebase --continue <span class="co"># 修改提交说明,退出编辑器。 </span></a></code></pre></div>
<div class="sourceCode" id="cb80"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb80-1" data-line-number="1"><span class="ex">pick</span> f7f3f6d changed my name a bit</a>
<div class="sourceCode" id="cb80"><pre><code class="language-bash"><a class="sourceLine" id="cb80-1" data-line-number="1"><span class="ex">pick</span> f7f3f6d changed my name a bit</a>
<a class="sourceLine" id="cb80-2" data-line-number="2"><span class="ex">pick</span> 310154e updated README formatting and added blame</a>
<a class="sourceLine" id="cb80-3" data-line-number="3"><span class="ex">pick</span> a5f4a0d added cat-file</a></code></pre></div>
<p>改成</p>
<pre><code>pick 310154e updated README formatting and added blame
<pre><code class="language-bash">pick 310154e updated README formatting and added blame
pick f7f3f6d changed my name a bit</code></pre>
<h3 id="删除仓库">删除仓库</h3>
<pre><code>cd ..
<pre><code class="language-bash">cd ..
rm -rf repo.git</code></pre>
<p><a href="https://help.github.com/articles/changing-author-info/">Github官方教程</a></p>
<h2 id="其它">其它</h2>
<div class="sourceCode" id="cb83"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb83-1" data-line-number="1"><span class="fu">git</span> help * # 获取命令的帮助信息 </a>
<div class="sourceCode" id="cb83"><pre><code class="language-bash"><a class="sourceLine" id="cb83-1" data-line-number="1"><span class="fu">git</span> help * # 获取命令的帮助信息 </a>
<a class="sourceLine" id="cb83-2" data-line-number="2"><span class="fu">git</span> status # 获取当前的状态非常有用因为git会提示接下来的能做的操作 </a></code></pre></div>
<h2 id="报错问题解决">报错问题解决</h2>
<p><strong>1. <code>git fatal: protocol error: bad line length character: No s</code></strong></p>
<p>解决办法更换remote地址为 <code>http/https</code></p>
<p><strong>2. <code>The requested URL returned error: 403 Forbidden while accessing</code></strong></p>
<p>解决github push错误的办法</p>
<div class="sourceCode" id="cb84"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb84-1" data-line-number="1"><span class="co">#vim 编辑器打开 当前项目中的config文件</span></a>
<div class="sourceCode" id="cb84"><pre><code class="language-bash"><a class="sourceLine" id="cb84-1" data-line-number="1"><span class="co">#vim 编辑器打开 当前项目中的config文件</span></a>
<a class="sourceLine" id="cb84-2" data-line-number="2"><span class="ex">vim</span> .git/config</a>
<a class="sourceLine" id="cb84-3" data-line-number="3"></a>
<a class="sourceLine" id="cb84-4" data-line-number="4"><span class="co">#修改</span></a>
@@ -679,9 +679,9 @@ rm -rf repo.git</code></pre>
<a class="sourceLine" id="cb84-10" data-line-number="10"> <span class="ex">url</span> = https://jaywcjlove@github.com/jaywcjlove/example.git </a></code></pre></div>
<p><strong>3. git status 显示中文问题</strong></p>
<p>在查看状态的时候 git status 如果是中文就显示下面的情况</p>
<div class="sourceCode" id="cb85"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb85-1" data-line-number="1">\<span class="ex">344</span>\272\247\345\223\201\351\234\200\346\261\202</a></code></pre></div>
<div class="sourceCode" id="cb85"><pre><code class="language-bash"><a class="sourceLine" id="cb85-1" data-line-number="1">\<span class="ex">344</span>\272\247\345\223\201\351\234\200\346\261\202</a></code></pre></div>
<p>解决这个问题方法是:</p>
<div class="sourceCode" id="cb86"><pre class="sourceCode bash"><code class="sourceCode bash"><a class="sourceLine" id="cb86-1" data-line-number="1"><span class="fu">git</span> config --global core.quotepath false</a></code></pre></div>
<div class="sourceCode" id="cb86"><pre><code class="language-bash"><a class="sourceLine" id="cb86-1" data-line-number="1"><span class="fu">git</span> config --global core.quotepath false</a></code></pre></div>
<h2 id="参考资料">参考资料</h2>
<ul>
<li><a href="http://git-scm.com/">Git官网</a></li>