git分布式版本控制系统

导语

如果建立项目时是public的,任何人都可以拉取你的项目而不需要经过授权;
如果是private或interval的,则需要将使用者的id_rsa.pub上传到服务器仓库中,或者是把在仓库中手动给使用者授权。

了解git

工作原理 / 流程:
在这里插入图片描述

  • Workspace:工作区
  • Index / Stage:暂存区
  • Repository:仓库区(或本地仓库)
  • Remote:远程仓库

工作区:就是你把项目放在我的电脑里的地址目录,比如目录下git练习里的文件(.git隐藏目录版本库除外)。或者以后需要再新建的目录文件等等都属于工作区范畴。
版本库(Repository):工作区有一个隐藏目录.git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是Index / Stage(暂存区),还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD。
我们使用Git提交文件到版本库有两步:
第一步:是使用 git add 把文件添加进去,实际上就是把文件添加到暂存区。
第二步:使用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支上。

远程仓库

准备

注册一个github账号,由于你的本地Git仓库和github仓库之间的传输是通过SSH加密的,所以需要一点设置:
第一步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果有的话,直接跳过此如下命令,如果没有的话,打开命令行,输入如下命令:
cmd输入命令行:ssh-keygen -t rsa –C “你的常用邮箱名”, 由于我本地此前运行过一次,所以本地有
在这里插入图片描述
注:如果cmd打开提示ssh-keygen不可用
在这里插入图片描述直接使用git bash终端敲入命令即可
在这里插入图片描述

何谓公钥

git有两中协议

一种是http,克隆时需要输入账号密码登录。 一种是ssh,
要把本地电脑上的id_rsa.pub公钥放到服务器上去,克隆时git会自己用你本地的私钥id_rsa和服务器上的进行比对以确认你的身份(后面介绍如何上传公钥)。

如何获取你的公钥

1.很多服务器都是需要认证的,ssh认证是其中的一种。把客户端的公钥添加到服务器,以后连接服务器就不用每次都输入用户名和密码了。
2.采用ssh认证方式,你需要把你本地的公钥发送给代码仓库管理员,让他给你添加到服务器上,你就可以通过ssh自由地拉取和提交代码了。
获取公钥(两种方法)

一种是打开我的电脑直接在文件目录下找:C:\Users\zsx\ .ssh (zsx指的是你的电脑名字)

下面会有三个目录:

  1. id_rsa //本机私钥
  2. id_rsa.pub //本机公钥
  3. known_hosts //这是自动生成的dns文件,把ip地址和网址进行映射,以后再执行时就不会再查询dns服务器了 直接打开id_rsa.pub里面就是你的公钥。

一种是在安装git后直接用git bash打开

  1. 进入.ssh目录:cd ~/.ssh
  2. 找到id_rsa.pub文件: ls
  3. 查看公钥:vim id_rsa.pub 接下来会出现一堆以ssh-rsa开头的符号,那就是你的公钥。
配置SSH Keys

登录github,打开 settings>SSH Keys,然后点击“Add SSH Key”,填上title标题,在Key文本框里黏贴id_rsa.pub文件的内容
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

安装git

网上自行下载 windows版的Git——msysgit,然后进行默认安装即可。安装完成后,在开始菜单里面找到 “Git --> Git Bash”,会弹出一个类似的命令窗口的东西鼠标会停留在一个$符号后,就说明Git安装成功。
安装完成后,还需要最后一步设置:

Git是分布式版本控制系统,所以需要利用git config --global 参数填写用户名和邮箱作为一个标识;此时表示你这台机器上所有的Git仓库都会使用这个配置,当然你也可以对某个仓库指定的不同的用户名和邮箱。
命令(全局):

  1. git config --global user.name ‘uname’
  2. git config --global user.email ‘123456@qq.com’

创建本地仓库(两种方法)

直接克隆(个人推荐)

克隆项目并定位到项目目录
git clone 项目地址 	//这时当前目录下除了会将服务器上的项目内容下载下来还会多了一个.git的目录
cd .git的目录 	   //我们的所有操作都是在本地仓库目录下进行

注:在git clone版本到本地仓库报错:
在这里插入图片描述
看路径下C:\Users(yourname).ssh 是否只有两个文件:

  • id_rsa
  • id_rsa.pub
    而没有文件known_hosts
    问题就出在这里
    运行命令行:ssh-keyscan -H github.com >> ~/.ssh/known_hosts
    在这里插入图片描述
    接着:ssh -T git@github.com
    在这里插入图片描述
    重新clone,成功!

git clone远程仓库后,直接使用 git 命令来操作远程仓库
直接clone的话此时git已经将本地仓库添与远程仓库关联起来,所以直接操作后续命令能正常运行。

现在创建一个test.txt来试试

git status查看本地仓库状态会发现:
在这里插入图片描述
Untrancked files后面的指示:使用git add < file name >将文件提交到暂存区。后面红色的表示未提交到暂存区的文件。

添加到暂存区
git add test.txt   //将文件提交到暂存区

注意:这里也可以直接用 git add .	 //表示将目录下所有未添加到暂存区的文件添加到暂存区以便commit到本地仓库

此时若再使用git status查看状态
在这里插入图片描述
会发现modified那一行变成绿色的,这便是修改已经添加到暂存区了,就可以直接commit到本地仓库。

提交到本地仓库

命令:git commit -m ‘beizhu’ //'beizhu’表示提交备注
在这里插入图片描述
此时用命令 git status可以查看你的分支的状态,可以看到: your branch is ahead of ‘origin/master’ by 1 commit你的粉质已经超出远程仓库分支一个提交。
在这里插入图片描述

推入到远程仓库

这个时候你只需git push将提交到本地仓库的文件推入到远程仓库即可。
在这里插入图片描述
此时,已经将本地仓库中的文件提交到远程仓库了!

接下来:
修改一下test.txt文件,再用git status查看本地分支的状态,会发现提示:modified:test.txt。

上图

但是注意,所有的版本控制系统,只能跟踪文本文件的改动,如txt文件,网页,程序的代码等,Git也一样,他可以告诉你每次的改动,但是图片,视频这些二进制文件,虽能也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是知道图片从1kb变成2kb,但是到底改了啥,版本控制也不知道

查看修改内容

假如要查看修改了哪些内容,可以使用命令git diff < file name >
****
如上可以看到,test.txt文件内容从

465556564565465465

改成

465556564565465465
siriva

知道了对test.txt文件做了什么修改后,我们可以放心的提交到仓库了,提交修改和提交文件是一样的步骤(第一步是git add 第二步是:git commit)

版本回退

现在我再次修改test.txt的 内容。在下一行添加2222222222222222,执行如下命令:
在这里插入图片描述

查看操作日志

现在我已经对test.txt文件做了三次修改了,那么我现在想查看下历史记录,如何查呢?我们现在可以使用命令 git log 演示如下所示:
在这里插入图片描述
如果嫌上面显示的信息太多的话,我们可以使用命令 git log --pretty=oneline 演示如下:
在这里插入图片描述
git log --pretty=oneline命令打印出来的日志就只有版本号和提交备注。

版本回退

假如我现在想回退到上一个或前几个版本,有两种方法:
一种是:git reset --hard HEAD^ ,要回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推;
但第一种方法会有一定的局限性,比如要回退到前100个版本的话,就不太方便了,此时我们可以使用下面的简便命令操作:git reset --hard HEAD~100,同样也可以回退到相应的版本。
未回退之前的test.txt内容如下:
在这里插入图片描述
现在使用git reset --hard HEAD^命令回退到上一个版本
在这里插入图片描述
可以看到已经回退到"second"的版本,可以使用cat < file name >来查看文件是否有改变:
在这里插入图片描述
最后一行2222222222就已经没有了。git log查看就只有两个版本记录了:
在这里插入图片描述

版本恢复

上述已经将版本回退到上一个版本了,假如我现在要恢复,可以使用git reset --hard 版本号 ,但是现在我们看log日志根本看不到我们需要恢复的那个版本号,此时,我们就需要使用git reflog获取所有的修改的版本号,如下:
在这里插入图片描述
通过上面的显示我们可以知道,添加222222222的版本号是 5c9ef66。我们现在可以使用命令git reset --hard 5c9ef66来恢复。演示如下:
在这里插入图片描述
通过上面的日志可以看出,添加222222222那条记录又恢复了。

撤销修改(丢弃工作区的修改)

git checkout – < file name >,意思就是,把test.txt文件在工作区做的修改全部撤销,这里有2种情况,如下:

1.test.txt自动修改后,还没有放到暂存区,使用撤销修改就回到和版本库一模一样的状态。
2.另外一种是test.txt已经放入暂存区了,接着又作了修改,撤销修改就回到添加暂存区后的状态。

注意:命令git checkout – test.txt 中的 – 很重要,如果没有 – 的话,那么命令变成创建分支了

删除文件

现在,我在目录下创建一个abc.txt文件并提交到远程仓库里。一般情况下,可以直接在文件目录中把文件删除,或者使用如上rm命令:rm abc.txt ,如果我想彻底从版本库中删掉了此文件的话,可以再执行commit命令提交掉。
只要没有commit之前,如果我想在版本库中恢复此文件,可以使用命令 git checkout --abc.txt,你在文件中看就可以看到abc.txt这个文件已经在目录中了。

初始化的方式

git init 	 //  本地初始化git仓库,这时当前目录下会多了一个.git的目录
git remote add origin 远程仓库地址  //为本地仓库添加关联的远程仓库/origin
git push -u origin master         //  将本地仓库的master分支推送到远程仓库, -u表示将本地master分支与远程仓库master分支关联,第一次推送使用该命令
git push origin master		 //  第二次及以后直接只用该命令推送

注:此时你的工作目录下面的一个.git隐藏目录,就是git用来管理项目的全部文件,这就是所谓的本地仓库,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件”还原”。假如你不慎将其删了,那项目就无法进行版本回退快进提交拉取等操作了。

我们已经在本地创建了一个Git仓库后,又想在github创建一个Git仓库,并且希望这两个仓库进行远程同步,这样github的仓库可以作为备份,又可以其他人通过该仓库来协作
在这里插入图片描述
点击下面的Create repository按钮即可创建。
在这里插入图片描述

另外:假如本地commit后再执行git pull, 会进行分支合并。此时,你可以执行 git checkout branch_A 切换到分支A,然后执行 git merge branch_B, 把分支B上的内容合并到分支A上来;
也可以执行git pull origin master --allow-unrelated-histories进行合并,此时会出现:
在这里插入图片描述
出现那个界面表示分支合并已经完成了,git是让你留下一点备注信息,这个不是必须的,:wq保存退出即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值