git详细解剖

Git笔记

1.Git解决现有项目中的哪些问题

  • 1.安全性太低
  • 2.项目无端报错
  • 3.项目版本混乱
  • 4.很难进行协同开发

2.Git概念

  • Git是一个分布式版本控制及****协同开发工具

3.版本控制工具的分类

3.1.集中式的版本控制工具 cvs svn

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-821EQfSK-1604459507562)(img\集中式版本控制系统.jpg)]

3.2.分布式的版本控制 Git

在这里插入图片描述

4.下载,安装

4.1.下载

官网下载地址:https://git-scm.com/downloads

在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。

4.2.安装

傻瓜式安装,一路下一步

安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

安装完成后,还需要最后一步设置,在命令行输入:

$ git config --global user.name "yangch"
$ git config --global user.email "handsome0324@163.com"

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。

注意:git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

5.Git使用

5.1.创建版本库(本地库)

什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

所以,创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:

$ mkdir 192-Repository  #创建一个空的目录

第二步,通过git init命令把这个目录变成Git可以管理的仓库:

$ git init

在这里插入图片描述

瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

5.2.创建一个文件

$ touch aaa.txt

和把大象放到冰箱需要3步相比,把一个文件放到Git仓库只需要两步。

5.3.将修改添加到暂存区

第一步,用命令git add告诉Git,把文件添加到仓库(暂存区):

$ git add <file>  #file 文件名  aaa.txt

在这里插入图片描述

执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。

5.4.提交暂存区的修改到版本库

第二步,用命令git commit告诉Git,把文件提交到仓库:

$ git commit -m "提交描述信息"  #-m  相当于message 提交的说明

在这里插入图片描述

简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

嫌麻烦不想输入-m "xxx"行不行?确实有办法可以这么干,但是强烈不建议你这么干,因为输入说明对自己对别人阅读都很重要。实在不想输入说明的童鞋请自行Google,我不告诉你这个参数。

git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的aaa.txt文件);

5.5.查看状态

$ git status
  • 红色:工作区已修改暂未添加到暂存区
  • 绿色:工作区的修改已经添加到暂存区,并未提交到版本库
  • nothing to commit, working tree clean:工作区与版本库保持一致

5.6.Git分区原理

在这里插入图片描述

在这里插入图片描述

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

5.7.查看提交版本

当然了,在实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看:

$ git log
$ git log --pretty=onelie   

像这样,你不断对文件进行修改,然后不断提交修改到版本库里,就好比玩RPG游戏时,每通过一关就会自动把游戏状态存盘,如果某一关没过去,你还可以选择读取前一关的状态。有些时候,在打Boss之前,你会手动存盘,以便万一打Boss失败了,可以从最近的地方重新开始。Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。

5.8.版本回退

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

现在,我们要把当前版本,回退到上一个版本,就可以使用git reset命令:

5.8.1.回退到上一个版本
$ git reset --hard HEAD^   #回退到上一个版本

$ git reset --hard HEAD^(1~100)  #会退到上n个版本   

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PVP7TOaD-1604459507595)(img\回退上一个版本.jpg)]

5.8.2.回退到指定版本
$ git reset --hard d273  #d273  指定提交版本的版本号:commitId

最新的那个版本append GPL已经看不到了!好比你从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办?

办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个append GPLcommit id1094adb...,于是就可以指定回到未来的某个版本:

现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?

在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPL的commit id。Git提供了一个命令git reflog用来记录你的每一次命令:

5.8.3.查看历史命令
$ git reflog

5.9.撤销修改

5.9.1.撤销工作区的修改
$ git restore <file>  #<file>:文件名  2.24.0版本之后使用
$ git checkout -- <file> 
5.9.2.撤销暂存区的修改
#第一步:撤销暂存区的修改到工作区
$ git restore --staged <file> #<file>:文件名  2.24.0版本之后使用

$ git reset HEAD <file>

#第二步:撤销工作区的修改
$ git restore <file>

5.10.删除文件

在Git中,删除也是一个修改操作

删除文件可以直接删除

$ rm <fiel> #删除文件
5.10.1.确定删除
#第一步:确定删除
$ git add/rm <file>   #相当于  提交修改|确定删除  

#第二步:提交操作
$ git commit -m "提交说明"
5.10.2.误删
$ git restore <file> #撤销工作区的修改

6.Github

6.1.注册

6.2.登录

6.3.创建仓库

仓库名字随便写:全局唯一

在这里插入图片描述

6.4.将远程仓库拉取到本地

$ git clone git@github.com:15236674712/2001-yingx.git

克隆失败

在这里插入图片描述

  • 有可能是仓库不存在
  • 没有权限

克隆为“ 192-yingx” …
git@github.com:权限被拒绝(公钥)。
致命:无法从远程存储库读取。

请确保您具有正确的访问权限,并且存储库存在。

6.5.生成公钥和私钥

第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ ssh-keygen -t rsa -C "15236674712@163.com"
#如果电脑中没有.ssh目录 执行以下命令
$ ssh-keygen

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

在这里插入图片描述

查看公私钥

C:\Users\NANAN\.ssh

1.公钥

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDzlZeWMt9WVrCqC86Z9Ssvgk7xzHrKGgnuryUSC4Ryt2vZ/jrq5hZQ4M/54f5V1HZxz7ehVHyAG6PonpptthoRVAHQdXdms7z81EXeq0MKtJDWOS2UgJmD7cSkNSB/FLGH+HkYv6BdkS6QlntkEu1aXEk8/QwM0sosoz9TswNi1zWUjFpywUk8AoNIY9Og/KKhgM/TQR8NvpKCfIZgNkEK7AdPhc/V8pGri14W7dfotI0ZSrs9BHTXd6bQEQAqQqVxjRx6h1vLqkEnSZ82CTbFuI2j/3dLofqxcXwb7t5ag1MPAgq871xJo8CGP2JlJr7D6UG1rjILsTt2DUuG11dHfi7MchSCsLs4jUQsmIqH5uv+roESOuOABsO//Hm+BntWKczPjAV8JXCM9idKHD7NrZvdAI6sPr8WUnm1I368pbANzb9BDHq3h1Vpa+yjjlJKXFxd3Nvz9xC+4usGV4yGGqb8DVXnmuBUcHuJnPZ3vkX/Q3DuBUJqBgLrKjU4VZE= 15236674712@163.com

2.私钥

-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----

6.6.配置GitHub信任列表

第2步:登陆GitHub,点击头像,选择“Settings”,打开“SSH and GPG keys”页面:

然后,点“New ssh Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

在这里插入图片描述

6.6.将远程仓库拉取到本地

$ git clone git@github.com:15236674712/192-yingx.git

克隆成功

在这里插入图片描述

6.7.将本地修改推送至远程

$ git push -u origin master  #第一次推送修改 
$ git push origin master 

添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

下一步,就可以把本地库的所有内容推送到远程库上:

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

在这里插入图片描述

6.8.将远程的修改同步到本地

$ git pull origin master

在这里插入图片描述

6.9.将本地项目推送至Github

6.9.1.准备一个项目
6.9.2.Github创建一个目录

目录名与项目名一致

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QlCLQp0N-1604459507614)(img!在这里插入图片描述
)]

6.9.3.将本地项目初始化Git仓库并推送至远程Github
$ git init
$ git add .
$ git commit -m "first commit"
$ git remote add origin git@github.com:15236674712/github-192.git  #与远程Github(同名的空目录)建立连接
$ git push -u origin master  #将本地仓库(项目)推送至远程Github

在这里插入图片描述

7.Git分支

分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。

现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

其他版本控制系统如SVN等都有分支管理,但是用过之后你会发现,这些版本控制系统创建和切换分支比蜗牛还慢,简直让人无法忍受,结果分支功能成了摆设,大家都不去用。

但Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件。

在这里插入图片描述

1.创建分支

$ git branch dev #dev分支名

2.切换分支

$ git checkout dev #dev分支名

3.创建并切换分支

$ git checkout -b dev #dev分支名

4.查看分支

$ git branch 

5.合并分支

$ git merge  dev
#注意:如果要将dev分支合并到master分支,切换到master分支执行合并

6.删除分支

$ git branch -d dev    #-d 删除(delete) dev分支名

7.分支策略

在实际开发中,我们应该按照几个基本原则进行分支管理:

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

所以,团队合作的分支看起来就像这样:

在这里插入图片描述

8.Git集成IDEA

8.1.配置Git

在这里插入图片描述

8.2.配置Github

在这里插入图片描述

8.3.修改idea终端为Git bash

修改控制台shell路径:setting -> Tools -> Terminal -> Shell path,修改为git安装路径。

在这里插入图片描述

8.3.Terminal中文乱码问题

我们配置idea 的终端为git 的bash.cmd 之后会出现中文乱码

解决方法:

1.git的安装路径下etc文件下有个 bash.bashrc 文件,在这个文件末尾追加:

export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"

2.中文乱码问题

  • 在idea安装目录下找到idea.exe.vmoptions和idea64.exe.vmoptions文件,在文件的最后添加:

-Dfile.encoding=UTF-8

  • 在git安装目录下找到etc/bash.bashrc文件,在文件的最后添加:

export LANG=“zh_CN.UTF-8”

export LC_ALL=“zh_CN.UTF-8”

  • 在Terminal控制台输入:set LESSCHARSET=utf-8

  • 退出控制台,重新进入即可。exit

    在这里插入图片描述

8.4.初始化Git仓库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p3bQ0wBt-1604459507628)(img/初始化仓库1.jpg)]

选择要初始化仓库的项目

在这里插入图片描述

8.5.添加到暂存区 add

在这里插入图片描述

8.6.提交到版本库 commit

在这里插入图片描述

加入提示信息

在这里插入图片描述

8.7.Idea中类的颜色

  • 红色:工作区已修改并未添加到暂存区
  • 绿色:修改已经添加到暂存区暂未提交到版本库
  • 白色:版本库与工作区一致
  • 蓝色:已经提交到版本库,有修改

8.8.查看历史提交版本

在这里插入图片描述

展示历史提交版本

在这里插入图片描述

8.9.撤销修改

在这里插入图片描述

8.10.版本回退

8.10.1选择回退版本直接回退

在这里插入图片描述

8.10.2根据版本提交id(commitId)回退

复制版本提交编号

在这里插入图片描述

选择切换版本

在这里插入图片描述

输入要切换的版本编号

在这里插入图片描述

8.11.分支

查看/添加分支

在这里插入图片描述

分支操作

在这里插入图片描述

合并分支

在这里插入图片描述

8.12.将本地项目推送至Github

在这里插入图片描述

填写要分享的项目名

在这里插入图片描述

分享成功

在这里插入图片描述

8.13.将Github的修改更新到本地

在这里插入图片描述

在这里插入图片描述

8.14.将本地的修改推送至Github

Commit and Push

在这里插入图片描述

push

在这里插入图片描述

推送成功

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值