git分布式版本控制

一、概述

1.1 什么是Git

Git是一个免费、开源的版本控制软件

1.2 什么是版本控制系统

版本控制是一种记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况的系统。(记录文件的所有历史变化、随时可恢复到任何一个历史状态、多人协作开发或修改错误恢复)

1.3 什么是Github

Github是全球最大的社交编程及代码托管网站(https://github.com/)。
Github可以托管各种git库,并提供一个web界面(用户名.github.io/仓库名)

1.4 Github和Git是什么关系

Git是版本控制软件
Github是项目代码托管的平台,借助git来管理项目代码

1.5 四个工作区域

Git本地有四个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)、git仓库(Remote Directory)。文件在这四个区域之间的转换关系如下:

在这里插入图片描述

  • Workspace: 工作区,就是你平时存放项目代码的地方

  • Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

  • Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

  • Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换(github、gitlab、gitee等)

1.6 工作流程

git的工作流程一般是这样的:
1、在工作目录中添加、修改文件;
2、将需要进行版本管理的文件放入暂存区域;
3、将暂存区域的文件提交到git仓库。

因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

1.7 文件的四种状态

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

GIT不关心文件两个版本之间的具体差别,而是关心文件的整体是否有改变,若文件被改变,在添加提交时就生成文件新版本的快照,而判断文件整体是否改变的方法就是用SHA-1算法计算文件的校验和。
在这里插入图片描述

  • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.

  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改

  • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存,文件状态为Modified

在这里插入图片描述

二、Git 常用命令

1.linux安装

yum install git -y

2.windows 安装

https://git-scm.com/download/win

3.创建项目,先创建文件,然后在文件下初始化 git init
在这里插入图片描述
可以看到出现.git文件
4.配置个人信息

[root@gitlab project_demo]# git config user.name 'bertwu'
[root@gitlab project_demo]# git config user.email 'bertwu@163.com'

可以看到已经写入配置文件中
在这里插入图片描述
默认不配置的话,会使用全局配置里面的用户名和邮箱 全局git配置文件路径:~/.gitconfig

5.修改bash窗口提示颜色,执行如下命令

git config --global color.status auto
git config --global color.diff auto
git config --global color.branch auto
git config --global color.interactive auto

6.创建新文件,然后查看状态 git status
红色表示新建文件或者新修改的文件,都在工作区.
绿色表示文件在暂存区
新建的login.py文件在工作区,需要添加到暂存区并提交到仓库区

[root@gitlab project_demo]# touch login.py

在这里插入图片描述
7.将工作区的文件添加到暂存区

  # 添加项目中所有文件
  git add .
  或者
  # 添加指定文件
  git add login.py

在这里插入图片描述
8.将暂存区文件提交到本地仓库 git commit -m '描述'
commit会生成一条版本记录, -m后面是版本描述信息
在这里插入图片描述
9.编辑login.py文件
代码编辑完成后即可进行add和commit操作
提示:添加和提交合并命令 git commit -am "版本描述"
提交两次代码,会有两个版本记录

[root@gitlab project_demo]# echo "age=10" > login.py 
[root@gitlab project_demo]# git commit -am '第一个变量'
[master 38af1aa] 第一个变量
 1 file changed, 1 insertion(+)

[root@gitlab project_demo]# echo "age=20" >> login.py 
[root@gitlab project_demo]# git commit -am '第二个变量'
[master 9352c8d] 第二个变量
 1 file changed, 1 insertion(+)
[root@gitlab project_demo]#

10.查看历史版本
git log 或者 git reflog
在这里插入图片描述
git reflog 可以查看所有分支的所有操作记录(包括commit和reset的操作),包括已经被删除的commit记录,git log 则不能察看已经删除了的commit记录

11.回滚版本

方案一:
HEAD表示当前最新版本
HEAD^表示当前最新版本的前一个版本
HEAD^^表示当前最新版本的前两个版本,以此类推…
HEAD~1表示当前最新版本的前一个版本
HEAD~10表示当前最新版本的前10个版本,以此类推…

git reset --hard HEAD^
在这里插入图片描述

[root@gitlab project_demo]# cat login.py 
age=10

方案二:当版本非常多时可选择的方案
通过每个版本的版本号回退到指定版本
git reset --hard 版本号

在这里插入图片描述

12.撤销修改

只能撤销工作区、暂存区的代码,不能撤销仓库区的代码
撤销仓库区的代码就相当于回退版本操作
1.撤销工作区代码
新加代码 age=30,不add到暂存区,保留在工作区
git checkout 文件名

[root@gitlab project_demo]# echo "age=30" >> login.py 
[root@gitlab project_demo]# cat login.py 
age=10
age=20
age=30
[root@gitlab project_demo]# git checkout login.py #撤销操作
[root@gitlab project_demo]# 
[root@gitlab project_demo]# 
[root@gitlab project_demo]# cat login.py 
age=10
age=20

2.撤销暂存区代码
新加代码age=30,并add到暂存区
第一步:将暂存区代码撤销到工作区
git reset HEAD 文件名
第二步:撤销工作区代码
git checkout 文件名

在这里插入图片描述

13.版本对比

  • 对比版本库与工作区
    新加代码age=30,不add到暂存区,保留在工作区
    git diff HEAD -- 文件名
    在这里插入图片描述
  • 对比版本库
    git diff HEAD HEAD^ -- login.py
    在这里插入图片描述

14.删除文件:

删除文件分为确定删除和误删
在项目中新建test.py文件,并添加和提交到仓库
确定删除处理:

  # 删除文件
  rm 文件名
  # git确定删除文件,对比添加文件git add 
  git rm 文件名
  # 删除后记录删除操作版本
  git commit -m '删除描述'

在这里插入图片描述

  • 误删处理:撤销修改即可
  # 删除文件
  rm 文件名
  # git撤销修改
  git checkout -- 文件名

在这里插入图片描述

三、分支

作用:

  • 区分生产环境代码以及开发环境代码
  • 研究新的功能或者攻关难题
  • 方便为新开发人员开辟环境
  • 解决线上bug
    特点:
    项目开发中公用分支包括master、dev
    分支master是默认分支,用于发布,当需要发布时将dev分支合并到master分支
    分支dev是用于开发的分支,开发完阶段性的代码后,需要合并到master分支

查看当前分支
git branch

创建并切换分支
git checkout -b dev

创建分支
git branch 分支名称

将dev分支合并到master,需要先切换到master
git checkout master
git merge dev

删除分支
git branch -d 分支名称

四、远程仓库创建项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加远程仓库并起别名origin
git remote add origin 远程仓库地址

[root@gitlab project_demo]# git branch
  dev
  dev1
* master

# 按照提示添加远程仓库
[root@gitlab project_demo]# git remote add origin git@gitee.com:bertwu_git/shopping.git

# 查看远程仓库 
[root@gitlab project_demo]# git remote -v 
origin	git@gitee.com:bertwu_git/shopping.git (fetch)
origin	git@gitee.com:bertwu_git/shopping.git (push)

将本机的公钥添加到gitee,因为走的ssh协议,需要免密
在这里插入图片描述
向远程仓库推送代码
git push -u origin 分支名称

[root@gitlab project_demo]# git push -u origin master

git clone 新项目第一次必须要克隆项目;

git push origin master

git pull origin master等价于
git fetch origin
git merge origin/dev

在这里插入图片描述
Tag标签
git标签就是对commit的一次快照,便于后续将特定时期的代码快速取出。在代码发布时可以使用标签发布。
对当前最新提交的代码创建标签,-a标签名称,-m标签描述

# 创建标签
[root@gitlab project_demo]# git tag -a "V2.0" -m '里程碑时代'

# 提交标签
[root@gitlab project_demo]# git push --tag

也可以指定commitID 打标签

git tag -a v2.2 CommitID -m "Messages"

在这里插入图片描述
查看标签

[root@gitlab project_demo]# git tag
V2.0

免密登录实现

  1. URL方式
原始地址:
https://gitee.com/bertwu_git/shopping.git

修改为:
https://用户名:密码@bertwu_git/shopping.git


添加仓库
git remote add origin https://用户名:密码@bertwu_git/shopping.git

git push origin master
  1. ssh 生成公钥,将公钥配置在远程仓库中。

git忽略文件

让 Git 不再管理当前目录下的某些文件。在项目中创建 .gitignore文件
通常情况下有如下文件可能需要忽略
1.程序运行时产生的垃圾文件
2.程序运行时产生的缓存文件
3.程序本地开发使用的图片文件
4.程序连接数据一类的配置文件

*.h
!a.h
files/
*.py[c|a|d]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值