Git简介
Git工具的出现,可以帮助开发者完成多人协同开发,是一个开源的分布式版本控制系统
版本控制:
用于记录所有操作者的操作过程
分布式:
分布式是相比较集中式来说
集中式存在的弊端:
1.当代码仓库节点宕机,整个服务停止
2.对于单个代码仓库节点,可能会存在 请求压力过大
3.风险较大,当节点故障数据丢失,所有的代码损失
分布式:将所有的代码,进行分开保存,并且会实现数据的备份,对于节点请求压力进行分摊
Git使用
本地配置
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
git 区域及状态
git区域
工作区(working directory):项目的根目录,不包括.git在内的其他文件
暂存区(stage area):是一个看不见的区域,git add命令就是将文件添加到该区域,git add .表示添加所有,git status命令可以查看当前暂存区的文件,文件标识改了,(没有加号重启一下)
本地仓库(repository):指在工作目录下创建的一个.git目录,这是一个隐藏目录。git commit -m "日志"名可以将暂存区的代码提交到本地仓库。git push -u origin master就是将本地仓库的代码推送到远程仓库、
git文件的3种状态(尝试查看文件图标变化)
已修改(modified),存在于工作区,文件修改后的状态
已暂存(staged),存在于暂存区,采用git add命令后的状态
已提交(committed),存在于本地仓库,采用git commit命令后的状态
常见命令
git init #初始化
git status # 查看当前状态
git add . 提交当前所有待提交文件到暂存区
git add file 指定文件提交到暂存区
git commit -m "提交信息" 提交所有暂存区的文件到本地仓库
git commit file -m "提交信息" 提交指定文件到本地仓库
git log 查看当前仓库中所有commit提交历史日志
git reflog 简化查看当前仓库中所有commit提交历史日志
git reset --hard 版本编号 回退到某个本地版本,x为git log中出现的hash值的前七位
On branch master -> 当前git所在的分支
No commits yet -> 没有提交
Untracked files:
(use "git add <file>..." to include in what will be committed)
gittest.txt -> 当前新增的文件 仓库中并没有保存该文件的相关信息
nothing added to commit but untracked files present (use "git add" to track)
代码提交规范
对于git add 命令是如果一个代码,编写完成后,需要先将其通过该命令添加到暂存区,同时要求该代码是测试通过的,没有语法错误,同时此时注意不能直接再进行 git commit命令
git commit 命令执行时机:当一个代码小模块开发完成后,会涉及到多个代码时,对于该模块中所涉及到的代码进行一次性提交,提交时,其提交说明需要注释相关信息 当前模块功能 以及状态 或者是 对于之前已经提交过的代码进行Bug修复 ,需要说明Bug的修复内容 以及状态
注意:去公司提交代码时,先了解提交规范
Git本地仓库和码云进行关联
码云官网地址:
登录注册
首次登录需要注册,注册以后使用手机号验证并在设置中添加个人邮箱
注册后创建仓库
仓库设置
在创建完仓库之后,用户可以通过如下方式,可以向仓库提交第一行代码。
Git帮助连接 点击跳转- Gitee.com
此处我们以用户账号下命名为 HelloGitee 的仓库为例。对应的仓库地址为:https://gitee.com/用户个性地址/当前仓库名.git,在实际实践中,你可以将用户个性地址替换为自己的地址。
Gitee和Git本地仓库连接方式1 先克隆 后提交
先将仓库clone到本地,修改后再push到 Gitee 的仓库
该方式会避免一些冲突问题
git clone https://gitee.com/用户个性地址/HelloGitee.git #将远程仓库克隆到本地
# 样例:
git clone https://gitee.com/act_xing/bigdata_git_test.git
在克隆过程中,如果仓库是一个私有仓库,将会要求用户输入 Gitee 的账号和密码。按照提示输入即可。
当然,用户也可以通过配置本地的git配置信息,执行git config命令预先配置好相关的用户信息,配置执行如下:
注意:之前执行过可以不用再执行
git config --global user.name "你的名字或昵称"
git config --global user.email "你的邮箱"
在 Gitee 平台中,强烈建议您在【设置-多邮箱管理】中的“提交邮箱”与上面配置信息中的邮箱地址保持一致,这样平台就能及时地统计您在平台中提交代码的贡献了。
修改代码后,在仓库目录下执行下面命令
cd 仓库名 # 进入到当前克隆的本地目录
# 可以添加文件到当前目录中 之后再进行提交到本地仓库 再到远程仓库
git add . #将当前目录所有文件添加到git暂存区
git commit -m "my first commit" #提交并备注提交信息
git push origin master #将本地提交推送到远程仓库
注意:git push origin master 命令中
origin 是git远程地址的连接代称
master 是远程地址主分支
方法2、本地初始化一个仓库,设置远程仓库地址后再做push
和方法1的差别,在于先创建仓库。
$ git init
# 在当前本地Git项目目录中执行:
$ git remote add origin https://gitee.com/用户个性地址/HelloGitee.git
# 样例 将远程的URL赋予给origin变量名
git remote add origin https://gitee.com/act_xing/bigdata28gittest2.git
这样就完成了版本的一次初始化。
注意:如果本地仓库中已经提交了部分记录 (git commit -m “”),同时远程仓库初始化时,也会存在有文件,此时避免文件冲突,以远程仓库为主,将远程仓库中的文件更新到本地,再将本地的文件提交到远程仓库
接下去,进入你已经初始化好的或者克隆仓库的目录,然后执行:
$ git pull origin master
修改/添加文件,否则与原文件相比就没有变动。
$ git add .
$ git commit -m "第一次提交"
$ git push origin master
然后如果需要账号密码的话就输入账号密码,这样就完成了一次提交。此时,你可以在你的个人面板、仓库主页查看到你的提交记录。
在新建仓库时,如果在 Gitee 平台仓库上已经存在 readme 或其他文件,在提交时可能会存在冲突,这时用户需要选择的是保留线上的文件或者舍弃线上的文件,如果您舍弃线上的文件,则在推送时选择强制推送,强制推送需要执行下面的命令(默认不推荐该行为):
$ git push origin master -f
如果您选择保留线上的 readme 文件,则需要先执行:
$ git pull origin master
Gitee和IDEA连接使用
idea配置
在IDEA中添加Gitee账号
Idea创建Maven项目
Gitee创建仓库
本地进行融合所有文件
1.找到一个本地目录对远程仓库进行克隆
git clone https://gitee.com/act_xing/bigdata28gittest3.git
2.将克隆后的目录中所有文件 包括 .git目录 readme.md等 剪切到 Maven项目目录中
IDEA中操作Git完成代码同步
添加暂存区
提交本地仓库
提交远程仓库
重置到任意一个历史节点
Git分支
什么是分支:
对于一个开发的线性的单向的过程称为一个分支,当一个Git仓库创建好,默认会产生一个master 主分支,所有的提交流程都在主分支中进行增加或回退
分支命令:
git branch 查看当前git项目中的所有分支 其结果用*标记的是当前所在的分支
git branch dev 创建一个分支名为 dev的分支
git checkout dev 切换分支到devs 上
git merage dev 将dev融合到master上
注:当在master上创建一个分支dev,那么dev中数据的状态和master当前状态一致,之后会各自变化
当在分支内部开发的代码,不会影响其他分支 ,同时git log仅仅只能查看当前分支中的内容
多分支开发作用:
在企业开发过程中,比如以银行软件开发过程为例,
master分支表示当前软件的主要开发过程
dev_icbc 分支表示在当前master分支软件基础上做定制化开发工商银行提供的需求
dev_abc 分支表示在当前master分支软件基础上做定制化开发农业银行提供的需求
创建分支
切换分支
多分支展示
对于分支进行融合操作
分支冲突
分支冲突:当多个分支进行融合时,那么会有一些文件相同,其内容也可能相同,于是就会产生冲突问题
将冲突的代码进行选择保留那些部分即可
提交冲突
当A和B同时提交一个文件到远程仓库,那么在远程仓库会存在有两份不同的文件,此时就会产生冲突问题