美文网首页
Git的前因后果

Git的前因后果

作者: CoolTomato | 来源:发表于2018-10-30 13:02 被阅读0次

    《Git的前因后果》因何而来?

    2018年3月份之前,番茄开发一直使用的是svn作为版本管理工具,对git知之甚少。4月份步入新的工作环境,也随着潮流接触到了Git以及GitHub、GitLab、码云这类远端管理工具。虽然git和svn完全是两种模式,但是我更倾向于git,为什么?不怕笑话,我是2017年下半年才接触到了分布式开发,Spring Boot和Spring Boot两大框架,而git也是一种分布式理念的产物,自然而然就摒弃掉了svn。而且在我看来,git以及类似GitHub这类远端代码管理工具,给我带来的最大受益之处就是保证了代码不易丢失并省去了代码存储工具(如svn的中央服务器)。因此自然而然投入了Git的怀抱中。

    Git 工作流程:

    • 克隆 Git 资源作为工作目录。
    • 在克隆的资源上添加或修改文件。
    • 如果其他人修改了,你可以更新资源。
    • 在提交前查看修改。
    • 提交修改。
    • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
    Git 工作流程图

    Git 工作区、暂存区和版本库:

    • 工作区:就是你在电脑里能看到的目录。
    • 暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
    • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
    Git 工作区、暂存区和版本库关系图

    备注:图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。

    Git 命令(基础):

    $ git config --global user.name 'username' //Git为你的每一个提交都记录你的名字与电子邮箱地址,所以第一步需要配置用户名和邮箱地址
    $ git config --global user.email 'email'
    $ git init                                 //使用当前目录作为Git仓库。
    $ git init <newrepo>                       //当前目录下新建newrepo文件夹作为Git仓库。
    $ git add <file>                           //当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
    $ git commit -m '<remark>'                 //暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
    $ git clone <repo>                         //从现有Git仓库中拷贝项目。
    $ git clone <repo> <directory>             //从现有Git仓库中拷贝项目到指定的目录。
    $ git status                               //文件状态查询。
    $ git status -s
    $ git remote add origin <repo>             //新增远端仓库路径。
    $ git push -u origin master                //将本地更新推送到远端仓库的主分支上。
    

    git status -s 状态码解析:

    状态码 含义
    A 你本地新增的文件(服务器上没有)
    C 文件的一个新拷贝
    D 你本地删除的文件(服务器上还在)
    M 文件的内容或者mode被修改了
    R 文件名被修改了
    T 文件的类型被修改了
    U 文件没有被合并(你需要完成合并才能进行提交)
    X 未知状态(很可能是遇到git的bug了,你可以向git提交bug report)
    ? 未被git进行管理,可以使用git add file1把file1添加进git能被git所进行管理

    Git 命令(高级):

    $ git diff          //尚未缓存的改动。
    $ git diff --cached //查看已缓存的改动。
    $ git diff HEAD     //查看已缓存的改动与未缓存的所有改动。
    $ git diff --stat   //显示摘要而非整个。
    $ git reset HEAD    //取消已缓存的内容。
    
    //如果只是简单地从工作目录中手动删除文件,运行 git status 时就会在 Changes not staged for commit 的提示。
    $ git rm <file>                //从Git中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交。
    $ git rm -f <file>             //如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f。
    $ git rm --cached <file>       //如果把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可。
    $ git mv <filename> <filename> //用于移动或重命名一个文件、目录、软连接。
    

    Git 命令(查看提交历史):

    $ git log                                              //列出历史提交记录。
    $ git log --oneline                                    //查看历史记录的简洁的版本。
    $ git log --oneline --graph                            //查看历史中什么时候出现了分支、合并。以下为相同的命令,开启了拓扑图选项。
    $ git log --reverse --oneline                          //逆向显示所有日志。
    $ git log --author=<name>                              //只查找指定用户的提交日志。
    
    //指定日期,可以执行几个选项:--since 和 --before,以及--until 和 --after。
    $ git log --oneline --before={} --after={} --no-merges //查看Git项目中三周前且在四月十八日之后的所有提交(--no-merges 选项以隐藏合并提交)。
    

    Git 分支管理(必杀技)

    $ git branch                   //列出全部分支。
    $ git branch <branchname>      //创建分支。
    $ git checkout <branchname>    //切换分支。
    $ git checkout -b <branchname> //创建新分支并立即切换到该分支下,从而在该分支中操作。
    $ git branch -d <branchname>   //删除分支。
    
    //合并分支,首先切换到要合并的分支(如,我要将branchtest合并到master上,那么就要先切到master分支上)。
    $ git merge <branchname>       //合并branchname分支到当前分支。
    

    合并冲突:这是很多第一次接触git的小白最害怕发生的状况,其实大可不必,三步解决。
    1.git merge <branchname>之后提示冲突,在提示内容中会明确告诉你冲突的位置。
    2.手动解决冲突。
    3.将修改的文件,git add,git commit即完成冲突的解决,不需要再次执行git merge <branchname>命令。


    参考:RUNOOB.COM Git教程git status -s 状态码解析

    愚见:实战一次git的常用命令,亲手解决一次冲突,你便不再觉得git是你的“BUG”了。

    相关文章

      网友评论

          本文标题:Git的前因后果

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