zoukankan      html  css  js  c++  java
  • 1- Git的使用

    1、Git简介

    不讲

    1.1、Git结构

    Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。

    image-20200415220605958

    1.2、Git本地库初始化

    执行这个命令,Git在执行命令的文件夹下自动创建 .git文件夹,我们不能随意更改这里的文件

    $  git init
    

    1.3、Git签名

    作用: 区分不同开发人员的身份,Git在提交代码时会验证签名信息

    优先级:

    • 就近原则: 项目级别优先于系统用户级别, 二者都有时采用项目级别的签名
    • 如果只有系统用户级别的签名, 就以系统用户级别的签名为准
    • 二者都没有,是不允许的

    1.3.1、仓库级别签名

    在当前仓库所在路径下配置的仓库级别签名,仅在当前本地库范围内有效

    信息保存位置: ./.git/config 文件

    $  git config user.name chenheng
    $  git config user.email 123456789@qq.com
    

    1.3.2、系统用户级别签名

    在登录当前操作系统的用户范围内有效

    ~/.gitconfig 文件

    $  git config --global user.name xxxx
    $  git config --global user.email 123456789@qq.com
    

    1.4、Git基本原理

    哈希,Git 就是靠哈希机制来从根本上保证数据完整性的。

    1.5、Git 文件管理机制(版本管理)

    ​ Git 把数据看作是小型文件系统的一组快照。 每次提交更新时 Git 都会对当前的全部文件制作一个快照并保存这个快照的索引。 为了高效, 如果文件没有修改,Git 不再重新存储该文件, 而是只保留一个链接指向之前存储的文件。 所以 Git 的工作方式可以称之为快照流。

    image-20200416004418961

    Git 文件管理机制细节

    • Git 的“提交对象”
    image-20200416004510788
    • 提交对象及其父对象形成的链条
    image-20200416004539662

    1.5、Git 分支管理机制

    1.5.1、分支的创建

    image-20200416004818093

    1.5.2、分支的切换

    image-20200416004846519 image-20200416004917812 image-20200416004946464

    2、Git基本操作

    工作区的代码文件,创建/修改后,add到暂存区,再commit提交到本地库;

    暂存区的代码文件在commit之前可以rm撤销移除

    如果是已经在本地库的代码文件,只是修改了的话,可以不使用add命令,直接commit,但是这样就不能rm移除了

    状态查看

    git status
    

    查看工作区、 暂存区状态

    添加至暂存区

    git add 被修改的filename
    git add .  # 添加所有文件到暂存区
    

    将工作区中“新建/修改”的文件添加到暂存区

    移出暂存区

    git rm --cached filename
    

    将暂存区的指定文件移出

    提交至本地库

    git commit filename(需要在vim中添加message) 或 git commit -m "commit message" filename
    git commit (需要在vim中添加message) 或 git commit -m "commit message"  # 提交所有文件
    

    将暂存区的内容提交到本地库

    vim中添加message

    git commit提交之后,需要在vim中写一些变化信息(必要)

    image-20200415215845314

    查看历史版本

    git log 
    git log --pretty=oneline #用漂亮的方式,在一行上显示一个版本信息
    git log --oneline #缩短hash值得显示长度,一行上显示一个版本信息,只显示历史版本
    git reflog #多显示:HEAD@{从HEAD->指向得版本移动到当前版本需要多少步},推荐使用这个,命令短,显示信息多
    

    log中记录了commit提交的所有的代码版本,以及代码的当前版本,和对应的索引值(哈希值)、签名信息、提交日期,message

    image-20200415221228343

    版本的进退

    配合git reflog,查看历史版本进行进退

    reset的三个参数:
    soft:仅仅在本地库移动 HEAD 指针
    mixed:在本地库移动 HEAD 指针,重置暂存区
    hard:在本地库移动 HEAD 指针,重置暂存区,重置工作区。常用

    版本进退的命令

    • 基于索引值操作[推荐]
    git reset --hard [局部索引值]  # 使用git reflog 可以显示部分索引值
    
    • 使用^符号: 只能后退
    git reset --hard HEAD^  # 一个^表示后退一步, n个^表示后退n步
    
    • 使用~符号: 只能后退
    git reset --hard HEAD~3  # 表示后退 3 步
    git reset --hard HEAD~10  # 表示后退 10 步
    

    删除的文件恢复

    • 前提: 删除前, 文件存在时的状态提交到了本地库
    • 操作: git reset --hard [指针位置]
    • 删除操作已经提交到本地库: 指针位置指向历史记录
    • 删除操作尚未提交到本地库: 指针位置使用 HEAD
    • 恢复的文件是历史版本

    比较文件差异

    git diff [文件名]  # 将工作区中的文件和暂存区进行比较
    git diff [本地库中历史版本] [文件名]  # 将工作区中的文件和本地库历史记录比较
    
    git diff  # 不带文件名比较多个文件
    

    3、Git分支管理

    查看分支

    git branch -v
    

    创建分支

    git branch [已有的分支名]
    
    或
    git checkout -b [新建的分支名] # 创建并切换到该分支
    

    切换分支

    git checkout [分支名]
    

    合并分支

    • 第一步: 切换到接受修改的分支(被合并, 增加新内容) 上
    git checkout [被合并分支名]
    
    • 第二步: 执行 merge 命令
    git merge [有新内容分支名]
    

    解决冲突

    发生冲突的原因是:多个分支都对同一个版本的同一个内容进行更新,合并时就会发生冲突

    处理:反应自动合并发生冲突,但不会舍去任意一个更新,改为手动合并。

    image-20200416002334565

    ​ 在本地库的文件中会生成冲突表现

    image-20200416002550930

    解决:

    • 第一步: 编辑文件, 删除特殊符号

    • 第二步: 把文件修改到满意的程度, 保存退出

    • 第三步: git add [文件名]

    • 第四步: git commit -m "日志信息"

      注意: 此时 commit 一定不能带具体文件名

  • 相关阅读:
    定制一个支持中英文的简单LaTex模板
    汉字hash问题(转)
    算法题之最大回文子串
    算法题之添加回文串
    数据表设计的步骤
    很简单的Java断点续传实现原理
    MongoDB 搭建文件存储的方案
    cron语法
    关于如何使用SVN的一些建议
    无后台应用 Stash Backend
  • 原文地址:https://www.cnblogs.com/sout-ch233/p/12720316.html
Copyright © 2011-2022 走看看