博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Git 教程看这一篇就够了
阅读量:2453 次
发布时间:2019-05-10

本文共 4495 字,大约阅读时间需要 14 分钟。

基础杂项

Git基础概念

* 客户端并不只是提取最新版本的文件快照,而是把代码仓库完整的镜像下来* git核心本质上是一个键值对数据库。可以向该数据库插入任意类型的内容,他会返回一个键值,通过该值可以在任意时刻再次检索该内容。

区域&对象

区域

* 工作区 (沙箱环境 git不会管理 随便更改操作)​git add​* 暂存区  (记录文件的操作)​git commit ​* 版本库   (最终的代码实现提交到这里 .git目录就是版本库)

对象

* Git对象    - echo "hello" | git hash-object --stdin      - 这句命令返回一个hash值用来标识这句话 但是并没有写到数据库中       - 内容不一样对应的hash值不一样​    - echo "hello" | git hash-object -w --stdin     - 这句命令返回一个hash值用来标识这句话 并写到数据库中       - 查看有没有存在 可以通过 find ./ -type f 找对应hash的文件     - 里面的内容是压缩的 通过 git cat-file -p hash注意前面的那两个字母也加上     - git cat-file -t hash 查看git对象的类型 blob​    - 将新创建的文件添加到git数据库中即生成一个git对象     - git hash-object -w ./a.txt​    - 如果文件更改git数据库里面不会自动的添加要手动添加过去 这时会在添加一个git对象     - git hash-object -w ./a.txt        - 实质上Git对象是一个KYE:VALUE hash/value        - git对象不能当作项目的一次快照 只是组成项目的一部分​    - 存在的问题?     - 记住文件的每一个(版本)对应的hash值并不现实     - 在git中,文件名并没有被保存,只能通过hash​    - 注意:此时的操作只是针对本地数据库进行操作,不涉及暂存区。​​* 树对象    * 树对象能够解决文件名保存的问题,也允许我们将多个文件组织到一起。​    * 构建树对象     - git update-index --add --cacheinfo 100644 915c628f360b2d8c3edbe1ac65cf575b69029b61 test.txt     - 文件模式为100644 表明这是一个普通文件     - 文件模式为100755 表明这是一个可执行文件     - 文件模式为120000 表明这是一个符号连接     -  --add 因为此前该文件并没有在暂存区中 首次要加add     -  --cacheinfo 因为要添加的文件在git数据库中,没有位于当前目录下​    * 暂存区做一个快照生成一个对象放到git数据库中     - git write-tree        对象类型是一个树对象        树对象里面的内容是暂存区的快照(项目的快照)    * 暂存区中文件名字不变 如果改变文件的内容,就会重新生成一个hash​    * 存在的问题?     - 不知道hash值对应的是哪一个版本     - 不知道这个版本的一些基础信息    ​* 提交对象        - 提交对象完美的解决了上面的问题    - 本质就是给树对象做一层包裹包含项目的基础信息    - commit-tree创建一个提交对象,为此需要指定一个树对象的hash值,以及该提交的父提交对象      - echo "second commit" | git commit-tree     019fb2c522b604cd94929085bbac93d60e2f2063 -p  d248eb19a125c​    - 真正代表一个项目的是一个提交对象(数据和基本信息)这是一个链式的!!

基础Linux命令

* clear 清除屏幕* echo 'hello word '>test.tet 命令台书写内容* ll 将当前目录下的子目录展现出来* find ./ 将当前目录下的子目录以及文件也展现出来* find ./ -type f 只讲文件展现出来* rm text.txt 删除文件* MV a.txt b.txt 更名字* cat a.txt 查看文件内容* vim a.txt 编辑内容 i 插入 ese : wq 保存退出 :set nu 设置行号 q! 强制退出不保存

.git目录下文件的介绍

* hooks (钩子函数的一个库 类似于回调函数)* info (包含一个全局性的排除文件)* objects (目录存储所有数据内容)* refs (目录存储指向数据(分支)的提交对象的指针)* config (文件包含项目特有的配置选项)* description (显示对仓库的描述信息)* HEAD (文件目前被检出的分支)* logs (日志信息)* index (文件保存暂存区的信息)

Git命令

1. 初始化本地仓库

git init# 会在目录中生成.git隐藏文件夹,存放本地库相关的子目录和文件,不要随意修改删除

2. 设置签名

目的:区分不同开发人员的身份

可以设置两种不同的级别:项目级别、系统用户级别。项目级别>系统用户级别

# 设置项目级别git config user.name xxxgit config user.email xxx@xx.com# 设置系统用户级别git config --global user.name xxxgit config --global user.email xxx@xx.com

信息保存位置

项目级别:.git/config 文件中的 [user]节点中

系统用户级别:~/.gitconfig 文件中的 [user]节点中

3. 基本操作

1. 状态查看

git status

可以查看工作区、暂存区的状态

2. 添加操作

git add [file name]

将工作区的“新建/修改”添加到暂存器

取消(删除)添加操作

git rm --cached [file name]

3. 提交操作

git commit  -m "commit message" [file name]

将暂存区的内容提交到本地库

4. 查看历史记录

# 查看所有提交完整记录git log# 简洁方式显示git log --pretty=oneline# 更加简洁方式显示git log --oneline# 在--oneline 基础上增加了回退版本的步数git reflog

5. 版本控制

5.1 使用索引

配合git reflog命令一起使用

# 回退和前进版本git reset --hard [索引号]

5.2 使用^异或符号

注意:只能后退版本

# 一个^符号代表一个版本,git reset --hard HEAD^# 回退三个版本git reset --hard HEAD^^^

5.3使用~波浪线符号

注意:只能后退版本

# 后退三个版本git reset --hard HEAD~3

5.3 reset命令三个参数对比

  • --soft 参数

    • 仅仅在本地库移动HEAD指针(文件不会做修改)

  • --mixed参数

    • 在本地库移动HEAD指针

    • 重置暂存区

  • --hard参数

    • 在本地库移动HEAD指针

    • 重置暂存区

    • 重置工作区

6. 恢复文件

通过提交的方式删除了某个文件,可以通过回退历史记录的方式来找回删除的文件

git reset --hard [未删除文件的索引号]

7. 比较文件差异

git diff

查看所有文件的差异

git diff [文件名]

默认比较暂存区

git diff [本地库励志版本] [文件名]

将工作区的文件和本地库历史记录比较

8. 分支管理

同时并行推进多个版本的开发,提高开发效率

各个分支开发过程都是独立,如果失败不会对其他分支造成影响

8.1 创建分支

git branch [分支名]

8.2 查看分支

git branch -v

8.3 切换分支

git checkout [分支名]

8.4 合并分支

第一步:切换到接受修改的分支上

git checkout [被合并分支名]

第二步:执行merge命令

git merge [新内容分支]

8.5 产生冲突

不同分支进行合并时,同文件修改会产生冲突

  1. 找到冲突的文件,编辑该文件,删除git特殊的符号

  1. 把文件修改成正确的,保存退出

  2. git add [文件名]

  3. git commit -m "日志信息"

    • 注意:此时commit一定不能带具体文件名

github团队协作

1. 创建远程库地址别名

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

2. 推送

git push [别名] [分支名]

3. 克隆

git clone [远程地址]

完整的把远程库下载到本地 创建 origin 远程地址别名 初始化本地库

4. 拉取

pull = fetch + merge

fetch:将远程库内容拉取到本地,但不修改工作区的内容

merge:合并分支操作

git fetch [远程库地址别名] [远程分支名]git merge [远程库地址别名/远程分支名]git pull [远程库地址别名] [远程分支名]

如果不是基于 GitHub 远程库的最新版所做的修改,不能推送,必须先拉取。

拉取下来后如果进入冲突状态,则按照“分支冲突解决”操作解决即可。

4. 跨团队协作

  1. 将远程代码fork一份到自己的仓库中

  2. 修改代码,推送到远程

  3. New pull request

  4. Create pull request

  5. 然后被fork端可以进行 merge pull request->Confirm merge

SSH登陆

  • 进入当前用户的家目录 cd ~

  • 删除.ssh 目录 rm -rvf .ssh

  • 运行命令生成.ssh 密钥目录 ssh-keygen -t rsa -C [注意:这里-C 这个参数是大写的 C]

  • 进入.ssh 目录查看文件列表 cd .ssh ls -lF

  • 查看 id_rsa.pub 文件内容

    cat id_rsa.pub

  • 复制 id_rsa.pub 文件内容,登录 GitHub,点击用户头像→Settings→SSH and GPG keys

  • New SSH Key

  • 输入复制的密钥信息

  • 回到 Git bash 创建远程地址别名 git remote add origin_ssh :xxxxx.git

  • 推送文件进行测试

转载地址:http://dqbhb.baihongyu.com/

你可能感兴趣的文章
raspberry pi_PiFlash入门:在Linux上启动Raspberry Pi
查看>>
固态硬盘损坏数据如何挽救_开放数据和工具如何在灾难期间挽救生命
查看>>
raspberry_您最老的Raspberry Pi多大了?
查看>>
vscode构建rust_使用rust-vmm构建未来的虚拟化堆栈
查看>>
joplin_介绍Joplin,这是Evernote的开源替代方案
查看>>
使用Pygame模块使用Python构建游戏框架
查看>>
如何使用PostgreSQL简化Python代码
查看>>
软件博览会上的致辞_本地制造商博览会上有4个著名的开源项目
查看>>
pygame游戏角色旋转_使用Pygame移动游戏角色
查看>>
为什么Python和Pygame是入门程序员的最佳选择
查看>>
上海微钉科技面试题_钉住面试的7个技巧
查看>>
linux有桌面有的没桌面_Linux桌面的政治
查看>>
库蒂尼奥_尼奥基入门
查看>>
强化学习入门论文_强化学习入门
查看>>
kubernetes入门_Kubernetes入门
查看>>
aalto 交互_向芬兰的Aalto Fablab付款
查看>>
迈向更大包容性
查看>>
linux 邮件开源工具_5个适用于Linux的开源个人理财工具
查看>>
机器学习入门python_使用Python进行机器学习入门
查看>>
kde调整分辨率_7个很酷的KDE调整将改变您的生活
查看>>