zoukankan      html  css  js  c++  java
  • 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 不能带文件名)

  • 相关阅读:
    LOJ 6089 小Y的背包计数问题 —— 前缀和优化DP
    洛谷 P1969 积木大赛 —— 水题
    洛谷 P1965 转圈游戏 —— 快速幂
    洛谷 P1970 花匠 —— DP
    洛谷 P1966 火柴排队 —— 思路
    51Nod 1450 闯关游戏 —— 期望DP
    洛谷 P2312 & bzoj 3751 解方程 —— 取模
    洛谷 P1351 联合权值 —— 树形DP
    NOIP2007 树网的核
    平面最近点对(加强版)
  • 原文地址:https://www.cnblogs.com/nthforsth/p/12228414.html
Copyright © 2011-2022 走看看