如何用好git?

git是一个非常好用的版本控制工具与团队协作工具

为什么用?怎么用

如果单人使用,更多的是为了版本控制

我们想一下这样一个场景,用某个php框架写好了一个购物网站,现在你要往里面添加一个新功能,3个多小时以后,你发现你的工程出现了问题,怎么debug也发现不了,但也不知道是哪里出了问题,想要恢复到3小时之前........这里就只能找时光机了


34035e716f41257f962b43fd.jpg

但是有了git 你可以轻易的恢复到上次提交的状态,下载安装配置很简单。直接开始使用
先来简单说一下git的基本思路

git 把工作目录分为4种,分别为未跟踪,未修改 ,已修改 和 暂存

18333fig0201-tn.png

初始化

git init 

git 采用的是文件快照方式,这样使得在工作目录产生一个.git文件夹,每次提交的文件快照就在这里备份
这个命令实际上产生和初始化了工作目录

在这之后这个目录下的所有文件都是 未跟踪的

然后我们按照正常的写代码的方式,直到某次成功实现了一个功能
接下来可以使用
git add [filename] 名来来增加跟踪文件
一般来说我会使用git add .来跟踪全部文件

执行这个命令之后 被添加的文件状态就变成了未修改的了,此时开始,这个文件算是正式进入了git 的管理流程

接下来,我们增加我们想要的功能,本质上就是对代码文件的修改

这之后,文件状态就由 未修改变成了已修改了
对某文件修改之后,我们可以使用git diff来查看究竟改了哪些文件

修改之后,仍需要使用命令git add [filename] 来改变文件的状态
被 add 的文件文件 将从已修改到已暂存

虽然形式上和之前添加文件到git是一样的,但本质意思是完全不同的.

提交更新

git commit -m " this is first commit "(从modified 到staged)

每一次提交想到于一次里程碑,git将保存所有暂存文件的文件快照,于此同时,所有文件状态
也变成未修改

每次提交都相当于一次很小的版本变动,需要注意的是提交频率

git log命令用于显示你的提交历史 -p 选项展开显示每次提交的内容差异

这个过程中你可以随时使用git status命令来查看文件处于什么样的状态下

回复版本

取消已经暂存的文件,这一步需要放在你错误的git add 之后 (从staged到modified),
git reset head <file>
回到特定某此的commit 需要使用命令 git reset --hard [commit]
查看commit 的历史可以使用git log命令

但是这样会删除掉之后的commit 万一又反悔了呢 git reset --hard [commit]搭乘时光机

这样可以使用git reflog命令查看历史 ,并再次使用

如果没git add. 只是想取消掉某次编辑
使用
git checkout -- <file>.

7bc029a4b04efa1033b080de467d9dd8_b.jpg

其实这就是git的极限了.能用作版本控制已经很方便了

206185dcbf3fc394785cee177e7f424e_b.jpg

逗你玩呢亲,不过这的确是我初学git 的想法,git 真正牛X支出在于分支

多人使用 --远程仓库

多人使用的情况下,除了版本控制之外,在合作分工的情况下也需要合并代码
这种情况下 我们需要使用

git romote
查看当前的远程库

添加远程仓库
git remote add [shortname] [url]:

推送数据到远程仓库
$ git push origin master

查看远程仓库信息

我们可以通过命令 git remote show [remote-name]查看某个远程仓库的详细信息

可以使用 git remote rename [name]git remote rm [name]来重命名和删除远程分支

这里你可以把远程仓库理解为远程备份

分支

想像一下这样的一个情景。明天需要提交一个工程,主要功能你已经完成,但是还有些小细节你不满意,但不敢直接改——万一整坏了明天交不了了?但如果只用git reset 的方法,今天万一写了很多东西,离成功只有一步之遥,全部放弃更是不舒服,那么使用分支,可以很爽的完成这个任务

git 分支的本质其实就是从某个提交对象往回看的历史

我们使用 git branch [branch name]来新建分支 这里我们新建testing 分支

18333fig0304-tn.png

使用git checkout testing来切换分支

切换之后我们修改文件并提交

18333fig0307-tn.png

好了这时我们返回master 分支 git checkout master

再看修改的文件,这样就算你没有及时完成剩余的问题,也可以切换回去主分支提交

当然,提交之后你还可以切换到新分支继续开发

那么另有一种状况,就是你居然写好了,此时,你想把主分支修改成你现有的,怎么办?

需要使用分支的合并,

 git merge newbra```

这样,在newbra里面的修改会合并到master里,你也可以过河拆桥 删除 newbra分支
```git branch -d newbra```

查看现有分支
```git branch```可以发现,世界清静了


![7bc029a4b04efa1033b080de467d9dd8_b.jpg](http://upload-images.jianshu.io/upload_images/51094-d15ae388e25cda75.jpg)

恩 好吧  git 成为如此重要的工具,就在于基于分支系统,可以多人一起使用

比如某次暑期实训,你们4个人要共同完成一个网站
商量好怎么写后,你们每个人分到了一个模块,并在github上新建了一个组织
并且把所有人都加了进来
这样的情况我更建议这么做:
主分支保证是最稳定版本,每个成员维护一个分支
>主分支为最稳定版本,这种方法最古老,也最为常见,还有很多其他的方法,git pro 这本书也介绍了很多,有兴趣的可以看看 [git pro](http://iissnan.com/progit/)

首先每个人维护一个自己的分支,自然要把每个人在本地的分支推送到服务器,
这里的服务器肯定是首推[github](https://github.com/)了

为了多人一起维护这个远程仓库,需要你先新建这个组织,邀请你的成员,并设置的成员的权限,比如我们[先声](https://github.com/HeraldStudio)

剩下的就是在本地操作了,我们顺便来总体看一下

```git init ```   初始话仓库
```git remote add origin [url]```  添加远程仓库
```git checkout -b buren``` 新建并切换到新分支
```git add .```增加文件
```git commit -m "1"```
把你的分支push到一个远程服务器上
```git push test buren```

注意到这里和我第一次使用的命令是不同的 ,上述命令将目前所处的分支push到服务器的分支上

这时候另一个人想用你增加的部分,他们需要(增加远程仓库之后)
```git fetch origin```
这时 远程分支已经在本地了,但是你并不能修改

需要执行命令来创建可以修改的本地分支```git checkout -b buren origin/buren```

这时候本地已经有了buren这个本地分支

剩下的自然就是用到分支处理了 merge 之类的 就看你了

注意,有的时候两个分支会有冲突,比如两个人同时修改了一部分代码,git 是没法决定要保留哪个人的代码
会在原文件中改成这样的形式

<<<<<<< HEAD
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
please contact us at support@github.com
</div>

buren

这一部分属于head分支

<<<<<<< HEAD
<div id="footer">contact : email.support@github.com</div>
=======


这一部分属于buren分支

=======
<div id="footer">
please contact us at support@github.com
</div>

buren

除了前期商讨避免这样的情况外,还可以```git mergetool ```来运行各种merge工具来帮助你完成合并

关于安装配置使用各种mergetool 网上有很多教程



![7bc029a4b04efa1033b080de467d9dd8_b.jpg](http://upload-images.jianshu.io/upload_images/51094-d15ae388e25cda75.jpg)

##github
接下来我们再来说一下github  这个最大的git远程仓库

这里有很多“社交功能”,你还可以为开源库提供代码,fork 一个新分支,并在上面增加你的内容

![wKioL1MeafvCM9vFAACmNIIgj_M326.jpg](http://upload-images.jianshu.io/upload_images/51094-eb3066494d4e663e.jpg)

使用git clone [url]功能可以方便的下载代码

使用这样方法下载的文件夹本身就是一个git仓库 且里面所有文件都是未修改状态

git还大大改变了程序员的书写习惯 markdown就是这么厉害

本文就是用markdown来写的 ,markdown语法很简单,并且建议为你所有上传到github 的仓库增加一个
```README.MD```的说明文件


注:本文基本为一次演示的提纲,框架很空虚,需要详细了解git 建议阅读git pro
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,647评论 4 54
  • Git是目前最流行的版本管理系统,也是最先进的分布式版本控制系统(distributed version cont...
    pro648阅读 5,672评论 1 17
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,626评论 9 163
  • ①晚霞 夜幕低垂,金金灿灿的发拢在身后昏暗的灯光里,那破旧的瓦斯灯在黑暗中照亮了他面颊的一侧,像是美术生在勾勒素描...
    遥其左右阅读 748评论 2 6
  • 今年我21正在考研 自己给自己加油 很迷茫服了很多鸡汤 我的啊,哒 。 明天6点起床 ...
    特里尔阅读 141评论 0 0