美文网首页
安装并使用Git

安装并使用Git

作者: 光明_7c13 | 来源:发表于2019-08-19 21:50 被阅读0次

    1.安装Git

    yum -y install git
    

    2.初始化版本库

    版本库又名仓库,英文名repository,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

    创建一个空目录
    
    git init     # 初始化,把当前目录变为由 git 管理的版本库
    初始化完成
    ls -a
    .    ..   .git
    可以看到在当前目录下会创建一个隐藏的文件夹 .git
    轻易不用动它里面的任何文件,因为这个目录是 Git 来跟踪和管理版本库用的,假如你搞坏了,它就会给你点儿颜色看(Git 仓库就会被破坏)。
    

    .get目录就是Git的版本库
    Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支 master(通常称为主分支),以及指向 master 的一个指针叫HEAD


    3.工作区、暂存区和 master 分支

    Git 和 SVN 不同之一,就是有 工作区、暂存区的概念

    • 工作区: 用来平时的开发、编辑文件之用,在你创建的仓库目录下,就是工作区
    • 暂存区: 用来暂时存放准备提交到仓库的文档的地方,在 .git 目录下。
    • master 分支: 真正用来存放和发布已经完成的代码文件的地方,在 .git 目录下。
    • 最初文件在工作区


    • git add readme.txt 后,文件被添加到暂存区,此时工作区的文件和暂存区的文件一致。


    • git commit -m "new file readme.txt" 后,在暂存区的所有文件和目录都将后被提交(移动)到分支 master。

    • 而此时,工作区的文件会和当前分区 master 的文件一致,而暂存区没有任何文件,是清洁的。

    总结: 一个文件被提交到版本库的基本流程是:

    1. 在你的工作区创建编写你的代码文件 readme.txt (当然也包括目录) 
    2. 用命令 git add readme.txt 将文件 readme.txt 放到暂存区,这个可以多次执行添加 
    3. 用命令 git commint -m "new file readme.txt" 将暂存区的所有文件和目录一起提交到 master
    
    可以多次添加,一次提交
    
    

    操作

    在某个路径下创建一个空的目录作为仓库
    mkdir  study   创建一个空目录
    cd study          进入目录
    vi readme.txt     创建一个文件并编写内容
    git add readme.txt  将文件添加到暂存区
    git commit -m "new file readme.txt" commit 
    提交到master当中并对添加的文件进行一个描述
    
    • git commit 的 -m 参数后面跟的是关于这次提交版本的描述信息。 这个参数不是必须的,但是强烈要求这么干,这样便于以后自己对版本回滚操作,协同开发时,也便于其他人员可以获取到每次提交改动的基本信息

    暂存区是Git非常重要的概念,弄明白了暂存区,就弄明白了Git的很多操作到底干了什么。


    4.提交修改

    readmi.txt 修改这个文件,内容变为这样:

    Git is a distributed version control system.
    Git is free software.
    内容随意添加
    

    添加完成后在创建一个新的空文件test.txt和空文件夹 newdir

    • 观察一下仓库的最新变化和状态
    bash-3.2$ git status  查看状态
    On branch master
    Changes not staged for commit:        未提交的更改
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
        modified:   study/readme.txt       已经修改的文件
    
    Untracked files:                      没有被添加过的文件
      (use "git add <file>..." to include in what will be committed)
    
        test.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    

    空的目录是不会被 Git 跟踪的

    • 可以看看被修改过的文件,到底修改了哪些内容
    bash-3.2$ git diff study/readme.txt
    diff --git a/study/readme.txt b/study/readme.txt
    index 46d49bf..9247db6 100644
    --- a/study/readme.txt
    +++ b/study/readme.txt
    @@ -1,2 +1,2 @@
    -Git is a version control system.              修改前的内容
    +Git is a distributed version control system.   修改后的内容
     Git is free software.
    (END)
    
    • 之后一起放到暂存区
    bash-3.2$ git add .
    
    • . 会把当前目录下需要提交的所有文件和目录放到暂存区
      提交前可以再次观察下仓库的状态
    bash-3.2$ git status
    On branch master
    Changes to be committed:              下面的文件将会被提交
      (use "git reset HEAD <file>..." to unstage)
    
        modified:   study/readme.txt
        new file:   test.txt               第一次被添加后的状态为 new file
    
    

    提交到仓库并添加说明

    bash-3.2$ git commit -m "add distributed"
    [master a34d237] add distributed
     2 files changed, 1 insertion(+), 1 deletion(-)
     create mode 100644 test.txt
    
    • 再次观察仓库的状态
    bash-3.2$ git status
    On branch master
    nothing to commit, working tree clean     不需要提交,工作区是清洁的
    

    5. 回到过去(版本的回滚)

    git log 命令可以查看提交的版本历史
    

    git log 常用参数

    某一个人的提交记录:
    git log --author=name
    
    一个压缩后的每一条提交记录只占一行的输出:
    git log --pretty=oneline
    
    或者你想通过 ASCII 艺术的树形结构来展示所有的分支, 每个分支都标示了他的名字和标签: 
    git log --graph --oneline --decorate --all
    
    看看哪些文件改变了: 
    git log --name-status
    
    更多的信息,参考:
    git log --help
    

    加上参数 --pretty=oneline 会显示的更简洁

    da197f447342e65bbf37f5b2e609c71d52db7955 (HEAD -> master) add GLP for readme.txt
    a34d2370138d520d1fabc1aa2acc2d234047a39a add distributed
    63e4ecd9409ff1679b8367c116a1c68f045af88d crete a readme file
    (END)
    

    最前面的一串字符 da197f...7955 是commit id(版本号),是一个SHA1计算出来的一个非常大的数字,用十六进制表示。

    每提交一个新版本,实际上Git就会把它们自动串成一条时间线。

    • 开始版本回退

    开回退之前,起码需要知道当前的版本。 在Git中,用HEAD表示当前版本和分支,从上面的信息中我们现在处于分支 master 的 da197f4...7955 版本。下面我用命令 git reset 回退版本到上次修改前的版本,也就是 a34d2370138...a39a 。

    git reset  --hard   版本号
    

    版本号不用全写,写到可分辨的位置就可以

    git reset --hard HEAD^
    
    上一个版本就是HEAD^,上上一个版本就是HEAD^^,100 个版本写成 HEAD~100
    

    git reflog 命令会记录每一次导致版本变化的命令以及涉及到的版本号

    bash-3.2$ git reflog
    a34d237 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
    da197f4 HEAD@{1}: commit: add GLP for readme.txt
    a34d237 (HEAD -> master) HEAD@{2}: commit: add distributed
    63e4ecd HEAD@{3}: commit (initial): crete a readme file
    (END)
    

    我们可以回到之前更新的版本

    git reset --hard 版本号
    

    6.HEAD指针

    Git版本之间转换快是因为指针的作用
    Head指向哪个版本,当前就是哪个版本;当切换版本的时候,Git只是把Head指向切换的版本并把工作区的文件更新

    *处于最新提交后的指针指向:


    • 版本回退后的指针指向:


    add和commit

    Git管理的是修改
    比如新建一个文件,或者修改文件内容,都是修改

    在工作区修改完成后
    进行 git add .
    提交到暂存区

    使用 git commit 才会将暂存区的东西提交到master分区里
    每次工作区里进行了修改 要先git add提交到暂存区里在使用git commit 提交到maseter分区里

    • 查看版本库的状态
    git status 
    
    • 当你提交后,可以使用 git diff HEAD readme.txt 命令来查看工作区和版本库里面最新版本的区别
    git diff  study/readme.txt
    

    7.撤销修改

    命令 ‵git checkout -- readme.txt `意思就是,readme.txt 文件在被添加到暂存区之前,对在工作区对此文件的修改全部撤销

    注意:
    git checkout -- file命令中--很重要,没有--就变成了“切换到另一个分支”

    思路梳理

    1.当改乱了工作区某个文件的内容,想直接丢弃工作区的修改的时候,直接使用 git checkout -- file
    2.当改乱了工作区某个文件的内容还添加到暂存区时,想要丢弃修改,分为两步,第一步用命令git reset HEAD file ,就回到了1,再按1进行操作
    3.如果已经提交到maseter分区里想要撤销本次修改,先查看版本号,再 git reset HEAD 版本号

    8.删除

    在Git中,删除也是一种修改操作
    分两种情况,一种是在工作区删除的文件,已经被添加到了暂存区,但是没有提交
    在个工作区删除一个文件时,但是这个文件已经被添加到了暂存区,
    Git会知道你删除了这个文件,git status 命令会立刻告知哪些文件被删除了

    删除暂存区的文件

    git  rm
    

    另一种是,在工作区删除的文件,添加到了暂存区,并且提交了

    首先

    rm file
    

    在从版本库删除这个文件

    git rm file
    

    再进行提交

    git commit  -m  "del file useless.txt"
    

    此时就从版本库中删除了
    删错文件,恢复到工作区

    git checkout -- file
    

    9.分支管理

    创建与合并分支

    一开始的时候,master 分支是一条线,Git 用 master 指向最新的提交点,再用HEAD 指向 master,就能确定当前分支,以及当前分支的提交点:

    每次提交,master 分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长

    当我们创建新的分支,例如 bac 时,Git 会新建一个指针叫 bac,指向 master 相同的提交点,再把HEAD指向 bac,就表示当前分支在 bac 上:

    • Git创建一个分支很快,因为此时,只是增加一个 bac 指针,然后改改 HEAD 的指向即可,工作区的文件都没有任何变化!

    从现在开始,对工作区的修改和提交就是针对 bac 分支了,比如新提交一次后,bac 指针往前移动一步,而master 指针不变,HEAD 指针同样不变:


    如果我们在bac上的工作完成了,就可以把bac合并到maseter上。
    先切换分支到maseter上,之后直接把maseter指向bac的当前提交点,就完成了合并:


    合并完分支后,你觉得 bac 分支没什么用了,甚至可以删除 bac 分支。删除 bac 分支就是把 bac 指针给删掉,删掉后,我们就剩下了一条 master 分支:


    操作

    1.创建分支bac

    git branch bac
    

    2.切换分支bac

    git checkout bac
    

    创建并切换到分支

    git checkout -b  bac
    

    3.查看分支和当前所在分支

    git branch
    

    4.在bac分支下进行修改切换到maseter分支后,HEAD指针就会指向master所指向的提交点,工作区就属于master,就不会看bac分支的修改


    把bac分支合并到master分支

    先切换到master分支
    git checkout master
    再将需要合并的bac分区合并到master上
    git merge bac
    

    把 bac 分支合并到 master 分支后的文件变化:

    合并完成后,删除分支 bac,并查看分支

    git branch  -d  bac
    
    git branch
    

    删除分支 bac 就变成下图的样子:

    Git鼓励大量使用分支:

    • 因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。
    * 查看分支:git branch
    
    * 创建分支:git branch <name>
    
    * 切换分支:git checkout <name>
    
    * 创建+切换分支:git checkout -b <name>
    
    * 合并某分支到当前分支:git merge <name>
    
    * 删除分支:git branch -d <name>
    

    相关文章

      网友评论

          本文标题:安装并使用Git

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