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操作概念理解

远程仓库管理1、如何列出远程仓库的名称:git remote:只简单列出远程跟踪仓库的名字git remote -v:在远程跟踪仓库名字后边显示仓库的地址URL2、添加远程仓库git remote a...
  • lyjshen
  • lyjshen
  • 2016年08月23日 10:04
  • 207

Git理解及常用操作总结

一、 Git作用 Git是一个开源的、免费的分布式版本控制工具,用于敏捷高效的处理各种大小项目的版本管理。Git有如下功能: 1、 从服务器上面克隆数据,包括代码和版本信息到本地。 2、 在本地代码的...

git2.8安装文档及软件及常用操作

  • 2017年10月31日 21:10
  • 14.99MB
  • 下载

git常用操作思维导图

  • 2017年10月26日 11:29
  • 498KB
  • 下载

Git的命令操作-克隆,更新,提交代码

上一篇讲了安装以及克隆到本地 现在来讲述一下Git命令更新代码,文件,以及提交到git仓库 首先--进入到克隆之后的文件夹的根目录(这个文件夹下包含一个.git的文件夹)-然后鼠标右键--...

git常用操作

  • 2017年06月09日 10:52
  • 2KB
  • 下载

Git操作说明文件

  • 2017年04月24日 19:38
  • 17KB
  • 下载

git基础介绍与GitKraken操作简记

新增了git的一般命令。
  • YQXLLWY
  • YQXLLWY
  • 2017年03月16日 14:27
  • 3812

Git操作指南

  • 2013年10月30日 21:03
  • 689KB
  • 下载

GIT 操作指南

  • 2013年08月09日 11:38
  • 17KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Git的操作与理解
举报原因:
原因补充:

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