zoukankan      html  css  js  c++  java
  • git简明教程

    史上最简单的GIT简明教程
    --------------------------------------------------------------------------------------------
    date:20140716
    created by jesse
    system_os:CentOS 6.2x64
    git url
    https://www.kernel.org/pub/software/scm/git/
    http://git-scm.com/downloads
    
    支持的协议:
    git://
    http://
    https://
    user@server:/path.git
    --------------------------------------------------------------------------------------------
    1:git安装
    
    #yum安装
    yum install -y git
    
    #设置GIT 以便进行用户修改跟踪 以及结果显示色彩
    git config --global user.name "zhangluya"
    git config --global user.email "zhangluya1987@gmail.com"
    #git config --global color.ui true
    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
    
    
    #查看已经做的全局配置
    git config --list
    
    源码包安装方式:
    wget https://www.kernel.org/pub/software/scm/git/git-2.0.1.tar.gz
    yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc* perl perl-devel
    tar zvfx git-2.0.1.tar.gz 
    cd git-2.0.1
    make prefix=/usr/local/git all
    make prefix=/usr/local/git install
    cd ..
    
    2.创建版本库
    mkdir git
    cd git/
    git init
    
    #添加并提交文件 -m 后面写说明 -a参数可以直接编辑
    git add readme.txt 
    git commit -m "git init v1.0" 
    
    3.如果git status告诉你有文件被修改过,用git diff可以查看修改内容
    [root@jesse git]# git diff readme.txt 
    diff --git a/readme.txt b/readme.txt
    index 45e6e5c..274860d 100644
    --- a/readme.txt
    +++ b/readme.txt
    @@ -1,2 +1,3 @@
     git init v1.0 2014-07-17 17:27
     git add 2 files v1.1
    +git diff test v1.3
    
    
    4:版本回退
    在Git中,用HEAD表示当前版本,也就是最新的提交.
    上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100.
    Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向需要回退的版本:
    
    #回退到上个版本
    [root@git git]# git reset --hard HEAD^
    HEAD is now at 8261d99 readme.txt add a line
    
    #查看确认 已经回退到上个版本了 git log也看不到上条信息了
    [root@lamp git]# git log --pretty=oneline
    8261d99402702e3b6c9e7a54a9fba2b8781ebe9a readme.txt add a line
    a41a9c889f8a5450953675acf21274700965e803 add 2 files
    62de30a512766147733ebc2cee235384c4862e65 git init v1.0
    
    [root@lamp git]# cat readme.txt 
    git init v1.0 2014-07-17 17:27
    git add 2 files v1.1
    
    如果后悔了 还想回退到之前的版本:
    只要记得之前的commit id即可回退回去
    [root@lamp git]# git reset --hard fe5f6e8
    HEAD is now at fe5f6e8 git diff test
    
    #git log 查看提交信息
    [root@lamp git]# git log --pretty=oneline
    fe5f6e8187e4c6b579e7d9af6c46bc1e43be098b git diff test
    8261d99402702e3b6c9e7a54a9fba2b8781ebe9a readme.txt add a line
    a41a9c889f8a5450953675acf21274700965e803 add 2 files
    62de30a512766147733ebc2cee235384c4862e65 git init v1.0
    
    #已经回退回去了
    [root@lamp git]# cat readme.txt 
    git init v1.0 2014-07-17 17:27
    git add 2 files v1.1
    git diff test v1.3
    
    #git reflog查看命令历史
    [root@lamp git]# git reflog
    fe5f6e8 HEAD@{0}: fe5f6e8: updating HEAD
    a41a9c8 HEAD@{1}: a41a9c8: updating HEAD
    fe5f6e8 HEAD@{2}: fe5f6e8: updating HEAD
    8261d99 HEAD@{3}: HEAD^: updating HEAD
    fe5f6e8 HEAD@{4}: commit: git diff test
    8261d99 HEAD@{5}: commit: readme.txt add a line
    a41a9c8 HEAD@{6}: commit: add 2 files
    62de30a HEAD@{7}: commit (initial): git init v1.0
    
    
    5:工作区和暂存区
    我们把文件往Git版本库里添加的时候,是分两步执行的:
    第一步是用"git add"把文件添加进去,实际上就是把文件修改添加到暂存区;
    第二步是用"git commit"提交更改,实际上就是把暂存区的所有内容提交到当前分支;
    因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,commit就是往master分支上提交更改.
    可以简单理解为,需要提交的文件修改通通放到暂存区,然后一次性提交暂存区的所有修改.
    
    
    #查看工作区和版本库里的差别:
    [root@lamp git]# git diff HEAD readme.txt 
    diff --git a/readme.txt b/readme.txt
    index 274860d..e97e868 100644
    --- a/readme.txt
    +++ b/readme.txt
    @@ -1,3 +1,4 @@
     git init v1.0 2014-07-17 17:27
     git add 2 files v1.1
     git diff test v1.3
    +git HEAD diff -- readme.txt
    
    
    6:撤销修改和删除
    #撤销修改 中间是 -- 这个不要忘记 撤销修改的是未提交到暂存区之前的
    git checkout -- readme.txt
    
    #删除文件从版本库中
    git rm file.txt
    git commit -m "remove file.txt"
    
    #删除完后想要撤销回来
    [root@lamp git]# git reflog
    e201e55 HEAD@{0}: commit: remove 1.txt
    fe5f6e8 HEAD@{1}: fe5f6e8: updating HEAD
    
    [root@lamp git]# git reset --hard e201e55
    HEAD is now at e201e55 remove 1.txt
    
    
    7远程仓库:
    git remote add origin git@github.com:jesse/git.git
    git push -u origin master #第一次提交时使用-u参数
    
    由于远程库是空的,第一次推送master分支加上了-u参数,Git不但会把本地的master分支内容推送
    的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者
    拉取时就可以简化命令.
    
    #以后操作简化如下
    git push origin master
    
    远程克隆:
    git clone git@github.com:jesse/git.git
    
    8:分支管理
    git checkout -b dev_01 #创建并切换到开发分支
    
    #相当于如下操作
    git branch dev_01 #创建分支
    git checkout dev_01 #切换分支
    git branch命令会列出所有分支,当前分支前面会标一个*号.
    
    #合并分支
    git checkout master  #切换到主分支
    git merge dev_01     #将开发分子和合并到master分支
    
    #删除分支:
    git branch -d dev_01
    
    #解决冲突
    [root@lamp git]# vi readme.txt 
    
    <<<<<<< HEAD   #当前分支
    git merge test 1
    =======
    git merge test  #开发分支
    >>>>>>> dev_01
    git add branch dev_01 test
    git init v1.0 2014-07-17 17:27
    git add 2 files v1.1
    git diff test v1.3
    
    此处收工合并冲突后默认认为已经处理最好是修改成和两边一直 然后互相merge下
    
    
    #带参数的分支查看情况
    [root@lamp git]# git log --graph --pretty=oneline --abbrev-commit
    *   63e2c04 remove git merge test 1
    |  
    | * 9da0c9f git merge test
    * | bc5e9e3 merge test 1 master
    |/  
    * eeba8b3 git add branch dev_01 test
    * fe5f6e8 git diff test
    * 8261d99 readme.txt add a line
    * a41a9c8 add 2 files
    * 62de30a git init v1.0
    
    #--no-ff 模式的merge git log可以看到相关的更新
    git merge --no-ff -m "merge with --no-ff master" dev_01
    
    合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,
    能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并.
    
    8:BUG分支管理
    #暂时将工作区和暂存区冷藏起来
    [root@git git]# git stash
    Saved working directory and index state WIP on dev_01: ff993b6 merge with no-ff
    HEAD is now at ff993b6 merge with no-ff
    
    #查看冷藏起来的都有哪些
    [root@lamp git]# git stash list
    stash@{0}: WIP on dev_01: ff993b6 merge with no-ff
    
    #恢复冷藏文件
    git stash apply stash@{0} #恢复之后不删除
    git stash pop             #恢复的同时并删除
    
    #删除冷藏列表:
    git stash drop
    
    #如果要丢弃一个没有被合并过的分支,可以通过
    git branch -D name 强行删除
    
    #查看远程库信息
    git remote -v
    
    #推送分支
    git push orign master
    
    
    9:标签管理
    git tag v1.0 #给当前提交打便签
    git tag v1.1 jds7s8s #针对指定commit id 打标签
    git tag #查看所有标签
    git show v1.0 #查看标签信息
    
    还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字
    git tag -a v0.1 -m "version 0.1 released" 3628164
    
    还可以通过-s用私钥签名一个标签 一般不用
    git tag -s v0.2 -m "signed version 0.2 released" fec145a
    
    删除标签:
    git tag -d v1.0
    因为创建的标签都只存储在本地 不会自动推送到远程所以,打错的标签可以在本地安全删除.
    如果要推送某个标签到远程,使用命令git push origin tagname:
    
    #一次性推送全部尚未推送到远程的本地标签:
    git push origin --tags
    
    #如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
    git tag -d v0.9
    Deleted tag 'v0.9' (was 6224937)
    然后,从远程删除。删除命令也是push,但是格式如下:
    
    git push origin :refs/tags/v0.9
    To git@github.com:jesse/learngit.git
     - [deleted]         v0.9
    
    
    忽略特殊文件:
    .gitignore
    
    别名设置:
    git config --global alias.st status
    git config --global alias.co checkout
    git config --global alias.ci commit
    git config --global alias.br branch
    
    
    
    git服务器搭建简化步骤:
    yum install -y git
    useradd git
    mkidr git && cd git
    git init --bare sample.git
    chown -R git:git sample.git
    修改git 登陆shell为
    git:x:500:500::/home/git:/usr/bin/git-shell
    
    
    [root@console git_learn]# git log --pretty=oneline  #结果在一行显示
    10e7ef93646c14e8e9c218895690a8fea9eaa3b5 add git test
    671b3e7e242c1706a7e6662f8ee5edbf51e25b40 add distributed
    1493e1dfec607f82842f3f17fb82593c80d24c6a commit b.txt
    e1dea08907276d2e89e6ff856bf769388d9c5883 add a git.txt by zhangluya
    
    在Git中,用HEAD表示当前版本,也就是最新的提交“3628164...882e1e0”(注意我的提交ID和你的肯定不一样),
    上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100.
    
    [root@console git_learn]# cat git.txt 
    git test
    git is a free software!
    git is a distributed version console system!
    [root@console git_learn]# git reset --hard HEAD^ #回退到上个版本
    HEAD is now at 671b3e7 add distributed
    [root@console git_learn]# cat git.txt 
    git is a free software!
    git is a distributed version console system!
    
    
    假设回退错误,还想回退到最近更新的版本:
    [root@console git_learn]# git reset --hard 10e7ef
    HEAD is now at 10e7ef9 add git test
    [root@console git_learn]# cat git.txt 
    git test
    git is a free software!
    git is a distributed version console system!
    [root@console git_learn]# git log --pretty=oneline
    10e7ef93646c14e8e9c218895690a8fea9eaa3b5 add git test
    671b3e7e242c1706a7e6662f8ee5edbf51e25b40 add distributed
    1493e1dfec607f82842f3f17fb82593c80d24c6a commit b.txt
    e1dea08907276d2e89e6ff856bf769388d9c5883 add a git.txt by zhangluya
    
    [root@console git_learn]# git reflog  #每次提交记录
    10e7ef9 HEAD@{0}: 10e7ef: updating HEAD
    671b3e7 HEAD@{1}: HEAD^: updating HEAD
    10e7ef9 HEAD@{2}: commit: add git test
    671b3e7 HEAD@{3}: commit: add distributed
    1493e1d HEAD@{4}: commit: commit b.txt
    e1dea08 HEAD@{5}: commit (initial): add a git.txt
    
    
    git checkout --  file可以丢弃工作区的修改: --和file之间要有空格
    命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
    一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
    一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
    总之,就是让这个文件回到最近一次git commit或git add时的状态。
    
    git文件删除:
    git rm filename
    git commit -m "delete file"
    
    误删除要撤销没提交之前可以这么做:
    使用:git checkout -- filename
    
    关联远程git库:
    git remote add origin git@github.com:zhangluya1987/git_learn.git
    请千万注意,把上面的zhangluya替换成你自己的GitHub账户名,否则,
    你在本地关联的就是我的远程库,关联没有问题,但是你以后推送是推
    不上去的,因为你的SSH Key公钥不在我的账户列表中.
    添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,
    但是origin这个名字一看就知道是远程库。下一步,就可以把本地库的所有
    内容推送到远程库上:
    
    git remote add origin git@github.com:zhangluya1987/git_learn.git
    git push -u origin master #第一次加 -u
    由于远程库是空的,我们第一次推送master分支时,加上了-u参数,
    Git不但会把本地的master分支内容推送的远程新的master分支,还
    会把本地的master分支和远程的master分支关联起来,在以后的推
    送或者拉取时就可以简化命令。
    --------------------------------------------------------------------------
    touch README.md
    git init
    git add README.md
    git commit -m "first commit"
    git remote add origin https://github.com/zhangluya1987/git_learn.git
    git push -u origin master
    Push an existing repository from the command line
    
    git remote add origin https://github.com/zhangluya1987/git_learn.git
    git push -u origin master
    
    克隆远程代码库:
    git clone git@github.com:zhangluya1987/git_learn.git
    
    创建分支与合并分支:
    首先,我们创建dev分支,然后切换到dev分支:
    git checkout -b dev_git
    
    git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
    git branch dev
    git checkout dev
    
    
    用git branch命令查看当前分支:
    git branch
    * dev
      master
    git branch命令会列出所有分支,当前分支前面会标一个*号。
    
    然后,我们就可以在dev分支上正常提交,比如对readme.txt做个修改,加上一行:
    
    Creating a new branch is quick.
    然后提交:
    git add readme.txt 
    git commit -m "branch test"
    [dev fec145a] branch test
    
    现在,dev分支的工作完成,我们就可以切换回master分支:
    git checkout master
    
    合并分支:将dev_git分支合并到master分支
     git merge dev_git
    
    删除开发分支:
    git branch -d dev_git
    查看分支:git branch
    创建分支:git branch name
    切换分支:git checkout name
    创建+切换分支:git checkout -b name
    合并某分支到当前分支:git merge name
    删除分支:git branch -d name
    
    解决冲突:
    删除分支冲突部分
    git log --graph  #查看所有分支
    
    准备合并dev分支,请注意--no-ff参数,表示禁用“Fast forward”:
    $ git merge --no-ff -m "merge with no-ff" dev
  • 相关阅读:
    Prometheus+mysql+grafana
    Ant+JMeter+Jenkins接口自动化平台搭建
    MySQL配置文件my.cnf的解析
    jmeter上传图片接口+下载文件接口
    python 正则表达式
    Python接口自动化基础---cookie绕过登录
    Python接口自动化基础---token鉴权
    Python接口自动化基础---session关联接口
    Python接口自动化基础---post请求
    Python接口自动化基础---get请求
  • 原文地址:https://www.cnblogs.com/chunguang/p/5541875.html
Copyright © 2011-2022 走看看