1、什么是Git?
Git是分布式版本控制系统。
版本控制系统分为集中式和分布式两种,集中式就是svn和csv这样的版本控制系统,分布式是git这种github用的就是git系统来管理它们的网站,这里需要区分一下,github和git是两个东西,github是一个社区,git是一个服务系统,github只支持git分布式系统。
区别在于集中式的版本控制系统每次在写代码时都需要从服务器中拉取一份下来,并且如果服务器丢失了,那么所有的就都丢失了,你本机客户端仅保存当前的版本信息,换句话说,集中式就是把代码放在一个服务器上集中管理,你的所有回滚等操作都需要服务器的支持。
分布式的区别在于,每个人的电脑都是服务器,当你从主仓库拉取一份代码下来后,你的电脑就是服务器,无需担心主仓库被删或者找不到的情况,你可以自由在本地回滚,提交,当你想把自己的代码提交到主仓库时,只需要合并推送到主仓库就可以了,同时你可以把自己的代码新建一份仓库分享给其它人。
2、Git的安装
安装结束后,要对Git配置邮箱及用户名。
git -v //查看Git的版本信息
git config --global user.name "用户名" //声明用户名
git config --global user.email 邮箱 //声明用户邮箱
git config --global credential.helper store //保存声明信息
git config --global --list //查看信息
3、Git指令
为了区分Git命令与Linux命令的区别,Git命令都以 git 开头
常用命令汇总表:
常见Git命令
git init //创建仓库
git status //查看仓库状态
git add //添加到暂存区
git ls-files //查看暂存区中的内容
git commit //提交,使用-m指定提交信息,不写-m会有交互界面
git log //查看提交记录
git log --oneline //查看提交记录的简易信息
git reset //回退版本
git reflog //回退操作
git reset //回退版本
git diff //查看差异
git diff //查看工作区和暂存区的差异
git diff HEAD //查看工作区和缓存区 与 本地仓库的差异
git diff --cached/--staged //查看缓存区与本地仓库的差异
git diff 提交ID1 提交ID2 //比较两次提交之间的差异
git diff HEAD~ HEAD //比较两次提交之间的差异
git diff 分支名1 分支名2 //比较两个分支之间的差异
/* 删除仓库中的文件,使用git rm命令删除,删除后记得提交,同步仓库中的内容 */
git rm 文件名 //把文件从工作区和暂存区同时删除
git rm --cached 文件名 //把文件从暂存区删除,但保留在当前工作区中
git rm -r * //递归删除某个目录下的所有子目录和文件
git clone //在本地克隆一个远程仓库,使用SSH方式
git push //将本地的修改推送到远程仓库
git pull //将远程仓库中的内容拉取到本地
git remote add 仓库别名 远程仓库的ssh地址 //本地仓库与远程仓库的连接
git push -u 远程仓库名 分支名 //添加远程仓库
git remote -v //查看本地仓库对应的远程仓库别名
git pull 远程仓库名 远程分支名:本地分支名 //拉取远程仓库,若远程分支名、本地分支名相同,可以省略
git fetch //获取远程仓库的修改
git branch //查看分支
git branch 分支名 //创建分支
git checkout 分支名 //切换分支,恢复文件、目录等信息
git switch 分支名 //切换分支
git merge 分支名 //合并分支
git branch -d 分支名 //删除分支
git branch -D 分支名 //删除分支
git commit -a -m "提交信息" //一个命令完成提交和暂存两个功能
git commit -am "提交信息" //一个命令完成提交和暂存两个功能
git merge --abort //中止合并
git checkout -b dev 提交ID //恢复分支
(1)创建仓库
创建本地仓库
/* git init 命令创建仓库 */
cd /d //进入D盘
mkdir learn-git //创建文件夹learn-git
cd learn-git //进入learn-git目录
git init //创建仓库
ls -a //查看是否有.git文件,有则创建成功
截图如下:
.git目录存放了Git仓库的所有数据 ,进入.git目录,ls -altr查看信息
从Github上克隆一个存在的仓库
什么是Github?
Github是一个代码托管平台,世界上超过90%的开源项目都托管在Github上。
准备工作:完成Github账号的注册
git clone 仓库地址 //从Github远程克隆一个存在的仓库
具体过程详见 配置SSH秘钥部分。
(2)创建文件提交到本地仓库
流程:
1.创建一个文件,使用git status查看其状态(Untracked files ------ 未被跟踪状态)
2.使用git add命令,将文件添加到暂存区
此时,文件已经被提交到缓存区,根据括号中的内容
git rm --cached 文件名 //从缓存区中撤回
使用该命令可以将文件从缓存区中撤回。
错误处理:
使用git add将文件添加到缓存区,出现
warning: in the working copy of 'file1.txt', LF will be replaced by CRLF the next time Git touches it
解决方法(windows):
Git 可以在你提交时自动地把回车(CR)和换行(LF)转换成换行(LF),而在检出代码时把换行(LF)转换成回车(CR)和换行(LF)。因为git 的 Windows 客户端基本都会默认设置 core.autocrlf=true
git config --global core.autocrlf true //提交时转换为LF,检出时转换为CRLF:
使用git commit将文件提交到仓库中,git commit只会提交暂存区的内容
查看提交记录,使用git log查看提交记录:
commit后面为唯一ID Author为提交者的信息 Date为提交日期
(3)git reset回退版本
git reset有三种模式:
git reset --soft //回退到某一个版本,并保留工作区和暂存区的修改内容
git reset --hard //回退到某一个版本,并丢弃工作区和暂存区的修改内容
git reset --mixed //回退到某一个版本,并保留工作区的修改内容,丢弃暂存区
的修改内容(git reset的默认参数)
(4)git diff查看差异
git diff后什么都不加,默认比较工作区和暂存区的差异内容
将修改的文件提交后,git diff就没有展示信息(此时,工作区和缓存区内容一致)
git diff 提交ID1 提交ID2 //比较两个提交版本的差异
HEAD~ 或 HEAD^ 表示上一个版本
HEAD 为当前提交版本
HEAD~2 表示之前的两个版本
git diff HEAD~ HEAD 文件名 只会查看两次提交中该文件的差异
git diff 分支名1 分支名2 查看两个分支之间的差异
(5)版本库中删除文件
方法一:在工作区中删除,更新暂存区,然后重新提交到仓库
方法二: Git提供git rm命令
git rm 文件名 //将文件从工作区、暂存区和仓库中删除
(6)gitignore忽略文件
忽略一些不应该被加入版本库中的文件
应该忽略的文件:
1、系统或软件自动生成的文件
2、编译产生的中间文件和结果文件
3、运行时生成日志文件、缓存文件、临时文件
4、涉及身份、密码、口令、秘钥等敏感信息的文件
将文件添加到.gitignore中,文件提交到版本库时,不会提交添加到.gitignore的文件
也可以使用vi修改.gitignore中的内容加入一行*.log,使所有以.log结尾的文件都不提交到仓库
.gitignore生效的前提是该文件是没有加入版本库的文件 ,空文件夹也不会添加到仓库
.gitignore文件的匹配规则:
1、从上到下逐行匹配,每一行表示一个忽略模式
2、空行或者以#开头的行表示注释
3、使用标准的Blob模式匹配:星号*通配任意个字符、问号?匹配单个字符、中括号[ ]表示匹配列表中的单个字符,比如[abc]表示a/b/c
4、两个星号**表示匹配任意的中间目录
5、中括号可以使用短中线连接,比如:[0-9]表示任意以为数字
6、感叹号!表示取反
4、Git的工作区域与文件状态
Git的本地管理分为三个区域:工作区(Working Directory)、暂存区(Staging Area/Index)和本地仓库(Local Repository)。
文件在工作区修改,然后加到暂存区,最后提交到本地仓库。过程中可以使用Git提供的命令查看、比较或撤销修改内容。
5、使用Github管理代码
(1)在Github上创建的仓库
流程:点击Create repository创建仓库,填写信息,完成创建仓库。
创建成功:
(2)配置SSH公钥
在VS Code终端输入指令
ssh-keygen -t rsa -C "github注册时电子邮箱"
一直回车即可,若出现Overwrite (y/n)? 输入y(重点),然后一直按回车健,出现以下内容,密钥生成成功
在文件中找到.ssh文件,使用记事本打开id_rsa.pub文件,查看里面的秘钥,并复制。
复制秘钥后,回到Github页面在刚刚创建的仓库设置页面,导航栏选择deploy keys(部署密匙),点击add deploy key(添加部署密匙)
填写信息和秘钥,秘钥添加完成:
使用git clone命令克隆远程仓库:
出现以下错误的解决方法:
终端输入,查看ssh是否生效
ssh -T git@github.com
若出现下图情况:
在电脑中找到生成的.ssh文件夹,新建config文件(没有后缀名,可以新建文本文档,写入信息后,删除后缀名),config中填入以下信息(xxxx@qq.com 填写你的邮箱):
Host github.com
User xxxx@qq.com
Hostname ssh.github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
Port 443
完成以上步骤后,在终端输入,出现提示信息,输入yes回车即可。
ssh -T git@github.com
最后结果如下图:
再次执行git clone命令即可成功
远程仓库克隆完毕,成功登录:
在本地修改的内容,要使用git push命令推送到远程仓库。
git push //将本地的修改推送到远程仓库
git pull //将远程仓库中的内容拉取到本地
6、将本地仓库推送到远程仓库
创建一个新的远程仓库,使用git remote add命令进行连接两个仓库
git remote add 仓库别名 远程仓库的ssh地址 //本地仓库与远程仓库的连接
git push -u 远程仓库名 分支名 //添加远程仓库
git remote -v //查看本地仓库对应的远程仓库别名
git pull 远程仓库名 远程分支名:本地分支名 //拉取远程仓库,若远程分支名、本地分支名相同,可以省略
git fetch //获取远程仓库的修改
7、在VS Code中使用Github
【查看】------【命令面板】 通过修改setting.json文件修改VS Code的配置
Git操作在VS Code右侧的源代码管理中可以实现
8、分支
(1)分支的基本操作
git branch //查看分支
git branch 分支名 //创建分支
git checkout 分支名 //切换分支,恢复文件、目录等信息
git switch 分支名 //切换分支
git merge 分支名 //合并分支
git branch -d 分支名 //删除分支
git branch -D 分支名 //删除分支
(2)合并分支Merge
git commit -a -m "提交信息" //一个命令完成提交和暂存两个功能
git commit -am "提交信息" //一个命令完成提交和暂存两个功能
使用git diff命令查看冲突,进行手工合并后,重新提交。
git merge --abort //中止合并
两个分支未修改同一个文件的同一处位置:Git自动合并
两个分支修改了同一个文件的同一处位置:产生冲突
解决方法:
1、手工修改冲突文件,合并冲突内容
2、添加暂存区 git add file
3、提交修改 git commit -m "提交信息"
中止合并:不想继续执行合并操作时使用 git merge --abort
(3)分支合并Rebase
rebase和merge的区别:
git checkout -b dev 提交ID //恢复分支