日记 - 开始使用git

开始使用git

 

    在这里之所以不使用大写的GIT是因为在使用过程中git是一个常用词,所以我更喜欢它小写的样子。

 

    开始用git,那么为什么要用它呢?  git是一个分布式版本控制软件,怎么理解?

 

    我举个例子。我们在打一个游戏,这游戏不是别的,就是超级马里奥,许多人小时候都玩的游戏。这个游戏每过一关,就等于是度过一个阶段,进行了一次存档。当你死亡时可以重新挑战这一关,而不必从第一关开始打起。这每一个关卡都等同于版本,当你失败时可以回档重来,省时省力,这就是版本控制。但git比这更强大,你可以在游戏中随时随地存档,并且可以拥有无数次重来的机会!

 

    那么何为分布式的版本控制呢?要说明这个,用游戏已经不合适了。如果人生可以存档... ...我相信git会卖疯掉的。如果人生的存档可以当做是版本控制,那么你可以读取别人的存档来体验其他人的人生,这算不算是神的领域!你可以读取无数人的存档,每一个人,每个人的每一次存档,都可以读取... ...当然不论男女,这个性别还是很重要的... ...这就是分布式,玩自己的版本叫版本控制,玩别人的,不,是跟别人一起玩,这就叫分布式了!

 

    如果你把工作当成打游戏,那么git再适合你不过了!

扫描二维码关注公众号,回复: 505934 查看本文章

 

 

现在开始

 

     在此我先声明,我使用的是github版本的git,github自带了一个git,我已经用习惯了。

     下载安装完成之后,桌面上会出现两个应用,一个叫“Git Shell”,一个叫“GitHub”。其中“Git Shell”就是你本地的git了,而“GitHub”是为了方便你连接远程github而做的另一个应用,方便那些不会命令行的人使用github的工具(仅仅是帮助他们使用github,不包括git本身,你可以当github是一个远程的git服务器端)。

 

    现在先打开git shell,然后进行下图所示步骤(下图为官方教程)



     git是分布式的,所以每一个人都要有自己的名字。而邮箱必须是注册github时的邮箱,以方便github识别你的身份。

 

    你可以通过下图所示的命令来识别你当前使用的git版本



 

    你可以使用下图所示命令来查看你的当初输入的名字和邮箱

    请看图中“Author”的提示

 

     好了,这时候开始,git就算是设置好了,桌面上会有两个git的应用,其中一个是git的客户端,另一个是github的客户端

    那么接下来再使用git前你需要有一个自己的 git repository ,然后你再连接一个远程仓库。git的特点就在于你能拥有一个自己的仓库(就是repository),当你需要回档的时候你可以随时将你的代码回档到任何一个版本,你也可以随时存档(这里我所谓的档就是commit),你也可以将自己的档推送至远程服务器端的git仓库,当然也可以从远程仓库拉取存档。

 

    那么接下来你有两个选择。一是创建自己的代码仓库然后远程连接到远程仓库。二是直接clone远程仓库,这样就在clone到本地后自动创建了一个跟远程仓库同步的git仓库,并且自动连接远程仓库。

 

    如果你选择一,那么:

    你首先要有一个自己的仓库,你需要在命令行里进入到一个文件夹内,如果你有工程或者项目就进入其根目录下,使用git init命令,这时,你这个文件夹就成为一个git仓库了

    添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,运行 

git remote add [shortname] [url]

以上命令中的shortname就是给你添加的远程仓库一个缩写的名字,因为你可能会添加不止一个远程仓库。url就是远程仓库的链接地址,例如github上的地址,例如:

$ git remote add pb git://github.com/paulboone/ticgit.git  

 

    如果你选择二,那更加简单,不需要你拥有自己的仓库,只需要执行一句命令

    git clone [版本库的网址(远程仓库地址)] [本地目录名]

 

    就可以将远程仓库克隆到你指定的本地目录了

 

GIT的常用操作

    当你更新代码后就可以使用

 

    git add .

    将更新的代码添加进git

 

    git status

    随时使用这个命令查看你当前的仓库的状态,这个命令很重要,能时刻帮助你搞清楚自己现在的状态

 

    git commit -m ‘message’

    这个命令是在 git add . 以后使用的,将添加了的代码作为一次提交(也就是一个commit,我觉得可以理解为一次存档)。每一个commit都是一个代码的小版本,你可以随时回到任意一个commit的代码状态。命令行中的message是作为这次commit的一个描述,git提倡多个小版本提交,所以为了区分每个小版本的区别,最好写上一些简单描述,代表这个小版本都做了什么改动。

 

    git log

    可以查看你当前仓库内的所有commit,包括commit 的ID、commit的描述(message)、commit时的邮箱以及commit时的时间。在查看中按q推出log的查看。

 

    git reset --hard [commit ID]

    这个是回滚到某个commit,就是回退到某个你提交的版本中去。这里要提醒一点,在回滚前,最好将你现在更新的代码commit一下,否则你就回滚不回来当前的代码状态了。

 

    git pull --reb

    这个是拉取远程仓库代码。注意,如果你想要将代码推送至远程仓库,就必须先拉取,否则会报错并提示你要先进行拉取,这是为了确保代码的一致性,pull之前必须要commit。命令中的 --reb是rebase的意思,这是当你的代码和远程仓库代码发生不一致时,git会根据commit的时间早晚来进行代码合并,合并时可能出现的merge会是难倒新人的一个地方,一般merge需要自己手动来改或者直接skip掉,合并在下面会单独进行讲解。

 

    git push

    将代码推送至服务器

 

    git config --global user.email "[email protected]"

    git config --global user.name"your name"

 

    以上就是平时常用的一些git命令了,当然对我来说常用命令还有branch,这个大家可以额外百度一下。那么接下来谈谈合并。

    合并不单单只有pull才会遇到,如果你使用了branch也会遇到合并问题,当然这里不提branch。

    首先讲一个概念,一个git repository,也就是一个git的仓库,会有一条主线,也就是master这条主线上有许多节点,每一个节点都是一个commit,也就是说你的commit连成了一条时间线。你本地仓库如此,远程仓库也是如此。

    其次要讲pull,当你使用pull的时候git会顺着主线一直找,找你们有没有共同的commit,这个共同commit就是当你push以后就会将你的commit 推送到远程仓库,远程仓库就有了和你一样的commit,或者你pull的时候也会获得远程仓库的commit,而这些commit就是我所谓的共同commit。那么如果没有共同commit,git就会把远程仓库所有代码都拉取下来与你进行合并。如果有一个共同commit,那么就会拉取该commit之后的master主线上的其他commit来与你合并。如果共同commit之后没有其他commit,那么就没有代码可以拉取。

    最后要讲合并,其实git的合并是以改动过的代码为主的(新添加的,修改过的,删除的)。举例来说:有文件A和B,本地在上次提交以后改动了B文件,而A文件没有改动过,而远程仓库中有人已经提交了对A和B文件改动的commit,那么pull下来的代码里就会有关于A和B文件的commit。而本地与pull下来的commit进行合并时,由于本地没有改动A文件,所以pull下来的A文件会自动覆盖本地的A文件,而B文件则会出现merge,在git里,merge是一个小版本,也就是一个commit,这个commit里存放了发生冲突的B文件(每一次的merge都会是一个文件,因为合并是一个个文件来的,就算你的一个commit里改动了多个文件,发生merge的时候都是以文件为单位的)。出现merge的时候这个冲突会在你代码里表现,你只要在代码里修改好并依照提示进行下一步就好了。注:在github的客户端中会提示你skip,continue和abort这三种命令,你在手动修改好代码以后使用continue就会继续合并直至完成或者遇到下一个merge。而在git bash客户端下,你修改好以后直接commit就好了

 

以上就是本文全部内容

 

 

猜你喜欢

转载自lcl088005.iteye.com/blog/2102675
今日推荐