Git Tutorials & GitHub 快速入门(上)

raks8629 9年前
   <blockquote>     <p>几个月以前想在GitHub托管一个项目,听说非常好用,便一睹为快。殊不知在上面点了半天,也不知道个所以然,搜索了半天也没有一个足够清晰的教程。如果现在的你和我当时一样confuse。希望当你阅读完这篇文章的时候,至少在使用上没有任何困难,并且也被Git的魅力吸引,渐渐喜欢上它,那我的目的就达到了。</p>    </blockquote>    <p><strong>Git Tutorials </strong></p>    <p><img src="https://simg.open-open.com/show/82bb7a51942a2a694575c6db98f47641.png" alt="Git Tutorials & GitHub 快速入门(上) " width="256" height="256"></p>    <blockquote>     <p>想要学会如何使用GitHub,首先要我们要明白Git的原理和一些简单的操作使用,接下来我就按照目录的顺序,开始我们的Git之旅吧:</p>    </blockquote>    <p><img src="https://simg.open-open.com/show/52f2dc6601461e2cf9f33d2c70435768.png" alt="Git Tutorials & GitHub 快速入门(上) " width="708" height="476"></p>    <blockquote>     <p>Git-开源的分布式版本控制系统,它的功能通俗点说就是可以用来方便的管理我们不同项目的各个版本,可以在不同的机器上对一个项目进行维护,修改。之所以称其为分布式,是因为我们每个人都可以Download一个仓库到自己的本地上, 对其进行修改,然后提交到远程仓库去。</p>    </blockquote>    <ul>     <li>MsysGit 的安装(本篇以window环境为例)<br> 根据你的操作系统是32位,还是64位的下载一个对应版本MsysGit,因为MsysGit是安装最简单的一个,所以别的就不推荐了,免得过于烦人。</li>    </ul>    <ul>     <li> <p>初始化工作<br> 假设你已经安装好了MsysGit,我们开始第一步吧:首先打开<strong>Git Bash</strong>,我们看到一个类似Window控制台的界面。我们接下来要做的感觉有点像是一个迷路的人进了警察局填单的过程:</p>      <ol>       <li> <p>首先得填填你的名字啊,邮箱吧</p> <pre>  <code>$ git config --global user.name "JIANLAM"   $ git config --global user.email "mrkinlam7@Gmail.com"</code></pre>        <blockquote>         <p>大家英文好,当然知道这段代码的意思就是:Git 配置 --全局变量:用户的名字/邮箱,所以把你自己的名字邮箱填上去吧(别填成我的哦),那我怎么知道我填进去有没有被记录在里面呢,那就用这行命令,就能得到一个系统配置的清单,包括后面的缩写配置都会被记录在这里。</p>        </blockquote> <pre>  <code>    $ git config --list</code></pre> </li>       <li> <p>接下来警察得问你家住哪里吧</p> </li>      </ol> </li>    </ul>    <p><img src="https://simg.open-open.com/show/bea3685a19f47aac25c8eb958dfef108.png" alt="Git Tutorials & GitHub 快速入门(上) " width="529" height="160"></p>    <p><img src="https://simg.open-open.com/show/e26dbd0312ba20019189489d5a277fb8.png" alt="Git Tutorials & GitHub 快速入门(上) " width="109" height="96"></p>    <blockquote>     <p>我们用命令pwd看看自己所在的位置,原来我们在C盘的用户文件,志坚下面。为了方便操作,我们到桌面去,cd 到桌面Desktop,然后我们在桌面创建一个folder(文件夹),并cd到里面去,这和window下操作很像吧,如果你要倒退就可以用命令:</p>    </blockquote>    <pre>  <code>     $ cd ..</code></pre>    <ul>     <li>我们的第一个仓库<br> 为什么这个folder取名为lovepoems呢,有句话说的好:生活不只有苟且,还有诗和远方。<br> 想学Git的朋友想必心怀远方,那怎么能少了诗呢。我们接下来就来创建一个仓库(Repository又称为版本库),这个仓库用来堆我们的情诗。输入命令: <code>$ git init</code></li>    </ul>    <p><img src="https://simg.open-open.com/show/ca99508e3d590f138ad8906decd02d8a.png" alt="Git Tutorials & GitHub 快速入门(上) " width="537" height="33"></p>    <p>下面的提示我们说:你初始化了一个空的Git仓库在lovepoens的.git文件下,这个.git文件是一个隐藏的文件,里面有管理我们仓库的重要文件,所以没什么事不要碰它,到此我们的仓库就建好了,是不是很简单呢。</p>    <ul>     <li>添加与提交<br> 我们来写第一行情书,来到lovepoems仓库下。创建一个txt文本,名字叫MyDarling,内容用NotePad编辑的(推荐大家使用),如下:</li>    </ul>    <p><img src="https://simg.open-open.com/show/51d040453c04a6f847f09db512e409f4.png" alt="Git Tutorials & GitHub 快速入门(上) " width="610" height="102"></p>    <p><br> 关于这段肉麻的一行情书,我们看看仓库本人怎么说:</p>    <p><img src="https://simg.open-open.com/show/e0d52850d9bda7986b90168d13503ba2.png" alt="Git Tutorials & GitHub 快速入门(上) " width="547" height="161"></p>    <p><br> 由于我们把lovepoems创建为一个仓库,里面一旦有文件被修改,创建,删除等,仓库就会立刻察觉到。我们看到右边多了一个蓝色的英文 <em>master</em> 表示我们现在在主分支,分支是什么鬼,后面再说吧。我们用命令 <code>$ git status</code> 查看目前仓库的状态,它说在分支master上,有一个未被追踪的文件,然后它很热心的提出,你可以使用 <code>$ git add <file></code> 的方式把它添加到准备要提交的队列中去。</p>    <p>好吧,你是仓库你说了算:</p>    <p><img src="https://simg.open-open.com/show/dc20bb9e4bce663b593dac6001de653f.png" alt="Git Tutorials & GitHub 快速入门(上) " width="370" height="184"></p>    <p><br> 我们把MyDarling文件添加进去,然后用命令 <code>$ git status</code> 看看它说啥,它说有一个新文件MyDarling准备提交。</p>    <p>接下来我们把文件给提交了:</p>    <p><img src="https://simg.open-open.com/show/53232c26f855f556ecc5381751e94aa0.png" alt="Git Tutorials & GitHub 快速入门(上) " width="363" height="127"></p>    <p>我们用命令<code>$ git commit -m " sth want to say"</code> 去提交我们的MyDarling文件,其中-m的意思就是Message, 就有点像是一个标签,关于你这次提交想说的一些提示性的讯息。我们同样用熟悉的命令 <code>$ git status</code> 来看看仓库的状态,它说没东西可提交了,工作区的文件很干净。其实翻译为干净还是太奇怪了,应该说工作区的文件没什么异样。</p>    <p>接下来我们来看看Git 的workflow(工作流程):</p>    <p><img src="https://simg.open-open.com/show/a4d03258f3d24357135c3448fc21c0c2.png" alt="Git Tutorials & GitHub 快速入门(上) " width="900" height="320"></p>    <p>我们看到一共分为三个部分,第一个是 <strong>Working copy</strong> 工作副本->就是你本地的电脑;第二个是<strong> Staging area </strong> 暂存区域(或者叫Index)->就是准备被提交的区域;第三个图中画的不全,是一个被HEAD指针锁定的Master分支,我们上面说了刚刚创建的仓库<strong>Repository</strong>就包涵了这个Master分支。既然图画的不全,我们自己来画一个:</p>    <p><img src="https://simg.open-open.com/show/28f412d932ab6c88405a8e84dcad2a68.png" alt="Git Tutorials & GitHub 快速入门(上) " width="757" height="474"></p>    <blockquote>     <p>图中我们可以清晰的看到整个流程,我们假设在工作区有个readMe.txt文件,接下来我们就把它添加到暂存区,接着再提交到Master这个主分支。而一旦我们添加到<strong>Repository</strong>仓库之后,仓库就会tracked(追踪)这个文件,以后这个文件要是有什么变化,我们就可以马上知道。</p>    </blockquote>    <p>现在我们来写多两首诗,分别叫<em>prettygirl</em> 和 <em>Goodbye</em>:</p>    <p><img src="https://simg.open-open.com/show/08bc65d275f22d66d7d565d9a580455b.png" alt="Git Tutorials & GitHub 快速入门(上) " width="487" height="123"></p>    <p><img src="https://simg.open-open.com/show/c7d23ced08db76968b5dd466ed6240bd.png" alt="Git Tutorials & GitHub 快速入门(上) " width="392" height="116"></p>    <p>要是有女程序媛看完以后,肯定说典型的渣男!!~额,反正我不是。好了,诗写完了自我感觉不错,把它加到仓库吧。满满的一屏命令行,先 <code>$ clear</code> 清一下屏吧:</p>    <p><img src="https://simg.open-open.com/show/0244c7b991f4d9b806114841d561470f.png" alt="Git Tutorials & GitHub 快速入门(上) " width="575" height="279"></p>    <p>老规矩,先看看仓库什么状况,用命令: <code>$ git status</code> ,果然有我们刚刚写的两首一行情诗没被添加进去,接着我们可以用<code>$ git add .</code> 把所有文件都添加到 <strong>Staging area</strong> 暂存区中去,再看看状态,它说有两个文件已经准备提交了。</p>    <p>那就提交呗,多大点事:</p>    <p><img src="https://simg.open-open.com/show/a8707fa890eb03325cb17d2acddf66dd.png" alt="Git Tutorials & GitHub 快速入门(上) " width="353" height="140"></p>    <p>我们把它提交,并且难过的留下了一个标记,"my heart is broken"。其实大家应该发现了,我们添加的时候可以添加很多个,提交的时候就一次性把所有东西都提交了。而且这两步是必不可少的,大家要留心了。</p>    <p>到此为止,我们看看仓库都有些什么东西: <code>$ git log</code></p>    <p><img src="https://simg.open-open.com/show/739692eae3d992edf18fee86215a0ab5.png" alt="Git Tutorials & GitHub 快速入门(上) " width="381" height="162"></p>    <p>我们看到自己的讯息,时间,还有两次提交的版本名字,还有一个commit id。</p>    <p>---写于15.5.2016</p>    <ul>     <li>Git的时光倒流</li>    </ul>    <blockquote>     <p>上面的日志确实还行,够详细,但是太多了,我们用 <code>$ git log --pretty=oneline</code> 来展示漂亮的一行。</p>    </blockquote>    <p><img src="https://simg.open-open.com/show/7277ba4e6985131dd0c169cc0ddd3333.png" alt="Git Tutorials & GitHub 快速入门(上) " width="435" height="38"></p>    <p>好了,现在只有commit id号和版本留下的标志。昨晚一宿没睡想了想,她是一个好女孩啊,被她看见了,太伤她心了,渣男一只。还是回到上一个版本的节奏吧。那要怎么做呢:</p>    <p><img src="https://simg.open-open.com/show/7a680f0a744327e08d21fa5085cc740d.png" alt="Git Tutorials & GitHub 快速入门(上) " width="864" height="540"></p>    <p>我们其实一直在HEAD指向的Master分支上,前面大家都知道了,即HEAD指向的当前版本->my heart is broken。HEAD^表示上一个版本,HEAD^^表示上上一个版本,如果你有commit id 号,直接表示也可以,因为它是唯一的标识。当你用命令<code>$ git reset --hard HEAD^</code> ,HEAD指针就会指向下一个版本,我们来具体试试:</p>    <p><img src="https://simg.open-open.com/show/24814a651b3228d56adb674b687b7cc1.png" alt="Git Tutorials & GitHub 快速入门(上) " width="362" height="191"></p>    <p>我们首先看看自己的位置,在lovepoems文件夹下。用命令<code>$ ls</code>看看该folder下都有啥:好,确实是我们写的3首一行情诗。接着我们就要回退版本啦,玩过英雄联盟的人应该觉得,有点像艾克大招不是么。敲下命令<code>$ git reset --hard HEAD^</code>,然后神奇的发现我们仓库下就只有MyDarling这个文件了!它也提示我们,恭喜你回到过去,你现在所处的位置是上一个版本,my first love pomes。</p>    <blockquote>     <p>有人说,如果哪天女朋友把我lol符文全部融了,我要拿出那个伤心欲绝的版本刺激她该怎么做呢:</p>    </blockquote>    <p><img src="https://simg.open-open.com/show/5b21d18494d0055d59920b8f93ad3cd4.png" alt="Git Tutorials & GitHub 快速入门(上) " width="399" height="99"></p>    <p><br> 我们用命令<code>$ git reflog</code> 就可以查看所有做过的操作,我们看到最下面的两个就是我们一开提交的两个版本,前面有个commit id号,这次我们用它来转换版本:</p>    <p><img src="https://simg.open-open.com/show/6068f05d58ba26d4b78762dbb398cb86.png" alt="Git Tutorials & GitHub 快速入门(上) " width="373" height="152"></p>    <p><br> 这样我们就又返回到最新的版本了,并且知道这个方法后就可以任意穿梭时空了,还有就是commit id可以不写全,写几个数字就可以了。上面的<code>$git reset --hard xxx</code>中reset我知道重设的意思,那--hard是什么呢,我也不知道,看看官方文档怎么说:<br> 在 <a href="/misc/goto?guid=4959673381267875584">Git参考文档</a>中找到reset里面--hard的介绍:</p>    <p><img src="https://simg.open-open.com/show/e094b0d8a82971d05b9a4b6eedfc084b.png" alt="Git Tutorials & GitHub 快速入门(上) " width="680" height="71"></p>    <p><br> 它说重新设置暂存区和工作区,任何对追踪文件修改的提交都会被丢弃。哦,原来是这样。大家想深入学习Git的这也不失为一种学习方式,本文只是为如何使用Github做铺垫,想成为Git大师还得靠大家自己努力呢。</p>    <ul>     <li>撤销 ( Unstage )      <blockquote>       <p>每个成功程序猿的背后都有一个厉害的程序媛,你女朋友也会用Git啊,某天她看到你写的情诗被深深的打动了,决定也写一行情诗给你:</p>      </blockquote> </li>    </ul>    <p><img src="https://simg.open-open.com/show/0b40a3878ac231dc5010228737b005ac.png" alt="Git Tutorials & GitHub 快速入门(上) " width="459" height="132"></p>    <p>她微信截了图给你,你收到以后整个人都不好了,首先你是处女座,其次这诗太美了,无力吐槽。你坐在地铁上,琢磨着该怎么撤销它:</p>    <p><img src="https://simg.open-open.com/show/dd0bb200a80ab703683fb80c3e8d0ce8.png" alt="Git Tutorials & GitHub 快速入门(上) " width="785" height="251"></p>    <p>假如她只是在工作区修改了,那好办啊,手动删了那句或者输入命令<code>$ git checkout -- MyDarling.txt</code>不就撤销了吗。那如果添加到暂存区了,或者提交了怎么办,可以输入<code>$ git reset HEAD MyDarling.txt</code>先返回到上一个区域,然后再用<code>$ git checkout -- MyDarling.txt</code>命令,修改的内容也就顺利撤销了。</p>    <p><img src="https://simg.open-open.com/show/b73bb049af81d49a9193d3eda51e37b3.png" alt="Git Tutorials & GitHub 快速入门(上) " width="353" height="227"></p>    <blockquote>     <p>其中<code>$cat xxx.txt</code>是查看某文件的内容。</p>    </blockquote>    <ul>     <li>文件管理      <blockquote>       <p>灾难终于告一段落了,可以专心写诗了。某天灵感来了,觉得这个MyDarling的名字好像跟诗没什么关系,于是把它改成了onlyYou。我们看看仓库怎么说:</p>      </blockquote> </li>    </ul>    <p><img src="https://simg.open-open.com/show/7c2374c865aae204b8d793e9df732f11.png" alt="Git Tutorials & GitHub 快速入门(上) " width="541" height="186"></p>    <p><br> 大概意思是说,你想改名字啊,可以啊,先把MyDarling.txt 通过<code>$ git rm <file></code>的形式删除,然后在把onlyYou.txt添加进来。好呗,试试看:</p>    <p><img src="https://simg.open-open.com/show/10be851c477818b458842b6126812946.png" alt="Git Tutorials & GitHub 快速入门(上) " width="359" height="203"></p>    <p>它提示我们已经重命名了,果然成功了!</p>    <ul>     <li>移动      <blockquote>       <p>每次都要这样弄,不是很容易作死自己吗,这里介绍一个更简单的方法:</p>      </blockquote> </li>    </ul>    <p><img src="https://simg.open-open.com/show/361bab27c47e54bb973c73110434abcf.png" alt="Git Tutorials & GitHub 快速入门(上) " width="356" height="37"></p>    <p><img src="https://simg.open-open.com/show/275a7017c0480a1acc40ab39294da24e.png" alt="Git Tutorials & GitHub 快速入门(上) " width="303" height="275"></p>    <p>我们使用<code>$ git mv xx.txt xxx.txt</code>的命令,xx.txt是更改名字前的文件,xxx.txt是更改名字后的文件,我们看到果然也成功了。如果你要把这个修改后的文件移动某个目录下只要在前面加个文件夹名就好了,<code>$ git mv xx.txt file/xxx.txt</code></p>    <ul>     <li>文件的删除<br> 某天你喜欢的女生跑去跟别的男生开黑了,从那天起,你的天空仿佛失去了颜色,不再相信爱情了,想把写过的诗给删了:</li>    </ul>    <p><img src="https://simg.open-open.com/show/a4916b6662d45fdf9603c4e692a760fc.png" alt="Git Tutorials & GitHub 快速入门(上) " width="907" height="312"></p>    <p>删了,什么都没了:</p>    <p><img src="https://simg.open-open.com/show/5303598f1fa2588a09a83e1eaf74e4c0.png" alt="Git Tutorials & GitHub 快速入门(上) " width="373" height="75"></p>    <p>某天你发现原来那个是她弟,希望又来了,想把诗找回来。所幸我们早已同步给了仓库,就相当于我们本地一份,仓库一份。从它那里拿回来就好了:</p>    <p><img src="https://simg.open-open.com/show/cd8921766b996232dcfb4a224d1fd1e0.png" alt="Git Tutorials & GitHub 快速入门(上) " width="349" height="128"></p>    <p>果然回来了,当然如果你要狠心点把仓库的文件都删了,就可以用<code>$ git rm xx.txt</code> 这个时候你本地Working copy的文件也会被删了,最后提交一下就可以了。</p>    <ul>     <li>分支</li>    </ul>    <blockquote>     <p>之前我们遗留下来一个问题,什么叫分支。不知道大家有没有看过《心灵想要大声呼喊》里面要表演一个音乐舞台剧,敲定以后,大家就开始分工合作了,有人要弄服装设计,有人要弄舞台灯光,有人要设计舞蹈,有人要学唱歌,这就是分支。等到家都弄得差不多了,在把大家的汇总,那这个舞台剧就形成了。</p>    </blockquote>    <p>假如现在出版社要我写一些更感性的诗,那我可以这样做:</p>    <p><img src="https://simg.open-open.com/show/d71b24bb6bdd58667fc72700b6a0d7a5.png" alt="Git Tutorials & GitHub 快速入门(上) " width="336" height="234"></p>    <blockquote>     <p>命令<code>$ git branch xx</code> 可以创建一个分支,再用<code>$ git checkout xx</code>进入这个分支。如果嫌麻烦,你也可以用这句命令,一个顶两个:<code>git checkout -b xx</code>创建并进入该分支</p>    </blockquote>    <p><img src="https://simg.open-open.com/show/172bc56f97df4656da60d4cd30f08850.png" alt="Git Tutorials & GitHub 快速入门(上) " width="457" height="132"></p>    <blockquote>     <p>在添加一句诗,最后提交就完事了,我们看到果然修改成我要的样子了。</p>    </blockquote>    <p>我们现在回到主分支master上:</p>    <p><img src="https://simg.open-open.com/show/56f3621634769e32dceefeb6e4e767f8.png" alt="Git Tutorials & GitHub 快速入门(上) " width="358" height="86"></p>    <p>我们神奇的发现onlyYou.txt文件里面的内容并没有发生任何改变。这就认证了我们的设想,只要没有汇总,主分支上是不会受到其他分支影响的。主编看了下我的诗觉得写得不错,于是决定采用这首诗:</p>    <p><img src="https://simg.open-open.com/show/7c9f2e29bfe3a03f113851ae9c03bdf7.png" alt="Git Tutorials & GitHub 快速入门(上) " width="345" height="131"></p>    <blockquote>     <p>用命令<code>$ git merge xx</code>合并分支,我们看到onlyYou.txt文件,果然多了最新写的诗,最后用命令<code>$ git branch -d xx</code> 删除分支即可。</p>    </blockquote>    <p>帮大家总结了一下,如图:</p>    <p><img src="https://simg.open-open.com/show/f96ed3c1f9223736274c26160f0d64a3.png" alt="Git Tutorials & GitHub 快速入门(上) " width="725" height="354"></p>    <ul>     <li> <p>缩写</p> <pre>  <code> $ git config --global alias.st status   $ git config --global alias.co checkout   $ git config --global alias.ci commit   $ git config --global alias.br branch</code></pre> </li>    </ul>    <p>我们一开始配置全局变量,也是这样的格式,这里配置的是缩写,因为繁琐的输入,你可能会厌倦了commit这样长的输入,所以我们可以通过上面的设置把它简化成ci, 这样以后你要提交的时候,就可以写成这种形式:<br> <code>& git ci -m"xxxx"</code></p>    <p>还有一个命令要告诉大家的就是,可以查看工作区和暂存区文件的不同,做了哪些修改:</p>    <pre>  <code> $ git diff <file></code></pre>    <p>远程仓库</p>    <p>好了,到此<strong>Git</strong>就介绍完了,大家对它是不是有更多的理解了呢。下一篇,我们就要来讲讲如何使用GitHub了。如果你觉得对你有所帮助,那就给我一点点鼓励,谢谢!~祝大家学习,工作愉快。</p>    <p><br>  </p>    <p>文/<a href="/misc/goto?guid=4959673381355179099">Jian_LAM</a>(简书作者)</p>    <p> </p>