Git 详解

Git是分布式版本控制系统

1.安装Git

Git官网:https://git-scm.com/
相关工具:
命令行工具: Git for windows
下载地址:https://git-for-windows.github.io/
ijdea插件: idea自带
GitHub网站:http://www.github.com

具体安装步骤请自查

2.设置Git账户

命令含义
git config --list查看所有配置
git config --list --show-origin查看所有配置以及所在文件位置
git config --global user.name xxx设置git用户名
git config --global user.email xxx设置git邮箱
git init初始化本地库
git config core.autocrlf false取消换行符转换的 warning提醒

3.初始化
设置git用户名
设置git邮箱
①新建一个本地仓库,也就是一个文件夹
②执行git init命令
在这里插入图片描述
之后,可以看到,本地仓库中,多了一个.git的隐藏文件夹
.git文件中的东西不能更改

分区–》工作区,暂存区,本地仓库

  1. Git的工作区
    在当前仓库中,新增,更改,删除文件这些动作,都发生在工作区里面。

  2. Git的暂存区
    英文叫stage,或index。在版本库.git 目录下,有一个index文件。它实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。在这个虚拟工作区的目录树中,记录了文件名,文件的状态信息(时间戳,文件长度等),文件的内容并不存储其中,而是保存在Git对象库(.git/objects)中,文件索引建立了文件和对象库中对象实体之间的对应。如果当前仓库,有文件更新,并且使用git add命令,那么这些更新就会出现在暂存区中。

  3. 版本库
    当前仓库下,如果没有任何的提交,那么版本库就是对应上次提交后的内容。
    版本库与工作区和暂存区的关系:
    在这里插入图片描述
    "HEAD"实际是指向master分支的一个 “游标”。所以图示的命令中出现HEAD的地方可以用master来替换。图中的objects标识的区域为Git的对象库,实际位于 “.git/objects” 目录下,里面包含了创建的各种对象及内容。
    当对工作区修改(或新增)的文件执行 "git add"命令时,暂存区的目录数被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
    当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master分支指向的目录树所替换,但是工作区不受影响。
    当执行 “git rm -cached” 命令时,会直接从暂存区删除文件,工作区则不做出改变。
    当执行 "git checkout ."或者 "git checkout -"命令时,会用暂存区全部或指定的文件替换巩工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动

使用命令代表意义
git diff比较的是工作区和暂存区的差别
git diff -cached比较的是暂存区和版本库的差别
git diff HEAD可以查看工作区和版本库的差别

每次commit后,git diff -cached没有内容,是因为暂存区的内容已经更新到版本库中,因此暂存区和版本库中的内容无差别

git reset和git revert的区别
reset是重置,默认是git reset -mixed可以让版本库重置到某个commit状态,该commit之后的commit不会保留,并重置暂存区,但是不改变工作区。即这个时候,上次提交的内容在工作区中还会存在。

如果使用 git reset -hard将版本库,暂存区和工作区的内容全部重置为某个commit的状态。之前的commit不会保留。
revert比reset更加温柔一点,回滚到某次commit且该commit之后的提交记录都会保留,并且会在此基础上新建一个提交。对于已经push到服务器上的内容作回滚,推荐使用 revert。

命令作用
git status查看本地库的状态(git status -s 简化输出结果)
git add [file]多功能命令 : 1.开始跟踪新文件 2.把已跟踪的文件添加到暂存区 3.合并时把有冲突的文件标记为已解决状态
git commit -m “xxx” [ file]将暂存区的文件提交到本地库, --m 后面为修改的说明

在这里插入图片描述
4.忽略文件
一般我们总会有些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以创建一个名为 .gitignore的文件,列出要忽略的文件的模式。
一个.gitignore的案例:

#忽略所有的 .a 文件
 *.a
#但跟踪所有的lib.a,即便你在前面忽略了 .a文件
!lib.a
#只忽略当前目录下的TODO文件,而不忽略subdir/TODO.不递归的忽略
/TODO
#忽略任何目录下名为build的文件夹 递归的忽略
build/
#忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
#忽略 doc/目录及其所有子目录下的 .pdf文件
doc/**/*.pdf

5.常用命令

命令作用
git log以完整格式查看本地库状态(查看提交历史)
git log --pretty=oneline以单行模式查看本地库状态
git reset --hard HEAD^回退一个版本
git reset --hard HEAD~n回退N个版本
git reflog查看所有操作的历史记录 可以回到以前的版本
git reset --hard 【具体版本号,例如:1f9a527等】回到(回退和前进都行)指定版本号的版本
git checkout --[file]从本地库检出最新文件覆盖工作区的文件(文件还没有提交到暂存区,否则无效)
git reset【file】或者 git restore --staged [ file]从暂存区撤销文件
git restore【file】放弃在工作区的修改(还没有提交到暂存区)
git rm --cache 【file】撤销对文件的跟踪

注意:
1.在Git中任何已提交的东西几乎总是可以恢复的
2.任何你未提交的东西丢失后很可能再也找不到了

在这里插入图片描述
单独某个文件的回退
在这里插入图片描述
git checkout --a.txt (文件没有add,只是在暂存区才有效)

【删除操作】
如果删除一个已经在版本库中的文件!
①查看现存文件
在这里插入图片描述

②删除文档
在这里插入图片描述
此时查看,发现虽然在windows的文件系统中已经没有了:
在这里插入图片描述
但是,使用git status查看版本库的情况,发现:
在这里插入图片描述
提示,使用git add/rm命令来更新此次操作!
在这里插入图片描述
然后再执行,提交操作:
在这里插入图片描述
git status查看状态
在这里插入图片描述
此时才算真正的删除,要想恢复被删除的版本
执行以下操作就行
在这里插入图片描述
发现已经恢复了。

【比较文件】
减号和加号分别代表两个对比的文件!

  • 将工作区中的文件和暂存区进行比较
    $ git diff <-file>
    在这里插入图片描述
  • 将工作区中的文件和本地库当前版本进行比较
    $ git diff HEAD<-file>
    在这里插入图片描述
  • 查看暂存区和本地库最新提交版本的差别
    git diff --cached<-file>
    在这里插入图片描述
    【分支操作】
    1.常用命令汇总
命令描述
git branch[分支名]创建分支
git branch -v查看分支,可以使用-v参数查看详细信息
git checkout[分支名]切换分支
git merge[分支名]合并分支;将merge命令中指定的分支合并到当前分支上 ,例如:如果想将dev分支合并到master分支,那么必须在master分支上执行merge命令
git branch -d[分支名]删除分支
git checkout -b[分支名]新建并切换到当前分支
git log -oneline -decorate --graph -all它会输出你的提交历史,各个分支的指向以及项目的分支分叉情况

2.分支的概念
不使用分支,就是人与人之间协作:
使用分支,就是小组与小组之间的协作;
从主干中拉取分支,开发完成,将工作,合并到主干。
在这里插入图片描述

【分支常用操作】

  • 查看分支
    git branch -v

在这里插入图片描述

  • 新建分支
    git branch[分支名]
    在这里插入图片描述

  • 切换分支
    git checkout[分支名]
    在这里插入图片描述

  • 合并分支
    git merge[分支名]
    如果在dev分支上面,对一个文件做了修改,这个时候master分支上面对应的文件是没有修改信息的。因此需要将分支合并!
    在这里插入图片描述
    注意:必须切换到master分支后,才能合并。

  • 删除分支
    git branch -d [分支名]
    注意:必须切换到master,才能删除,不能自杀!
    在这里插入图片描述

  • 新建切换
    git checkout -b [分支名]
    在这里插入图片描述

【处理分支冲突】
待完成
编辑冲突的文件,把">>>>>>>>>","<<<<<<<<<“和”========"等这样的行删除,编辑至满意的状态,提交。提交的时候注意:git commit 命令不能带文件名。

【GitHub】
1.简介
GitHub是一个Git项目托管网站,主要提供基于Git的版本托管服务
在这里插入图片描述
2.注册
在这里插入图片描述
在这里插入图片描述
简单操作

-本地库联通GitHub
①查看本地是否配置了密钥
在这里插入图片描述
只需要在第一次配置就可以了,如果存在就不需要额外生成密钥
②生成密钥
命令: ssh-keygen
查看用户名:
在这里插入图片描述
生成密钥:
在这里插入图片描述

生成的密钥分为私钥和公钥,会保存在用户家目录的.ssh文件夹中。
在这里插入图片描述
其中,id_rsa是私钥,id_rsa.pub是公钥。
将公钥告诉github账户,相当于约定一个接头暗号!
进入github的账号,
在这里插入图片描述
测试本地仓库和github的联通性:ssh -T git@github.com
在这里插入图片描述
.ssh文件夹中会多一个文件known_hosts,其中记录了连接的github的ip账号
在这里插入图片描述

  • push
    本地库推送到GitHub
    ①准备本地库
    ②在GitHub上创建一个仓库
    ③增加远程地址
    git remote add <远端代号> <远端地址>
    <远端代号> 是指远程连接的代号,一般直接用origin作代号,也可以自定义
    <远端地址> 默认远程连接的url
    在这里插入图片描述
    ④本地库推送到远程库
    git push -u <远端代号> <本地分支名称>
    <远端代号> 是指远程连接的代号
    <分支名称> 是指要提交的分支名字,比如master
    我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
    在这里插入图片描述
    ⑤查看远程分支
    git remote -v
    在这里插入图片描述
    ⑥如果此时本地库做了修改,那么查看:
    在这里插入图片描述
    发现当前的本地库比远程库新增了一些内容。
    在这里插入图片描述
  • fetch
    fetch命令可以从远程库获取更新,但是并不合并!
    远程库已经更新,此时查看本地库的状态:
    在这里插入图片描述
    执行git fetch命令 ,查看远程库的更新:
    在这里插入图片描述
    再查看 git status
    在这里插入图片描述
  • Pull
    本地库抓取远程库
    如果远程库的版本新于当前库,那么此时为了使当前库和远程库保持一致,可以执行pull命令
    git pull <远端代号> <远端分支名>
    例 git pull origin master
    在这里插入图片描述
    查看有哪些本地库:
    在这里插入图片描述
  • clone
    实际的情况可能是刚开始做项目的时候,需要从远程库将项目先整到本机。
    执行命令 : git clone <远端地址> <新项目目录名>
    <远端地址> 是指远程连接的地址
    <项目目录名> 是指为克隆的项目在本地新建的目录名称,可以不填,默认是GitHub的项目名,命令执行完毕后,会自动为这个远端地址建一个名为origin的代号。
    例 git clone https://github.com/user111/Helloworld.git hello_world
    在这里插入图片描述
  • 解决冲突
    在这里插入图片描述
    此时,远程库比本地库的版本要新,因此,本地库执行拉取操作! git pull!
    在这里插入图片描述
    冲突原因:本地库的版本和远程库的版本都做了更新!
    在推送之前,执行 git fetch,发现远程库和本地库有版本变化。
    在这里插入图片描述

查看git status
在这里插入图片描述
此时,建议先pull,将远程库的版本和本地库的版本merge后再push!
如果强行push,报错!
在这里插入图片描述
解决办法:先pull,pull的时候会发现报错冲突
在这里插入图片描述
因此开始解决冲突,编辑冲突文件!
在这里插入图片描述
编辑完成:
在这里插入图片描述
之后再推:
在这里插入图片描述
总结: pull -----merge-----push

3.7邀请成员
①在相关的项目设置中,搜索要邀请的成员:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值