zoukankan      html  css  js  c++  java
  • git原理教程

    本篇文章主要是参考廖雪峰写的教程

    1 git介绍

    • windows安装git需要从下载地址下载安装
    • 安装完git之后右键运行git bash
    • 因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址
    git config --global user.name "Your Name"
    git config --global user.email "email@example.com"
    
    注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,
    当然也可以对某个仓库指定不同的用户名和Email地址。
    

    2 创建版本库

    什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

    • 通过git init命令把这个目录变成Git可以管理的仓库:
    git init
    
    Initialized empty Git repository in E:/gitdemo/.git/
    
    

    瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的

    • 这个时候我们可以在gitdemo文件夹下面创建一个readme.md文件
    • 然后通过下面两个命令添加到git仓库
    git add . // 把该文件夹下面的所有文件添加到暂存区
    
    git commit -m "第一次添加readme.md" // 暂存区的所有文件提交到仓库 -m 表示提交的说明
    
    

    3 时光穿梭机

    3.1 版本回退,前进

    Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失

    • 命令
    git log
    
    查看历时版本信息,注意的是这个命令只可以查看到当前版本以及之前的版本信息
    
    
    • 效果

    image

    • 如上图所示,通过git log命令查询所有的版本信息,分别为第一次提交,第二次提交,这个时候我们在第二次提交的版本上面,如果我们想回退到第一次提交的版本使用下面的命令
    git reset --hard 20b24 // 回退到commit版本为20b24的版本
    或者使用
    
    git reset --hard head ^ // head代表当前版本,^ 代表回到当前版本的上一个版本,以此类推,^^ 代表回到上上个版本
    
    
    

    这个时候小伙伴们可以发现一个问题,加入我现在后悔回到上一个版本,那我们怎么办,好比说我穿越到清朝,但是我又想回到现在可怎么办

    这个时候

    git log
    

    已经展示不出21世纪的通道了,那怎么办呢

    我们可以使用

    git reflog
    

    找到这个通道

    • 命令
    git reflog
    
    

    image

    这个时候我们可以找到commit的id了,通过

    git reset --hard 20b24
    

    回到21世纪了

    总结
    
    
    HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
    
    穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
    
    
    要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
    

    3.2 工作区和暂存区的概念

    • 工作区:就是你电脑里面可以看见的目录,比如testgit这个文件夹
    • 版本库:工作区里面存在一个.git的隐藏文件夹,这就是版本库

    git 版本库中存在很多东西,最重要的就是存在一个暂存区stage,git为我们创建的一个master分支,指向master的head的指针

    • 图解

    image

    git往版本库提交是分两个步骤的

    1.git add 提交到暂存区

    image

    2.git commit 把暂存区的内存提交到当前的分支

    image

    3.3 管理修改

    言简意赅一句话,如果修改不被添加到暂存区,直接进行commit,那么这个修改不会被添加到当前的版本库中的

    3.4 撤销修改

    修改可以分为三种情况的修改:

    1. 修改了工作区间的文件,但是没有add,没有添加到暂存区
    2. 修改了工作区间的文件,并且进行了add添加到了暂存区
    3. 修改了暂存区的文件,并且进行了add和commit

    解决办法

    场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时

    git checkout -- filename // 撤销某一个文件
    
    git checkout -- . // 撤销所有的文件
    
    

    场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步

    第一步用命令
    
    git reset head filename 就回到了场景1
    
    第二步按场景1操作
    
    
    

    场景3: 已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库

    git reset --hard 20b24 // 回退到某个版本
    

    3.5 删除文件

    在git 中删除也是管理操作

    下面的命令不是从工作区间删除!!

    git rm fileName // 从暂存区或者版本库删除文件
    
    
    rm filename // 从工作区间删除
    

    这里面需要注意的就是,从工作区间删除,从版本库删除的概念

    4 远程仓库

    到目前为止,我们已经在本地使用了仓库,但是现在存在一个问题,如果我们的电脑坏了,那我们保存的代码不就是没了吗?

    如果别人想用你的代码还必须等到你的电脑开机才可以

    这样就太麻烦了啊,这个时候我们可以在一台服务器上面,例如阿里云上面搭建

    4.1 Github

    第1步

    创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,
    可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

    ssh-keygen -t rsa -C "youremail@example.com"
    
    
    

    如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

    第2步

    登陆GitHub,打开“Account settings”,“SSH Keys”页面:

    然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

    点“Add Key”,你就应该看到已经添加的Key:

    为什么使用SSH

    因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

    当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

    4.2 添加远程仓库

    现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举多得;

    • 首先你得在github上面创建一个仓库,当你创建好了之后,一些必要的命令是出现在下方的文档上面的

    image

    • 打开本地的仓库,进行关联
    git remote add origin git@github.com:zhaodi0803/testgit.git
    
    • 推送

    由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

    git push origin master
    

    4.3 从远程仓库克隆

    要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。

    Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

    git clone git@github.com:zhaodi0803/testgit2.git
    

    5 分支管理

    一个小小的程序员
  • 相关阅读:
    Epic OA Day2 2014/11/7
    LeetCode day15 2014/11/3
    LeetCode day14 2014/11/2
    Bluetooth BQB PTS(Profile Tuning Suite)
    音频编码:ADPCM
    软件推荐 : USB Over Network
    IOS的BLE蓝牙连接参数限制
    python pyinstaller
    QCC3003x BLE 设置私有地址
    QCC300x UART
  • 原文地址:https://www.cnblogs.com/zhaod/p/8539078.html
Copyright © 2011-2022 走看看