Git - 图1

简介及安装

分布式的版本控制系统在服务器断网的情况下也可以进行开发(因为版本控制是在本地库进行的,本地库就是PC的磁盘)。每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
Git中可以直接使用Linux命令
image.png

工作机制
Git底层是c语言,所以版本控制用到的是指针。Git不会把目标文件复制多份,它就在一个文件上进行版本控制,在一个文件上修改,并记录每一次修改后的状态。
image.png
工作区:通过写好的代码,放在了磁盘区,不是特指编译器中的代码

临时存储(缓冲区,暂存区):通过工作区git add放到此处

本地库:通过临时存储的git commit放到此处,一旦代码提交到了本地库,随之就会生成对应的历史版本,只要项目还在这一版本上修改,此次修改操作将被永远存储。一个个版本像是千层饼,每次版本的更新都要基于前版本,所以前面版本无法单独删除。

远程库:通过本地库上传到远程库,代码托管中心是基于网络服务器的远程代码仓库

安装
Git软件在本地的具体安装步骤


常用命令及其详解

命令名称 作用
git config —global user.name 用户名 设置用户签名
git config —global user.email 邮箱 设置用户签名
git init 初始化本地库
git status 查看本地库状态
git add 文件名 添加到暂存区
git commit -m “日志信息” 文件名 提交到本地库
git reflog 查看历史记录
git reset —hard 版本号 版本穿梭

设置用户签名

image.png
签名的作用是区分不同操作者身份,以此确认本次提交是谁做的
image.png
这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系

初始化本地库

通过使用命令git init
初始化之后会生成一个隐藏文件:.git
clone下来的代码库,自动生成.git文件
image.png

查看本地库状态

通过git status,首次查看与有文件提交时不一样的
首次查看
image.png
新增文件hello.txt,对其内容进行书写,之后再次查看是不一样的状态
image.png
此处的文件还是红色的,说明还没提交到缓存区,如果提交到缓存区就会变成绿色

添加,删除缓存区

通过git add 文件名,具体命令大致如下:
添加hello.txt之后,再查看当前status,则此文件已从红色转为绿色
image.png
如果要删除文件,通过rm进行删除,但是删除的只是缓存区。通过ll还可查看到存在
image.png
而且通过查看其状态的时候:git status发现为红色
image.png
再次将其添加为添加到缓存区中,再次查看status,文件又转为绿色。所以此处的删除只是删除缓冲区文件
image.png

提交本地库

通过git commit -m “日志信息” 文件名,同时形成了一个历史版本
通过其git status也可看出其不同,而且查看日志也可看出版本更新
image.png

历史版本

git reflog 查看版本信息,此处显示的精简信息,显示版本号前7位
git log 查看版本详细信息
image.png

版本穿梭

本身默认查看使用cat 的时候,是最新版本
如果要穿梭到之前的版本,则需要通过git reset —hard 版本号
其日志的版本号,简易复杂版本的号字段有些不同
之后查看cat只是显示之前的版本6a145011564a44a5862a7cb423394527.png
查看其之前(前一个)的版本
image.png
Git 切换版本,底层其实是移动的 HEAD 指针

Git分支操作

之前的操作都是在一个分支上进行,下面进行多个分支管理。在实际生产中可以有test分支,dev分支,run分支等。在dev分支上的修改,不影响run分支上的运行。
image.png
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行(分支的底层也是指针的使用)

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

分支常用命令及详解

命令名称 作用
git branch 分支名 创建分支
git branch -v 查看分支
git checkout 分支名 切换分支
git merge 分支名 把指定的分支合并到当前分支上

查看分支状态可以通过git branch -v
image.png
创建分支git branch 分支名
*表示当前的分支路径
image.png
切换分支git checkout 分支名
image.png

整合冲突

如果要在同一个部位修改数据,则使用git merge 分支名,新数据(分支2的数据)会直接进行覆盖旧数据(分支1的数据),达到合并分支目的。注意若要把分支2合并到分支1上,则此时要定位于分支1上。
image.png
如果是不同部位进行修改,系统无法判断哪一个数据才是真的,必须人为进行修改数据,之后再提交到缓存区,再提交到本地库(本地库不能带文件名,不然有歧义识别不出来哪一个)
使用命令git commit -m “merge ss”(不用文件名)
举例:当分支1修改a.txt的倒数第一行,分支2修改a.txt的倒数第二行,那么合并的时候就出现了这个问题
image.png
具体创建分支的原理是
当前所在的分支,其实是由 HEAD 决定的。所以创建分支的本质就是多创建一个指针

GitHub 操作

远程仓库命令

命令名称 作用
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址 起别名(之后就使用别名对远程库进行操作,也可以不用别名用仓库地址)
git push 别名 分支 推送本地分支上的内容到远程仓库
git clone 远程地址 将远程仓库的内容克隆到本地
git pull 远程库地址别名 远程分支名 将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并

开代理后,出现443time out
image.png
取消代理
git config —global —unset http.proxy
git config —global —unset https.proxy


本地库和远程库进行关联: git remote add 别名 远程地址
image.png
推送的最小单位是分支,一次推送会把分支上所有修改的文件进行更新
image.png
拉取,把远程库已修改但本地未修改的文件拉取下来:git remote add 别名 远程地址
当pull的文件在本地库已经存在,若是同一地方修改,则要手动保存,在commit,注意此时不加文件名
image.png

clone到本地库
image.png


ssh免密登录
image.png
image.png
image.png

添加合作者,给其操作仓库的权限
image.png
跨团队合作
远程库之间的操作
注:pull request是请求拉取,让对方对自己修改的代码进行审核,然后确定是否要拉取这段代码
image.png


IDEA 集成 Git

image.png

IDEA集成GitHub

  • IDEA会默认生成ignore文件

image.png
从github克隆到本地
image.png
IDEA自动add到缓冲区,下面是几个相应的操作及功能区
image.png
image.png