git快速入门

Git笔记

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

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

2.Git概念

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

3.版本控制工具的分类

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

在这里插入图片描述

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 "zhongyk"
$ git config --global user.email "zhongyk@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个版本   

在这里插入图片描述

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创建一个目录

目录名与项目名一致

在这里插入图片描述

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仓库

在这里插入图片描述

选择要初始化仓库的项目

在这里插入图片描述

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

在这里插入图片描述

推送成功

在这里插入图片描述

8.15.使用idea克隆并打开远程的项目

使用Git克隆项目

在这里插入图片描述

创建本地文件夹,克隆项目

在这里插入图片描述

是否打开项目

在这里插入图片描述

使用哪种方式打开项目

在这里插入图片描述

8.16.解决代码冲突问题

push时遇到冲突

在这里插入图片描述

当前分支主管的推送被拒绝
推送前需要合并远程更改

当push时遇到冲突,要先pull 再push

判断代码有没有交集,idea自动判断

  • 1.代码无交集

    直接pull成功

  • 2.代码有交集

    当两个开发者同时操作到一个文件时会出现冲突

    当两个开发者遇到冲突代码有交集时:两个人协商解决,解决之后将代码再推送至Github,另一个人再同步修改

    pull遇到冲突

    在这里插入图片描述

    解决冲突案例

    在这里插入图片描述

开发中一定先pull再push

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小中.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值