git

GIT

分布式的代码管理系统,区别于svn等中央式代码管理系统。每个开发者的git客户端本地就是一个git 仓库,然后再通过gitlab/github的远程仓库与其他团队成员同步信息。

安装

推荐使用2.7

yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
wget https://github.com/git/git/archive/v2.7.4.zip
unzip v2.7.4
cd git-2.7.4/
make prefix=/opt/git all
make prefix=/opt/git install
ls /usr/bin/git
rm -rf /usr/bin/git              #删除默认自带版本
ln -s /opt/git/bin/git /usr/bin/git
git version
View Code

git 的四个区域

本地目录      

  git 仓库所在目录,实际存在的目录,所有代码文件存放的目录
暂存区域

  不可见的空间,代码开发完毕需要提交到暂存区域t,以便从暂存区提交到本地仓库
本地仓库

  存放管理本地代码的仓库,就是git 初始化配置的目录。代码从暂存区提交到本地仓库
远程仓库

  指的是gitlab或者github这些远程仓库。本地仓库与远程仓库建立连接后,本地仓库代码可以推送到远程仓库保管,远程仓库最新代码可以下载后本地。通过远程仓库实现团队成员合作开发,大家把自己的开发成果推送到远程库,其他同事同步远程数据到本地仓库再次基础上继续开发,本地完成后再次推送到远程实现了协同开发目的。

文件的四种状态

git 是通过文件状态的标识来管理的,新建的文件放在工作目录里面状态为untracked,此时文件还未被仓库管理,需要提交到暂存区以及仓库才会被仓库管理。

创建一个本地仓库

mkdir /opt/git-dir                    #创建一个git 工作目录
cd /opt/git-dir/                        #进入目录
git init                            #把此目录初始化为git 仓库
git config  --global user.name "zhangsan"
git config  --global user.email "zhangsan@163.com"
View Code

GIT的基本命令

git status      
    #查看当前工作目录的文件状态,例如未被追踪状态,暂存区状态,根据状态提示下一步操 
     作。

git add file-name/.             
    #添加工作目录文件到暂存区。file-name 指定文件,"."全部文件

git commit -m "comment"       
    #提交暂存区的文件到本地仓库,每一次提交到仓库都会生成一个镜像来保存当前仓库文 
    件状态,通过id 标识,之前的镜像状态可以通过id去回退。

git rm --cached file-name    
    #删除暂存区或分支上的文件, 本地保留, 只是不希望这个文件被版本控制,文件恢复为 
    未被追踪状态,如果文件从本地仓库被删除那么需要commit 提交一下。

git rm file-name              
    #删除暂存区或分支上的文件, 同时工作区也要删除。如果文件从仓库被删除需要 
     commit提交一下。

git log           
    #查看当前分支的提交记录以及各个记录的id号    
View Code

Git分支管理

git 本质通过记录文件状态管理仓库的,每次commit后都会产生一个新的文件状态并保存记录此时状态,git之所以能够高效管理仓库,实际上使用的是指针的机制,每一次提交指针都会移动到提交的状态,回退也是切换指针到之前commit而文件并未被改变。

而分支实际上就是指针。git 最开始只有一个分支master,新建一个分支实际就是新建一个指针,新建指针最开始与当前分支指向位置相同。

当前切换分支实际上通过一个HEAD的指针来指向要切换的分支。

分支思维导图

分支命令

git  status          查看当前所在分支,以及分支内文件状态

git branch       查看当前存在的分支

git branch about     在当前所在的分支,创建一个about 的新分支,新分支会和当前所在分支指针指向同一位置。
git checkout about      切换到about 分支
git branch -d about     删除分支
ls git 工作目录 查看的是未被提交到缓存区的文件,和该分支中本地仓库文件。只能看到自己分支仓库文件,不能看到其他分支仓库文件。


git merge test            把test 分支合并到当前分支
git branch --merged   #查看哪些分支已经被merge 到当前分支了
git checkout file-name    #对于已经提交到本地仓库的文件再次修改后,如果要撤销修改此命令会把仓库文件覆盖到本地工作目录文件。如果新建本地工作目录文件则无办法撤销。
git relog           #查看之前的回滚id ,可以通过 git checkout id 把回滚后的状态再返回到之前的状态
git reset options  id  #根据commit id 把库回滚到指定提交的状态

   --hard      #缓存区和工作目录跟随仓库都同步到你指定的提交

  --mixed       #默认选项。缓存区与仓库同步到指定的提交但工作目录不受影响

  --soft        #缓存区和工作目录都不会改变,只有仓库回滚

  
练习merge

merge与rebase 区别
merge 后原来的分支还在,merge 操作会产生一个新的commit记录此次的merge 操作,会把分支的commit 操作按时间顺序合并过来
rebse 会把分支的commit按时间顺序合并过来,但不会产生一个新的提交,就好像没发生一样不记录,原来分支

原文地址:https://www.cnblogs.com/fanggege/p/11507374.html