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 一定不能带具体文件名

  • 相关阅读:
    ArrayList用法
    MessageBox
    将文本文件导入Sql数据库
    在桌面和菜单中添加快捷方式
    泡沫排序
    Making use of localized variables in javascript.
    Remove double empty lines in Visual Studio 2012
    Using Operations Manager Connectors
    Clear SharePoint Designer cache
    Programmatically set navigation settings in SharePoint 2013
  • 原文地址:https://www.cnblogs.com/sout-ch233/p/12720316.html
Copyright © 2011-2022 走看看