<h2 id="t11.版本控制">1.版本控制</h2>
<h3 id="t21.1 备份文件">1.1 备份文件</h3>
<ul>
<li>类似于网盘备份</li>
<li>我们的代码也需要备份。修改完了以后提交给版本库进行保管,哪一天代码没了也可以找回来。</li>
</ul>
<h3 id="t31.2 记录历史">1.2 记录历史</h3>
<ul>
<li>比如我们打游戏就要<code>存档</code>,万一挂了还可以从上个存档的地方重玩。</li>
<li>和网盘不同,网盘保留的是最新的状态,<code>历史的记录</code>都没有了,修改的记录也都找不回来了</li>
<li>网盘无法知道文件里的某行<code>代码</code>是何人在哪个时间添加进去的</li>
</ul>
<h3 id="t41.3 回到过去">1.3 回到过去</h3>
<ul>
<li>如果我有一天不小心删除了某个文件,我们可以通过历史备份找回来</li>
</ul>
<h3 id="t51.4 多端共享">1.4 多端共享</h3>
<ul>
<li>Git仓库可以通过PC端、Android、IOS<code>移动端</code>等各个终端访问</li>
<li>可以<code>随时随地</code>修改代码,公司没干完的工作回家接着干</li>
</ul>
<h3 id="t61.5 团队协作">1.5 团队协作</h3>
<ul>
<li>多个人或团队<code>合作</code>编写一个项目</li>
<li>合并代码处理<code>冲突</code></li>
</ul>
<h2 id="t72.什么是git">2.什么是git</h2>
<ul>
<li>为了告别手动方式管理Linux代码,并且符合开源和免费,Linus花了<code>两周时间</code>自己用 C 写了一个分布式版本控制系统,这就是Git</li>
<li>Git迅速成为最流行的分布式版本控制系统,尤其是 2008 年 GitHub 网站上线了,它为开源项目 免费提供Git存储 ,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。</li>
</ul>
<h2 id="t83.git的安装">3.git的安装</h2>
<h3 id="t93.1 windows下安装">3.1 windows下安装</h3>
下载地址 <a href="http://git-scm.com/">http://git-scm.com</a>
<h3 id="t103.2 mac下安装">3.2 mac下安装</h3>
如果你正在使用Mac做开发,有两种安装Git的方法。
一是安装homebrew,然后通过homebrew安装Git,具体方法请参考homebrew的文档:<a href="http://brew.sh/" target="_blank">http://brew.sh/</a>。
第二种方法更简单,也是推荐的方法,就是直接从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。
<h2 id="t114. 配置git用户和邮箱">4. 配置git用户和邮箱</h2>
<pre><code class="lang-javascript">$ git config --global user.name <span class="hljs-string">"你的github用户名"</span>
$ git config --global user.email <span class="hljs-string">"你的github邮箱"</span>
</code></pre>
<blockquote>不配置用户名和邮箱的话无法提交,因为git不知道你是谁</blockquote>
查看配置
<pre><code class="lang-javascript">$ git config --global user.name
$ git config --global user.email
</code></pre>
查看所有配置
<pre><code class="lang-javascript">$ git config --list
</code></pre>
<h2 id="t125.初始化git">5.初始化git</h2>
<ul>
<li>先创建一个空目录 ,然后进入此目录</li>
<li>点击右键选择Git-Bash打开命令行</li>
<li>输入git init命令把这个目录变成Git可以管理的仓库</li>
</ul>
<pre><code class="lang-javascript">$ git init
</code></pre>
<blockquote>通过ls -al命令查看所有文件</blockquote>
<h2 id="t136.git中的三个区">6.git中的三个区</h2>
工作流
http://suo.im/q5zbt
<ul>
<li>工作区通过git add 添加到暂存区
<pre><code class="lang-javascript"> $ git add <span class="hljs-string">'文件名'</span>
</code></pre>
</li>
<li>暂存区
特点:<code>过渡</code>的作用,避免<code>误操作</code>,<code>保护</code>工作区和历史区,分支处理;通过git commit 添加到历史区
<pre><code class="lang-javascript"> $ git commit -m<span class="hljs-string">"注释内容"</span>
</code></pre>
</li>
<li>历史区查看历史状态
<pre><code class="lang-javascript"> $ git log
</code></pre>
<blockquote>修改时通过git status查看当前状态</blockquote>
<h2 id="t147.git diff">7.git diff</h2>
不同区的代码比较
<h3 id="t157.1 工作区和暂存区">7.1 工作区和暂存区</h3>
<pre><code class="lang-javascript">$ git diff
</code></pre>
<h3 id="t167.2 暂存区和历史区">7.2 暂存区和历史区</h3>
<pre><code class="lang-javascript">$ git diff --cached(--staged)
</code></pre>
<h3 id="t177.3 工作区和版本库">7.3 工作区和版本库</h3>
<pre><code class="lang-javascript">$ git diff master
</code></pre>
<h2 id="t188. 撤销">8. 撤销</h2>
<h3 id="t198.1 撤销回git add的内容">8.1 撤销回git add的内容</h3>
<pre><code class="lang-javascript">git reset Head <span class="hljs-string">"文件名"</span>
</code></pre>
<h3 id="t208.2 撤回文件">8.2 撤回文件</h3>
<ul>
<li>先从缓存区撤销,缓存区无内容,从历史区域撤销
<pre><code class="lang-javascript">$ git checkout <span class="hljs-string">"文件名"</span>
</code></pre>
</li>
</ul>
<blockquote>有的时候我们希望提交时合并到上一次的提交 git commit --amend</blockquote>
<h2 id="t219.删除">9.删除</h2>
<h2 id="t229.1 删除暂存区和工作区">9.1 删除暂存区和工作区</h2>
删除暂存区中的内容,并且保证工作区中的内容已经不存在
<pre><code class="lang-javascript">$ git rm <span class="hljs-string">"文件名"</span>
</code></pre>
<blockquote>若本地文件存在则不能删除,需要通过-f参数删除</blockquote>
<h2 id="t239.2 仅删除缓存区">9.2 仅删除缓存区</h2>
<pre><code class="lang-javascript">$ git rm --cached <span class="hljs-string">"文件名"</span>
</code></pre>
<h2 id="t2410. 恢复">10. 恢复</h2>
<h3 id="t2510.1 恢复某个版本文件">10.1 恢复某个版本文件</h3>
<pre><code class="lang-javascript">$ git checkout commit_id filename 某个文件
</code></pre>
<h3 id="t2610.2 通过版本id恢复">10.2 通过版本id恢复</h3>
<pre><code class="lang-javascript">$ git reset --hard commit_id
</code></pre>
<h3 id="t2710.3 恢复未来">10.3 恢复未来</h3>
查看当时回滚时的版本
<pre><code class="lang-javascript">$ git reflog
</code></pre>
<h3 id="t2810.4 快速版本回退">10.4 快速版本回退</h3>
<pre><code class="lang-javascript">$ git reset --hard HEAD^
$ git reset --hard HEAD~<span class="hljs-number">3</span>
</code></pre>
<h2 id="t2911. 同步远程仓库">11. 同步远程仓库</h2>
<h3 id="t3011.1 gitHub">11.1 gitHub</h3>
<ul>
<li>注册账号</li>
<li>新建项目</li>
</ul>
<h3 id="t3111.2 添加远程仓库">11.2 添加远程仓库</h3>
<pre><code class="lang-javascript">$ git remote add origin <span class="hljs-string">"地址"</span>
</code></pre>
<h3 id="t3211.3 添加忽略文件">11.3 添加忽略文件</h3>
<pre><code class="lang-javascript">$ touch .gitignore
$ echo .DS_Store
$ echo node_modules
$ echo .idea
</code></pre>
<h3 id="t3311.4 推送代码">11.4 推送代码</h3>
<pre><code class="lang-javascript">$ git push origin master
</code></pre>
<h3 id="t3411.5 查看">11.5 查看</h3>
<pre><code class="lang-javascript">$ git remote 查看名字
$ git remote -v 查看地址
</code></pre>
<h2 id="t3512.代码的合并">12.代码的合并</h2>
<h3 id="t3612.1 git fetch">12.1 git fetch</h3>
<pre><code class="lang-javascript">$ git fetch
</code></pre>
拉取过来手动合并
<pre><code class="lang-javascript">$ git diff master origin/master
$ git merge origin/master
</code></pre>
<h3 id="t3712.2 git pull">12.2 git pull</h3>
拉取并合并
<pre><code class="lang-javascript">git pull
</code></pre>
<h3 id="t3813. 分支">13. 分支</h3>
<pre><code class="lang-javascript">git branch
git branch 创建分支
git checkout a
git checkout -b c切换分支
在master git merge
git checkout b
git branch --merged 合并了哪些分支
git branch --no-merged 合并了哪些分支
git branch -d a 删除分支
git branch -D a 删除分支
</code></pre>
<h3 id="t3914. tag版本">14. tag版本</h3>
<pre><code class="lang-javascript">git tag v1<span class="hljs-number">.0</span>
</code></pre>
<h3 id="t4015. 作业提交流程">15. 作业提交流程</h3>
<h3 id="t4115.1 第一次交作业流程(组长)">15.1 第一次交作业流程(组长)</h3>
<ul>
<li><code>fork</code>珠峰培训讲师的作业仓库</li>
<li>把自己的仓库<code>下载</code>到本地</li>
<li>把自己的作业 <code>上传</code>到自己的github仓库</li>
<li>发<code>pull request</code>给讲师</li>
<li>添加组员账号</li>
</ul>
<h3 id="t4215.2 第二次交作业流程(组员)">15.2 第二次交作业流程(组员)</h3>
<ul>
<li>克隆组长项目</li>
<li>先<code>拉取</code>组长仓库最新代码</li>
<li>将自己的作业(放入对应的文件夹)</li>
<li>git add/git commit</li>
<li>再push前拉取组长仓库最新代码</li>
<li>push到组长仓库</li>
</ul>
<h3 id="t4315.3 第二次交作业流程(组长)">15.3 第二次交作业流程(组长)</h3>
<ul>
<li>在本地<code>增加</code>讲师仓库</li>
<li><code>拉取</code>自己的最新代码</li>
<li><code>拉取</code>老师的最新的代码,如果冲突需要解决冲突</li>
<li>把自己的作业 拷贝进去(如果组长没有要提交的东西可省略)</li>
<li>把自己的作业上<code>传到</code>自己的github仓库(如果组长没有要提交的东西可省略)</li>
<li>发<code>pull request</code>给讲师</li>
</ul>
<pre></pre>
</li>
</ul>