原来Git及GitHub是这样的

Posted ZZZ --- jh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原来Git及GitHub是这样的相关的知识,希望对你有一定的参考价值。

Git及GitHub

reset命令的三个参数hard和soft以及mixed的对比

  1. –soft参数

    • 仅仅在本地移动HEAD指针
  2. –mixed参数

    • 在本地库移动HEAD指针
    • 重置暂存区
  3. –hard参数

    • 在本地库移动HEAD指针
    • 重置暂存区
    • 重置工作区

删除文件并找回

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

比较文件

  1. git diff[文件名]
    将工作区中的文件和暂存区进行比较
    比如: git diff b.txt

  2. git diff[本地库中历史版本][文件名]
    将工作区中的文件和本地库历史记录比较
    eg: git diff HEAD^ b.txt

  3. 不带文件名比较多个文件
    eg: git diff HEAD


分支管理

  1. 概念

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

  2. 好处

    1. 同时并行推进多个功能开发, 提高开发效率
    2. 各个分支在开发过程中, 如果某一个分支开发失败, 不会对其他分支有任何影响. 失败的分支删除重新开始即可.
  3. 操作

    • 创建分支: git branch[分支名]

      eg:git branch hot_fix

    • 查看分支: git branch -v

    • 切换分支: git checkout[分支名]

      eg: git checkout hot_fix(按tab键也可以直接补全分支名)

      批注: git checkout -b 分支名 新建并切换到这个分支

    • 合并分支

      第一步: 切换到接受修改的分支(被合并,增加新内容)上 git checkout [被合并的分支名]

      第二步: 执行merge命令 git merge [有新内容的分支名]

    • 解决冲突

      -冲突的表现:

      -冲突的解决:

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

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

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

      ​ 第四步: git commit -m 日志信息(此时commit一定不能带具体的文件名)


Git基本原理 – 哈希

​ 哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下几个共同点:

  • 不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定;

  • 哈希算法确定,输入数据确定,输出数据能够保证不变;

  • 哈希算法确定,输入数据有变,输出数据一定有变化,而且通常变化很大;

  • 哈希算法不可逆

    Git底层采用的是SHA-1算法

    哈希算法可以被用来验证文件。原理如下图所示:


Git保存版本的机制

  1. 集中式版本控制工具的文件管理机制

    以文件变更列表的方式存储信息. 这类系统将它们保存的信息看作是一组基本文件和每个文件随时累积的差异.

  2. Git的文件管理机制

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

  3. Git文件管理机制细节

    git的"提交对象"; 提交对象及其父对象形成的链条.


GitHub

官网:https://github.com/

创建github账号

  1. name
  2. email(必须真实的, 发邮:重置密码 长时间不登录的话需要发送登录验证码)

创建一个github公共仓库

  1. 勾选readme
  2. 不勾选readme

​ 推送协议:

  1. https : 以这种方式推送服务器, 定期推送需要输入账号和密码

  2. ssh : 非对称钥对(私钥:本地; 公钥:用户,github仓库) 建议

    配置私钥和公钥:

    (1). 本地执行 ssh-keygen -t rsa 生成公钥私钥;

    ​ 用户家目录下生成.ssh/

    ​ .ssh/

    ​ id_rsa --> 私钥

    ​ id_rsa.pub --> 公钥

    (2). 将公钥配置到github 用户下,以后本地和github账户下的人一个仓库都可以免密钥登录


不勾选readme创建仓库, 本地链接远程仓库

​ //ssh

echo "# test1" >> README.md

git init

git add README.md

git commit -m "first commit"

git branch -M master

git remote add origin git@github.com:XuanqiYan/test1.git

git push -u origin master:master (-u: 将本地的master 和远程 master 建立关联 并缓存)


创建远程库地址别名

git remote -v 查看当前所有远程地址别名

git remote add [别名] [远程地址]


推送push

git push [别名] [分支名]


克隆clone

git clone [远程地址]

git clone -b [分支] [远程地址] —> 当要克隆别人的文件,其中文件有好多分支,就用这个命令


拉取pull

git pull

相当于git fetch(拉取) + git merge(合并)


注意:

  • 解决冲突中git commit -m 日志信息(此时commit一定不能带具体的文件名)
  • ssh推送协议需要配置公钥私钥

总结:

  • 告诉用户你现在所处的位置: pwd

  • 查看文件夹里面的文件: ls (例如: txt,html,js,…)

  • 清屏: clear

  • 查看文件夹里面的文件以及隐藏的文件: ls -a

    linux中以.开头的文件就是隐藏文件 ./ …/ .git

  • 以长格式查看文件和文件夹: ls -l或者ll

  • 查看.git目录里面的东西: ll .git/

  • 查看文件里面写的内容: cat 文件

  • 强制删除文件夹及文件(不能在当前文件夹下删除当前文件夹): rm -rf 文件夹名

  • 查看当前所有远程地址别名: git remote -v 或者 git remote add [别名] [远程地址]

  • 推送: git push [别名] [分支名]

  • 克隆: git clone [远程地址] 或者 git clone -b [分支] [远程地址]

  • 拉取: git pull

以上是关于原来Git及GitHub是这样的的主要内容,如果未能解决你的问题,请参考以下文章

git和github

git与github区别与简介

git基础命令

Git配置免密登录及常用操作的详细教程(基于Gitee平台)

vscode对git的配置及提交到github

Git学习笔记 --- --- git的安装及本地仓库的创建,github上仓库的连接方式