• Git学习笔记一


    介绍

    百度百科对git的定义如下:git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。

    1.什么是版本控制呢?

      版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。可以记录文件的所有历史变化、随时可以回复到任何一个历史状态、多人协作开发或修改、错误恢复、多功能并行开发等。
      举个直观的例子,假如你现在正在用记事本写一篇很长的文章,写到一半你想大幅修改或者删除某一部分,但你又怕将来想恢复。通常我们另存为一个副本,然后继续修改,有需要时再另存为一个副本。过了很久,你想恢复到之前的某一个副本,但已经记不清哪个副本是你想要的了,只能一个一个找。看着这一大堆副本,想删掉又怕以后会用到。还有时候,你需要让其他人帮你写一部分,于是你把文件发给他,然后继续编辑。几天后,他再把他修改后的文件发回给你,你得把他修改的部分和你的改动合并,想想就头痛。
      Git就是这样一个牛逼的软件,它能帮你追踪文件的变更和变更信息(什么人、改了什么文件、怎么改的文件等),还可以实现并行开发(帮助合并文件等)。

    2.本地版本控制系统(Local VCS)、集中化版本控制系统(SVN)、分布式版本控制系统(git)

    • 本地版本控制系统:
        优点:简单、很多系统中内置;适合管理文本文件。
        缺点:只适合管理少量文件,不支持基于项目的管理;支持文件类型单一;不支持网络,无法实现多人协作。

    • 集中式版本控制系统:
        优点:适合多人团队协作开发;代码集中化管理。
        缺点:单点故障;必须联网工作,无法单机本地工作。

    • 分布式版本控制系统特点:
        优点:适合多人团队协作开发;可以离线工作,先提交到本地仓库,在某一个时刻上传。任意两个开发者之间可以很容易的解决冲突

    安装

    官网下载链接
    https://git-scm.com/downloads
    

    结构

    本地库(历史版本区域)
    ↑
    使用git commit命令将暂存区的代码提交到本地库
    ↑
    暂存区(临时存取区域)
    ↑
    使用git add命令将写的代码暂存到暂存区
    ↑
    工作区(写代码区域)
    

    本地库与远程库的交互

    • 团队内部协作

    • 跨团队协作

    本地库初始化

    • 创建一个文件夹WeChat
    mkdir WeChat 
    
    • 在创建文件夹中执行
        git init
    
    • 查看.git目录下的文件
        cd .git
        ls -lA
    

    设置签名

    • 形式
     用户名:gui
     Email地址:goodMorning@123.com
    
    • 作用
        用于去分不同开发人员的身份
    
    • 辨析
        这里设置的签名和登陆远程库(代码托管中心)的账号、密码没有任何关系。
    
    • 命令
      • 1、项目级别/仓库级别:仅在当前本地库范围内有效。
            git config user.name gui_pro
            git config user.email goodMorning@123.com
            信息保存的位置:./.git/config文件
    
    * 2、系统用户级别:登陆当前操作系统的用户范围。
    
            git config --gloal user.name gui_glb
            git config --gloal user.email goodMorning_glb@123.com
            信息保存的位置:~/.gitconfig文件
    
    * 3、级别优先级
    
            就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名。
            如果只有系统用户级别的签名,就一系统用户级别的签名为准。
            二者都没有不允许。
    

    git基本命令操作

    • 查看git状态
    git status
    // 查看工作区、暂存区状态
    
    • 创建一个文件good.txt并写入内容
    vim good.txt
    -------------
    aaaaaaa
    bbbbbbbbb
    
    • 添加文件
    git add good.txt
    // 将工作区的“新建/修改”添加到暂存区
    
    • 文件good.txt添加内容
    vim good.txt
    -------------
    aaaaaaa
    bbbbbbbbb
    ccccc
    ddd
    
    • 提交文件
    git commit -m "My second commit,modify good.txt" good.txt 
    //将暂存区的的内容提交到本地库
    //-m 后面跟的是提交描述
    
    • 提交流程

    实现版本的前进和后退

    查看历史记录

    • 查看日志
    git log
    
    • 每一条日志只显示一行
    git log --pretty=oneline
    
    git log --oneline
    //与上条命令对比,该命令将hash值缩短了。只显示过去的版本
    
    git reflog
    //显示了版本号,对版本的前进和后退有直接参考价值
    //HEAD@{移动到当前版本需要多少步}
    

    版本前进后退操作

    本质是操作HEAD指针进行版本的前进后退

    • 通过索引值操作
    git reset --hard [局部索引值]
    git reset --hard 9a9ebe0
    
    • 使用^符号:只能退后
    //往后退一步
    git reset --hard HEAD^
    
    //往后退三步
    git reset --hard HEAD^^^
    
    //总结:一个^符号退一步
    
    • 使用~符号: 只能后退
    //往后退三步
    git reset --hard HEAD~3
    
    //往后退n步
    git reset --hard HEAD~n
    

    reset命令的是哪个参数对比

    • --soft参数
      仅仅在本地库移动指针

    • --mixed参数
      在本地库移动HEAD指针
      重置暂存区

    • --hard参数
      在本地库移动HEAD
      重置暂存区
      重置工作区

    删除文件并找回

    • 前提:删除前,文件存在时的状态提交到了本地库

    • 操作:git reset --hard[指针位置]

    * 删除操作已经提交到本地库:指针未获知指向历史记录
    * 删除操作尚未提交到本地库:指针位置使用 HEAD
    
    • 通过返回版本号找回文件举例
    //新建文件
    vim aaa.txt
    ------------
    aaaaaaaaaaa
    
    //添加文件
    git add aaa.txt
    
    //提交文件
    git commit -m "new aaa.txt" aaa.txt
    
    //删除文件
    rm aaa.txt
    
    //查看状态,提示需要提交上去
    git status
    
    //把文件提交到暂存区
    git add aaa.txt
    
    //查看状态,此时是将要被提交状态
    git status
    
    //提交到本地库,此时在本地库就有一个确定的记录,且永远都不会消失
    git commit -m "delete aaa.txt" aaa.txt
    
    //倒回到上个版本,文件找回
    git reset --hard 567f4e1
    
    

    比较文件差异

    • git diff [文件名]
    将工作区中的文件和暂存区进行比较
    
    • git diff[本地库中历史版本][文件名]
    将工作区中的文件和本地库历史记录比较
    
    • 不带文件名比较多个文件
    git diff 
    //比较暂存区中所有差异文件
    
    • 举例
    //先修改文件
    vim apple.txt
    
    //比较文件
    git diff apple.txt
    
    //提交到暂存区
    git add apple.txt
    
    //再次比较,无显示
    git diff apple.txt
    
    //比较HEAD指针
    git diff HEAD apple.txt
    
    

    分支管理

    什么是分支

    • 在版本控制过程中,使用多条线同时推进多个任务。

    分支的好处

    • 同时并行推进多个功能开发,提高开发效率
    • 各个分支在开发过程中,如果某一个分支开发失败,不会对娶她分支有任何影响。失败的分支删除重新开始即可。

    分支操作

    • 查看分支
    git branch -v
    
    • 创建分支
    git branch [分支名]
    git branch hot_fix
    
    • 切换分支
    git checkout [分支名]
    git checkout hot_fix
    
    • 合并分支
    //第一步:切换到接受修改的分支上
    git checkout [被合并分支名]
    //第二步:执行merge命令
    git merge [有新内容分支名]
    git merge hot_fix
    
    • 解决冲突

    冲突的内容:

    冲突的解决:

      第一步:编辑文件,删除特殊符号
      第二步:把文件修改到满意的程度,保存退出
      第三步:git add [文件名]
      第四步:git commit -m "日志信息"。(注意:此时commit 不能带文件名)

  • 相关阅读:
    浅谈大学两年
    vue的基本操作
    JS执行环境,作用域链及非块状作用域
    关于AJAX异步请求
    第一个go程序和基本语法
    Golang
    11.二叉树
    10.排序
    9.算法之顺序、二分、hash查找
    高性能异步爬虫
  • 原文地址:https://www.cnblogs.com/nthforsth/p/12228414.html
Copyright © 2020-2023  润新知