zoukankan      html  css  js  c++  java
  • git使用

    https://git-scm.com/book/zh/v2

    三种状态

    好,请注意。 如果你希望后面的学习更顺利,记住下面这些关于 Git 的概念。 Git 有三种状态,你的文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。 已提交表示数据已经安全的保存在本地数据库中。 已修改表示修改了文件,但还没保存到数据库中。 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

    由此引入 Git 项目的三个工作区域的概念:Git 仓库、工作目录以及暂存区域。

    git初始化

    安装-----Google it

    为每一台电脑配置身份信息

    $ git config --global user.name "Your Name"
    $ git config --global user.email "email@example.com"
    把某个目录变成可以让git管理到的目录(创建版本库)
    git init
    git基本命令
    #把内容输入到一个文件
    echo "xxxx" > xxxx
    #把工作空间的某个文件添加到cache
    git add xxxx
    #把工作空间的所有内容添加到cache
    git add -A
    #把cache当中的某个文件提交到本地库
    git commit -m "xxxx"
    #all
    git commit -am "xxxx"
    #cache ---->work file恢复一个文件 file1 file2 恢复两个文件  .恢复所有文件
    git checkout readme.txt
    #git状态查询
    git status
    #查看不同的地方 默认查看工作区和cache
    #git diff --cached 比较cache和Repository
    #git diff HEAD 工作区和最新的Resository
    #git diff commit-id 工作区和制定的repository
    #git diff --cached commit-id
    #git diff --commit-id commit-id
    git diff
    #reset 顾名思义 (HEAD~100)
    git reset HEAD^
    #git的日志
    git log git log --pretty=oneline
    #oh my pretty pretty boy i love you
    git reflog 查看历史命令
    #git rm --cached file_path
    git rm
    git mv
    #远程仓库的克隆岛本地库
    git clone
    #关联远程仓库
    git remote add
    #推送到远程仓库
    git push
    #拉取远程仓库的内容
    git pull
    #查看当前分支 -a查看所有分支 -av 查看所有分支的信息 -avv 查看所有分支的信息和关系
    git branch
    #创建一个分支 基于当前分支创建分支
    git branch xxx
    #基于oldType创建分支
    git branch newBranch oldType
    #切换分支
    git checkout 分支的名字
    #删除分支
    git branch -d xxx
    #查看文件内容
    git cat-file -p commitid
    #查看对象类型 blob commit tree
    git cat-file -t commitid
     
    github
    1. $ ssh-keygen -t rsa -C "email" //public key for push
    1.  git remote add nickName gitUrl // conn remote
    1. git push -u remoteBranch localBranch
    分支

    查看分支

    创建分支

    基于当前分支创积分分支
    基于远程分支创建分支
    基于新分支创建分支
    基于提交创建分支
     
    其实都是基于commit创建分支

    合并分支

    一定要切换到被合并的分支上去合并

    比如说A要合并A1

    那么先要切换到A1,然后在A1上面执行merge

    git原理

    find .get/objects -type f 查询object是下面所有的文件

    git hash-object -w xxx 放到git数据库并且返回hash值 add操作?

    git 对象

    1. Blob 对象
    存储的是文件内容,压缩的
    文件名字是根据内容算出的一个hash值
    1. tree对象
    blob对象
    子tree对象
    1. commit对象
    作者提交者注释
    指向一个 tree 的指针

    首次提交,提交一个简单的文件 a.txt ,commit 之后的图如下

    如图所示,生成了 3 个对象,一个 commit 对象,一个 tree 对象,一个 blob 对象。图上蓝底是 commit 对象,灰底的是 tree 对象,白底的是 blob 对象,每个对象节点的标题是对象的 key (SHA 摘要)缩略表示。 对于 commit 对象,tree 内容表示这个 commit 对应根目录的 tree 对象,parent 表示父 commit 节点,通常commit 只有一个父节点,也可能没有(首次提交时 parent 为空),也可能有多个(合并节点),commit 对象还保存了 commit message 等信息。 对于 tree 对象,里面的内容包含了文件名,文件对应的 blob 对象的 key,或者是目录名和目录对应 tree 对象的 key。 对于 blob 对象,表示一个实际文件对象的内容,但不包括文件名,文件名是在 tree 对象里存的。

    通过 git log 命令获取最新 commit 的 key

    通过 git cat-file -p <object key> 获取 key 对应 object 的内容,根据 object 里的内容,继续探索,就可以访问到所有关联 object.

     

     

    HEAD 为什么要通过 refs/heads/master 中转一下,而不是直接指向 master 分支的提交?

    每个分支的头指针都指向该分支的最新提交
    但是此时出现一个 dev 分支,刚从 master 检出,头指针和 master 相同,HEAD直接指向提交的话,怎么知道,当前工作分支是 master 还是 dev 呢?

    HEAD 可以直接指向提交吗?

    但是会进入一种特殊的状态 detached HEAD。
    detached HEAD,游离的 HEAD 指针。
    使用 git checkout <commit id> 成功的进入了
    detached HEAD 状态:
     
    得出结论,当 HEAD 指针直接指向提交时,就会导致 detached HEAD 状态。在这个状态下,如果创建了新提交,新提交不属于任何分支。相对应的,现存的所有分支也不会受 detached HEAD 状态提交的影响
    example:
    排查问题的时候,checkout 到怀疑的 commit 点上去做些测试,detached HEAD会保护你的现有分支不受影响,测试完了不想保存直接 checkout 到其他地方,可以放弃修改。想保存修改,可以创建一个 git checkout -b <new-branch-name> 新分支保存
     

    分支指针切换

    远程仓库

    基于文件共享(nfs)

    linux ssh

    装好git yum install git

    git地址:username@ip:/dir

    密码

    gitlab

    https://about.gitlab.com/installation/#centos-7

    传上去

    gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm

    安装 rpm -ivh /home/tools/gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm

    sudo gitlab-ctl reconfigure 时间很少8-10分钟

     gitlab-ctl start 启动gitlab

    访问gitlab http://ip:port

    设置密码

    对git与svn进行区别总结:svn是对文件的一个操作,而git是对元数据的操作。如果是两个文件一模一样,但是名字不一样,对于svn来说会存储两个文件,但是对于git来说是两条分支(commit对象指向tree对象再指向blob对象)

    路神:https://shimo.im/docs/ERE3UoWQa2gwH20w/read  

  • 相关阅读:
    计算两个日期相差的天数
    获取当前星期几
    window下重置mysql用户密码
    window下安装mysql
    oracle用户密码过期如何处理?
    awk
    RunLoop
    通知中心
    KVO
    多线程
  • 原文地址:https://www.cnblogs.com/gnwzj/p/10747240.html
Copyright © 2011-2022 走看看