作者:Eventi 出处:http://www.cnblogs.com/Eventi 欢迎转载,也请保留这段声明。谢谢!

git简介

版本控制软件,由Linus(linux开发者)开发,最初用来对linux进行版本控制。

git优势

  • 大部分在本地完成,不需要联网(在本地安装软件,实现版本控制,本地保存完整的数据)
  • 完整性保证(每次版本控制进行hash计算保证程序的完整性)
  • 尽可能的添加数据而不是删除或修改数据(每次保存新的版本,不会删除原来的版本)
  • 分支操作非常快捷路畅(内部以快照的形式管理,分支其实就不同的指针,切换或创建快照就是对指针的操作)
  • 与linux命令全面兼容(显然,同一人开发的)

git安装

  • 官网地址:https://git-scm.com
  • 安装:在安装向导中,Adjusting your PATH environment选项中选择Use Git from Git Bash only,意思是只在Git Bash中使用Git,选择该项的原因是这种方式使用Git就足够了。其他直接下一步。

Git本地结构:工作区、暂存区、本地库。

  • 工作区:写代码
  • 暂存区:临时存储
  • 本地库:历史版本
  • git add命令:工作区--->暂存区
  • git commit命令:暂存区--->本地库

Git和代码托管中心

局域网下:

  • GitLab服务器(可自己搭建)

外网:

  • 码云(国内)
  • github(国外)

本地库和远程库

团队内部协作

  • 本地库--->远程库:push(其他成员需要加入团队才能push)
  • 远程库--->本地库:clone,pull

跨团队协作

  • 远程库--->远程库:fork,pull request->(审核)->merge

Git命令操作

本地库初始化

  • 命令:git init
  • 效果:会在当前目录创建一个.git文件夹(隐藏目录)并会在.git中创建一些文件和文件夹。
  • 注意:.git目录中不要修改和删除。

设置签名

  • 形式:用户名+email地址。
  • 作用:区分不同开发人员。
  • 辨析:这里的签名与代码托管中心代码账号和密码无关。
  • 命令:
    • 项目级别/仓库级别(项目文件夹下的级别)

      • git config user.name 名字
      • git config user.email 用户email
    • 系统用户级别(操作系统用户下的级别)
      • git config -global user.name 名字
      • git config -global user.email 用户email
    • 优先级:项目级别优先于系统用户级别;如果只有系统用户级别,才采用系统用户级别,否则采用项目级别;不允许二者都没有的情况。
    • 用户名和email保存位置:
      • 项目级别:.git/config;
      • 系统用户级别:用户家目录下.gitconfig

命令

  • git status:查看状态

  • git add:将工作目录文件提交到暂存区

  • git rm --cached ...:将文件从暂存区移除

  • git commit:从暂存区提交到本地库(会进入VIM编辑器,要求输入提交的信息)

    • git commit -m "消息" :-m命令可不用进入vim编辑器
  • git checkout -- ...:撤销当前修改

  • git reset HEAD ...:

  • git log:查看提交日志

    • git log --pretty=oneline:每个记录显示一行
    • git log --oneline:显示更加简洁
    • git reflog:会显示指针移动到指定版本的步数
      • 多屏显示控制方式

        • 空格:向下翻译
        • b:向上翻页
        • q:退出
  • 版本前进后退

    • 基于索引值操作

      • git reset --head <版本索引>
    • 使用^符号:只能后退
      • git reset --hard HEAD^:往后退一步
      • git reset --head HEAD^^:后退两步
    • 使用~符号:只能后退
      • git reset --hard HEAD~n:后退n步
  • git help [命令]:查看某个命令帮助

  • git reset 参数对比

    • --soft参数:不会碰暂存区和工作区,仅仅是在本地库移动HEAD指针
    • --mixed参数:移动本地库HEAD指针,会重置暂存区,不会碰工作区,
    • --hard参数:移动本地库HEAD指针,会重置暂存区和工作区
  • 删除文件后找回

    • 使用git reset --hard [版本索引] 命令退回到之前的历史版本
    • 删除记录在暂存区没有提交到本地库,可以使用git reset --hard HEAD找回删除文件
  • 比较文件差异

    • git diff [文件名]命令:无参数时,工作区与暂存区比较。
    • git diff HEAD [文件名]:工作区与本地库对应的文件进行比较。
    • 不带文件名,则可比较多个文件。

git分支

什么是分支

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

分支举例

  • master:主分支
  • feature_blue:blue分支
  • feature_red:red分支
  • hot_fix:热修复分支
graph LR
master-->masterV1
feature_blue-->feature_blueV1
feature_red-->feature_redV1
feature_redV1-->feature_redV2
feature_blueV1-->masterV1
hot_fix-->masterV2
masterV1-->masterV2
masterV2-->masterV3
feature_redV2-->masterV3

分支的好处

  • 同时并行推进开发多个功能,提高开发效率
  • 各个分支开发过程中,互不影响,一个分支开发失败,删除重新开始即可

命令

  • git branch -v:查看所有分支
  • git branch [分支名]:创建分支
  • git checkout [分支名]:切换分支
  • 合并分支:
    • 第一步:git checkout [被合并分支名](切换到被合并的分支)
    • 第二步:git merge [指定要合并到此分支的分支名字]
  • 解决分支冲突:
    • 手动合并(修改文件,选择合并哪个)->git add [file]->git commit

      注意:git commit命令后不可带文件名

Git基本原理

哈希

  • 加密算法,将明文加密为密文:
graph LR
明文--加密算法-->密文
  • 特点:

    1.不管输入数据量多大,使用同一个加密算法,所得到的加密结果长度固定。

    2.输入数据是确定的,输出数据也是确定的。

    3.输入数据有细微的变化,输出数据也会有变化。

    4.哈希算法不可逆。

Git的文件管理机制

  • 通过快照的方式进行,每个版本有一个快照,重复的文件有个指针指向前面的文件。
  • 每个文件会有一个哈希值。

Git分支管理机制

  • 新建一个分支:新建一个指针指向之前的版本,而不是拷贝整个工程。
  • 切换分支:切换指针来切换到对应分支。

    学习视频 B站视频:https://www.bilibili.com/video/BV1pW411A7a5 笔记

Git、Github习笔记01——Git本地仓库的更多相关文章

  1. 【Git/GitHub学习笔记】基本操作——创建仓库,本地、远程同步等

    近日想分享一些文件,但是用度盘又太麻烦了(速度也很恶心).所以突发奇想去研究了下GitHub的仓库,这篇文章也就是一个最最最基础的基本操作.基本实现了可以在GitHub上存储文本信息与代码. 由于我的 ...

  2. git操作-如何把你的本地仓库放到GitHub已有仓库

    本地: 首先在你的本地git init 初始化一个仓库,然后git add . 将所有的文件都打包到仓库中,git -commit -m "first_commit" 此时是没有什 ...

  3. 初学git(一):创建本地“仓库”

    初学git(一):创建本地“仓库” 作为一个初学者,我是跟着廖学峰老师的官方博客学习,这里只是做个笔记,哈哈,关于git的历史.和其他版本控制的对比啥的,我就不说了.另外,我这里用的是Mac OS X ...

  4. git/github学习笔记

    郑重提示,本文来自这里,如果喜欢,请关注原作者. 1. git 版本控制系统 相比CVS\SVN优势: - 支持离线开发,离线Repository- 强大的分支功能,适合多个独立开发者协作- 速度块 ...

  5. git的学习笔记(二):git远程操作

    1.创建ssh key ssh-keygen -t rsa -C "your_email@example.com" 执行命令后会在用户的家目录生成.ssh的隐藏文件夹,文件夹里有公 ...

  6. failed to push some refs to 'git@github.com:RocsSun/mytest.git

    Git推送到GitHub仓库失败 使用Git将文件推送至GitHub的远程仓库时,报错failed to push some refs to 'git@github.com:RocsSun/mytes ...

  7. failed to push some refs to 'git@github.com:cq1415583094/MyBatis.git'解决办法

    将本地git仓库代码提交到GitHub上时,出现failed to push some refs to 'git@github.com:cq1415583094/MyBatis.git', 导致的原因 ...

  8. [git/GitHub] git push 时报错:fatal: remote error: You can't push to git://github.com/user/xxx.git(已解决)

    当使用  git push  时,提示以下错误: fatal: remote error: You can't push to git://github.com/user/xxx.git Use ht ...

  9. failed to push some refs to 'git@github.com:xxx/xxx.git' 解决方法

    此时很多人会尝试下面的命令把当前分支代码上传到master分支上. $ git push -u origin master 但依然没能解决问题 会出现: failed to push some ref ...

随机推荐

  1. centos7 —— 网络连接问题

    今天用虚拟机(VM)安装好centos7后,发现无法连接网络,百思不得其解: 第一步:找到需要修改的文件位置,查明原因 #.查看网络是否可以ping通 ~ ping www.baidu.com #.查 ...

  2. SpringCloud(四)学习笔记之Feign

    Feign是一个声明式的Web服务客户端,可帮助我们更加便捷.优雅地调用HTTP API Feign可以与Eureka和Ribbon组合使用以支持负载均衡 一.构建Eureka Server [基于第 ...

  3. 理解java容器底层原理--手动实现LinkedList

    Node java 中的 LIinkedList 的数据结构是链表,而链表中每一个元素是节点. 我们先定义一下节点: package com.xzlf.collection; public class ...

  4. 使用JAVA API编程实现简易Habse操作

    使用JAVA API编程实现下面内容: 1.创建<王者荣耀>游戏玩家信息表gamer,包含列族personalInfo(个人信息).recordInfo(战绩信息).assetsInfo( ...

  5. 前端基础进阶(七)-前端工程师最容易出错的问题-this关键字

    我们在学习JavaScript的时候,因为对一些概念不是很清楚,但是又会通过一些简洁的方式把它给记下来,那么这样自己记下来的概念和真正的概念产生了很强的偏差. 当然,还有一些以为这个是对的,还会把它发 ...

  6. Ubuntu安装Python3.8及新特性

    Ubuntu安装Python3.8.0a4 如果你想体验一下,请用虚拟机(感受一下就行,别当真). 新特性(整体来说,有三点特别需要注意一下) 海象运算符 # python3.7 a = '123' ...

  7. B站百大UP主党妹被黑客勒索!!!

    4月27日,哔哩哔哩视频网站的UP主“机智的党妹”发布消息称,自己被黑客勒索了.她的视频表示:“事发突然,我被勒索了,你也有可能继续被诈骗!这种诈骗的页面是由病毒程序自动生成并留在那里的.”根据她的介 ...

  8. php里的闭包函数

    一个匿名函数内要获取外部的变量必须要使用use: $message = 'hello'; $example = function() use ($message){ var_dump($message ...

  9. Hadoop学习笔记(一)——安装与配置

    操作系统:Ubuntu 15.04; Hadoop version: 2.6.4 参考文献: Ubuntu上搭建Hadoop环境(单机模式+伪分布模式)

  10. vue父组件向子组件传对象,不实时更新解决

    vue报错:void mutating a prop directly since the value will be overwritten whenever the parent componen ...