如何用好git?

作者: 金发萌音 | 来源:发表于2014-11-06 19:50 被阅读571次

    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:https://img.haomeiwen.com/i51094/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:https://img.haomeiwen.com/i51094/d15ae388e25cda75.jpg)
    
    ##github
    接下来我们再来说一下github  这个最大的git远程仓库
    
    这里有很多“社交功能”,你还可以为开源库提供代码,fork 一个新分支,并在上面增加你的内容
    
    ![wKioL1MeafvCM9vFAACmNIIgj_M326.jpg](http:https://img.haomeiwen.com/i51094/eb3066494d4e663e.jpg)
    
    使用git clone [url]功能可以方便的下载代码
    
    使用这样方法下载的文件夹本身就是一个git仓库 且里面所有文件都是未修改状态
    
    git还大大改变了程序员的书写习惯 markdown就是这么厉害
    
    本文就是用markdown来写的 ,markdown语法很简单,并且建议为你所有上传到github 的仓库增加一个
    ```README.MD```的说明文件
    
    
    注:本文基本为一次演示的提纲,框架很空虚,需要详细了解git 建议阅读git pro
    

    相关文章

      网友评论

      本文标题:如何用好git?

      本文链接:https://www.haomeiwen.com/subject/kvdbtttx.html