Git的操作与理解

原创 2016年05月31日 17:21:21
工作树:其存储着仓库内所有被管理文件 (untracked files是不记录在工作树中的) 的当前状态,随各文件的的改动而实时变化
HEAD : 当前分支中最新一次提交的指针
暂存区:提交之前的临时区域
(工作区 -add-> 暂存区 -commit-> 版本库)

git init        : 初始化仓库,即为项目生成(.git)
git status   : 查看仓库状态
git log         : 查看commit日志
            -p    : 显示每次提交的改动
     文件名    : 只显示与这个文件有关的commit日志
    —graph   : 以图表的形式显示分支commit情况
git reflog      : 查看当前仓库的操作日志 

git add       : 将文件或改动添加到暂存区中(commit的就是暂存区)
git commit : 吸纳暂存区的改动,更新HEAD(即将暂存区的改动添加到老的HEAD快照中合成为新的HEAD快照)
            -m  : 输入一行提交信息 
   不加参数 :会自动启动编辑器,允许输入详细的提交信息

git diff             : 查看工作树与暂存区之间的差别(将改动add到暂存区后,git diff就不会有输出了)
git diff HEAD  : 查看工作树与HEAD之间的差别(将改动commit之后,git diff HEAD就不会有输出了)
【两者是一个递进关系,体味如下:在将改动add到暂存区之前,暂存区状态=HEAD状态,但是工作树是记录着新改动的,所以git diff与git diff HEAD的输出是一样的。但是当add到暂存区之后,暂存区状态=工作树状态 > HEAD状态,因而git diff没输出,但git diff HEAD有输出】
所以得出:工作树记录着所有被管理文件的最新状态,暂存区是个过渡区,而commit不是拍下当前工作树的快照作为HEAD,而是吸纳暂存区的改动生成新的HEAD,要是commit直接拍下工作树的当前状态作为新HEAD,那还要暂存区有毛用?所以commit是不管当前工作树的状态,它只去暂存区里面看该怎么更新HEAD,所以每次改动之后,都要先add,才能commit
【体味下引入暂存区的设计理念:把代码的改动与commit之间隔离开来了,我可以改动十个文件,工作树负责记录这十个文件的新状态。这时我可以只commit其中的两个,只把这两个add到暂存区再commit就行了,其他八个都不受影响。而若是没有暂存区,commit时只是拍下工作树的当前状态作为新的HEAD,可能就没这么灵活了】

[主干分支master中是不能存在开发到一半的代码的,所有的开发活动都应该在特性分支中进行,开发完毕之后再合并到主干分支]
git checkout -b feature-A   =  git branch feature-A + git checkout feature-A
git checkout -b 本地分支名 origin/远程分支名:拉远程分支到本地,并切换到新建的本地分支上,同时还建立了该本地分支与远程分支之间的对应联系
git branch:查看本地分支
              -a:查看所有分支,包含远程分支
              -d:删除分支
【有时候,别人刚push到远程仓库的分支在本地用git branch -a是看不到的,此时可以切到master pull一下,就会更新了】

git reset —hard 哈希值 :将仓库的工作树、暂存区、HEAD回溯到指定状态
git merge feature-A :将feature-A分支合并到当前所在分支
【当merge到当前分支却产生冲突时,当前分支下的对应文件也会被修改的,修改后的冲突位置格式如下:
                                        <<<<<<< HEAD
                                        code on feature A(本分支代码)
                                        =======
                                        code on feature B(合并进来的feature/B的代码)
                                        >>>>>>> feature/B
这时,可手动修改,然后用git add与git commit达到合并到本分支的目的】
【所以merge有冲突时,git已经把两个分支的代码按上述格式重新写会到本分支的文件中去了,只要用git status找到哪些文件被改写了,再去手动改好,然后重新add与commit就可以了】

git remote add origin git@github.com:仓库名 :为本地仓库设置远程仓库[只有建立了本地仓库与远程仓库之间的对应联系,才能push或pull。在git clone时,会自动建立这种联系,但如果是手动在本地建的仓库,可能就得手动建立这种联系了]

git clone :复制远程仓库到本地,并自动建立master分支,同时建立本地仓库与远程仓库,master分支与origin master分支的对应联系
git pull origin 分支名:拉取远程分支的代码到当前分支(不会自动建立对应联系)
git push -u origin 分支名:将当前分支内容push到远程分支上
                                   -u   : upstream,置远程分支为本地分支的上游,建立两个分支的对应关系



github:
Fork:将别人的仓库fork到自己的github账户下
Clone:将别人的远程仓库clone到本地
Pull Request : 将自己github账户下修改后的feature分支推给原始的github仓库,请求合并

操作流程:首先Fork别人的仓库到自己的github账户下,然后clone到本地,建立分支并修改后,要push到自己fork来的仓库中,不能直接push到别人的仓库。新分支push到自己的github仓库后,向原始仓库发送pull request 

Git 分支的理解

新建分支 $ git branch testing 切换分支 $ git checkout testing
  • chang_di
  • chang_di
  • 2016年01月22日 16:10
  • 1568

git的深入理解与使用

一、git的深入了解:用git有一段时间了, 总是感觉自己对它的认识是少之又少。现在趁此机会总结一下,以使加深自己对git的理解。 我们都知道,git是一款免费开源的分布式版本控制系统,用于敏捷高效...
  • u011641865
  • u011641865
  • 2016年04月09日 10:33
  • 2664

深入理解Git基本原理

深入理解Git基本原理 资料: 1.  http://my.oschina.net/sunchp/blog/346076 2.  http://www.nowamagic.net/academy/...
  • chenglinhust
  • chenglinhust
  • 2015年11月07日 00:57
  • 540

git图解。通俗易懂

git推荐看廖雪峰的那个教程。入门很快。但是毕竟有些不直观。这时候可以看一下这一篇图解。会有更深的理解。 此页图解git中的最常用命令。如果你稍微理解git的工作原理...
  • me4weizhen
  • me4weizhen
  • 2016年06月15日 16:30
  • 567

彻底理解Git

彻底理解Git
  • colin5300
  • colin5300
  • 2016年05月25日 23:24
  • 11578

深入理解git

之前用过git,感觉很神奇。很好用之际,膜拜linux,他能迅速写出这么给力的版本控制系统而我不能理解其原理,惭愧之极。 今儿偶然看到一篇国外网友写的文章介绍git原理,看完茅塞顿开。遂翻译之,以记...
  • bdss58
  • bdss58
  • 2015年04月13日 11:27
  • 680

深入理解Git (三) - 微命令上篇

1 git hash-object 以前讲过Git用Hash值作为Git对象的名字,那么具体是哪个命令呢? 我们可以先修改一个文件: echo "hongchangfirst" > zhc.conf ...
  • hongchangfirst
  • hongchangfirst
  • 2015年08月12日 15:09
  • 1179

简易理解java按位运算

1. 按位与运算(&) 运算规则 : 0&0=0; 0&1=0; 1&0=0; 1&1=1; 0 相当于false ;1 相当于 true ; & 相当于’&&’ 都是tru...
  • yangs_1235
  • yangs_1235
  • 2018年01月16日 13:59
  • 23

什么是DOM(个人理解)

了解DOM需要清楚几个问题: 什么是DOM? DOM可以用来干什么? DOM是怎么来的? 怎么使用DOM?什么是DOM? DOM(document Object Model),是针对HTML和XM...
  • makel12
  • makel12
  • 2016年04月19日 20:06
  • 1982

Git最常用的几个操作

Git最常用的几个操作 转至元数据结尾 转至元数据起始 上面这张图是我最开始学Git,按照自己的理解画出来的,可能...
  • Richard_Jason
  • Richard_Jason
  • 2016年10月22日 15:07
  • 2636
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Git的操作与理解
举报原因:
原因补充:

(最多只允许输入30个字)