学习Git

1.Git概述

        Git是一个免费、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。

1.1何为版本控制

版本控制其实是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。

版本控制最重要的就是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。

        eg:公司服务器有一代码如下:

{
    aaa
    bbb
    ccc
    ddd
}

程序员A将该代码下载到本地后,为了增添功能,将其修改为:

{    
    aaa
    bbb222
    ccc
    ddd
}

程序员B将该代码下载到本地后,为了解决bug,将其修改为:

{
    aaa
    bbb
    ccc
    ddd444
}

若程序员A先提交,程序员B后提交,则程序员B的代码会覆盖程序员A的代码。这时就需要一个专业的版本控制工具,合并两个人的代码。

1.2版本控制工具

集中式版本控制工具

        集中化的版本控制系统诸如CVS、SVN等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人都通过客户端链接到这台服务器,取出最新的文件或者提交更新。

        这种做法的好处是:每个人都能在一定程度上看到项目中的其他人正在做什么,而管理员也可以轻松掌握每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来的更容易。

        然而,这样做的缺点是:如果中央服务器宕机,那么在这期间,谁都无法提交更新,也就无法协同工作。

分布式版本控制工具

        像Git这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这一任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,都是对整个文件仓库的完整备份。

        当一个客户端完成对项目的修改后,可以上传至远程代码托管中心。

1.3Git工作机制

        首先分为三个区:工作区、暂存区、本地库。

        工作区:本地代码所在磁盘目录,即存放代码的地方。

git add

        暂存区:把工作区的代码添加到暂存区,才能让Git追踪到。暂存区也有临时存储代码的作用,删除暂存区的代码,是不会有历史版本记录信息的,因为并没有提交到本地库。

        

git commit

          本地库:一旦暂存区的代码提交到本地库后,就会生成对应的历史版本,这时代码已经删不掉了。最后可以从本地库推送到远程库。

git push

1.4Git和代码托管中心

        代码托管中心是基于网络服务器的远程代码仓库,一般简称为远程库。

        局域网:GitLab

        互联网:Github、Gitee码云

2.Git常用命令

git config --global user.name  用户名 设置用户签名
git config --global user.email   邮箱 设置用户签名

git init

初始化本地库
git status查看本地库状态
git add 文件名添加到暂存区
git commit -m "日志信息” 文件名提交到本地库
git reflog        查看历史记录
git reset --hard 版本号版本穿梭

        签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中可以看到,以此确认本次提交是谁做的。

        这里设置用户签名和将来登录GitHub或其他代码托管中心的账号没有任何关系。

        C:\Users\86173\git.config文件中存放用户签名。

 2.1初始化本地库

        打开git-bash界面,输入git init,即可初始化本地库。

2.2查看本地库状态

 

 2.3添加暂存区

        当一个文件只存在工作区,未被添加到暂存区时,此文件名被标记为红色,代表Git还没有追踪该文件。


        当该文件被添加到暂存区后,Git就追踪到了这个文件。

         此时暂存区中的文件是可以删掉的,当然,删掉之后工作区的文件依旧存在。

git rm --cached 文件名 //从暂存区中删除文件

2.4提交本地库                         

        版本号为:1296182.

2.5查看历史记录

git log   查看详细的版本历史记录 ,可以看到完整的版本号。

 2.6修改文件

        当修改文件后,再次查看本地库状态,会发现一点小变化。

         这次修改后,Git没有追踪到,需要再次加入暂存区,然后提交本地库。这时是第二次提交。

         

         Git是按照行维护文件的,而第二次修改文件时,只改了txt文件中的第一行,所以Git提示为”

 1 insertion(+), 1 deletion(-)“,表示把修改之前的old行删掉,新增修改之后的new行。

        第二次查看版本记录信息,又发现一点小变化。

2.7版本穿梭

        版本穿梭就是通过版本号查看指定的版本。当版本发生变化后,就可以查看该版本对应的文件。

二号版本(edef6b4):

        

 当穿梭回一号版本(1296180)后,就能查看到原文件:

        

要实现这件事,只需:

(第一次穿梭输入了第二版本的版本号,相当于没有穿梭,有点尴尬)

穿梭回一号版本后,head指向了master,说明此时在master分支上,可以通过E:\GitSpace\Git-demo1\.git目录中的HEAD文件查看到

 同时E:\GitSpace\Git-demo1\.git\refs\heads目录下的master文件中存放着一号版本的完整版本号

 

 两者结合表示此时head指针指向了master分支,而master分支又指向了一号版本。

3.Git分支操作

git branch -v查看分支
git branch 分支名创建分支
git checkout 分支名切换分支
git merge 分支名把指定的分支合并到当前分支上

3.1什么是分支

        在版本控制工具中,同时推进多个任务,为每个任务创建相应的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候不会影响主线分支的运行。一个分支就相当于一个单独的副本。

3.2创建分支

        (由前文可知,创建hot-fix分支前master指向一号版本)

         未创建hot-fix分支时,只能查看到master分支;创建hot-fix分支后就可以同时查看到两个分支了,此时依然在master分支上。

        当master分支穿梭回二号版本后,可以看到两个分支此时指向不同的版本。

3.3切换分支

        切换到hot-fix后,hello.txt文件也变成了一号版本

         此时在hot-fix上对文件做修改:

        然后提交本地库。

        提交本地库后,HEAD指针指向hot-fix分支,hot-fix分支指向了hot-fix修改版本。

 

 3.4合并分支--正常合并

        合并后,hello.txi文件发生了一点小变化:

3.5合并分支--冲突合并

        冲突产生的原因:合并分支时,两个分支对同一个文件的同一个位置有两套完全不同的修改,Git无法决定使用哪一个,必须人为决定新代码内容。

4.GitHub操作

4.1创建远程仓库            

 4.2远程仓库操作

git remote -v        查看当前所有远程地址别名
git remote add 别名 远程地址起别名
git push 别名(地址)  分支推送本地分支上的内容到远程仓库
git clone 远程地址将远程仓库的内容克隆到本地
git pull 远程库地址别名(https链接或ssh协议)  远程分支名将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并

        4.2.1创捷别名,远程地址是远程仓库中的HTTPS

         4.2.2推送本地分支上的内容到远程仓库(此过程可能较慢,因为网速原因),如果失败就多来几次。

        (失败了好多次,终于成功了)。 推送完成后可以发现远程仓库不再是空荡荡的了。

         4.2.3将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并。之所以拉取,是为了保证本地库的文件和远程库的文件同步。拉取后会自动提交本地库。

       

        4.2.4将远程仓库的内容克隆到本地。clone会自动拉取代码,然后初始化本地仓库,最后创建别名(origin)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值