简介
Git:分布式版本控制工具
优点:
- 速度快
- 设计简单
- 对非线性开发模式强力支持
- 完全分布式
Git的安装与常用命令
由于本教程的示范都以Git Bash 中的操作为例,所以需要先了解一些Linux 常用的命令
ls/ll ---查看当前目录
cat 文件名 ---查看文件内容
touch 文件名 ---创建文件
vi 文件名 ---编辑(文本)文件
clear ---清空控制台内容
Git下载
下载地址:点击打开


打开安装程序后依次点击 Install -> Finish
准备工作
基本配置
- 在任意文件夹或桌面右键选择
Git Bash 或搜索Git Bash 打开

-
设置用户信息(每次Git 提交都要用) ####将以下内容稍加修改粘贴至Git Bash中####
git config --global user.name “你的用户名”
git config --global user.email "你的邮箱地址"
-
查看是否配置成功 git config --global user.name
git config --global user.email
解决中文乱码问题(新版一般不出现,选做)
-
打开 Git Bash 输入以下内容 git config --global core.quotepath false
-
在 ${git_home}/etc/bash.bashrc 文件末尾加入以下两行(${git_home} 为Git 的安装目录,如图) export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"

获取本地仓库
要使用Git 对代码进行版本控制,首先需要获得本地仓库
- 在电脑任意位置创建空文件夹(
MyRepository 为例) - 进入这个文件夹,右键打开
Git Bash - 执行命令
git init - 成功后可以在文件夹内看到
.git 隐藏文件夹(需要设置显示隐藏文件夹)

常用命令
Git 工作目录(本地仓库文件夹)下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git 的命令而发生变化

1.查看修改状态(status)
- 作用:查看被
git 管理的文件的状态(暂存区、工作区) - 命令:
git status
2.添加工作区到暂存区
- 作用:添加工作区一个或多个文件的新增或修改到暂存区
- 命令:
git add 单个文件名/通配符 - 将所有修改文件加入暂存区:
git add .
3.提交暂存区文件到本地仓库
- 作用:提交暂存区文件到本地仓库的当前分支
- 命令:
git commit -m '注释内容/本次提交的描述'
4.查看提交日志
-
作用:查看提交记录 -
命令:git log [option]
5.版本切换/版本回退
- 作用:版本切换
- 命令:
git reset commitID --hard
- 需要将
commitId 替换为git log 后显示的第一段内容 - 查看已经删除的记录
6.添加文件至忽略列表
一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以在工作目录中创建一个名为.gitignore 的文件(文件名称固定),列出要忽略的文件模式。下面是一个示例:
# 忽略所有以.a为后缀的文件
*.a
# 在忽略.a文件后仍想跟踪某一特定.a文件(lib.a)
!lib.a
# 只忽略当前目录下的TODO文件
/TODO
# 忽略build子目录下的所有文件
build/
# 忽略doc一级子目录中的所有.txt文件
doc/*.txt
# 忽略doc子目录中的所有.txt文件
doc/**/*.txt
常用命令演示
1.在仓库文件夹内新增/修改文件

2.查看状态(可忽略)
命令:git status

发现有一个名为code1.txt 的文件处在工作区
3.将新增/修改的文件加入工作区
命令:git add .
4.查看状态(可忽略)
命令:git status

发现有一个名为code1.txt 的文件处在缓存区
5.将修改的文件提交至本地仓库
命令:git commit -m '新增文件code1.txt' 
6.查看日志/提交记录
命令:git log

7.以更加清晰的方式查看日志/提交记录
命令:git log --all --pretty=oneline --abbrev-commit --graph

8.修改code1.txt 文件内容

9.重新进行add 和commit 操作
命令:
git add . git commit -m '修改code1.txt'

10.查看提交记录

11.回退到上一版本(3fe20d3)
命令:git reset 3fe20d3 --hard

分支
几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug 修改、开发新的功能,以免影响开发主线
常用命令
查看本地分支
命令:git branch
创建本地分支
命令:git branch 分支名
切换分支
命令 :git checkout 分支名
创建并切换分支
命令 :git checkout -b 分支名
合并分支
-
作用:把某一分支的内容合并到当前分支 -
命令:git merge 分支名
删除分支
不能删除当前所在的分支,只能删除其他分支
命令:
git branch -d 分支名 --检查并删除分支git branch -D 分支名 --不检查,强制删除分支
解决冲突
当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下:
- 手动处理文件中冲突的地方
- 将解决完冲突的文件加入暂存区(
add ) - 提交到仓库(
commit )
开发中分支使用原则与流程
几乎所有的版本控制系统都以某种形式支持分支使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线
在开发中,一般有如下分支使用原则与流程:
-
master (生产)分支线上分支,主分支,中小规模项目作为线上运行的应用对应的分支 -
develop (开发)分支是从 master 创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到master 分支,准备上线 -
feature/xxxx 分支是从develop 创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop 分支 -
hotfix/xxxx 分支,从master 派生的分支,一般作为线上bug 修复使用,修复完成后需要合并到master 、test 、develop 分支

常用命令演示
查看当前分支
命令:git branch

目前只有master 分支
创建/切换本地分支
命令 :git checkout -b 分支名

创建并切换至dev 分支
查看当前分支
命令:git branch

合并分支
- 在
dev 分支新建code2.txt 文件

- 依次执行
git add . ,git commit -m '新增文件code2.txt'

-
切换至master 分支:git checkout master -
合并dev 分支至master 分支:git merge dev  -
此时master 分支内就有了dev 分支中创建的文件

查看整个过程
命令:git log --all --pretty=oneline --abbrev-commit --graph
删除分支
命令:git branch -d dev

查看分支
命令:git branch 
dev 分支已被删除
远程仓库
Git 中存在两种类型的仓库,即本地仓库和远程仓库
添加远程仓库
远程仓库以Gitee (码云)提供的托管服务为例
-
注册码云 点击打开 -
点击”新建仓库“  -
创建Git_Test 仓库

-
配置SSH 公钥 在Git Bash 中输入命令ssh-keygen -t rsa 生成公钥,中间过程一路点回车

- 在
Git Bash 中输入命令cat ~/.ssh/id_rsa.pub 查看公钥

- 将红框部分的公钥粘贴至
Gitee -设置-安全设置-SSH 公钥

-
验证是否配置成功 在Git Bash 中输入命令:ssh -T git@gitee.com ,首次执行需要输入yes 确认

绑定远程仓库
- 在
Gitee 找到自己的仓房,复制SSH 地址

- 在
Git Bash 中输入命令git remote add <远端名称> <仓库路径>
- 远端名称:给这个远程仓库起的名字
- 仓库路径:复制的
SSH 地址

查看远程仓库
在Git Bash 中输入命令git remote

推送到远程仓库
完整命令:git push [-f] [--set-upstream] [远端名称 [本地分支名] [:远端分支名] ]
- 如果远程分支名和本地分支名称相同,则可以只写本地分支
git push test master -f 表示强制覆盖--set-upstream 推送到远端的同时并且建立起和远端分支的关联关系
git push --set-upstream test master - 如果当前分支已经和远端分支关联,则可以省略分支名和远端名

此时刷新Gitee ,就能看到推送的内容

从远程仓库克隆
如果已经有一个远端仓库,我们可以直接clone 到本地
命令:git clone <仓库路径> [本地目录]
- 本地目录可以省略,会自动生成一个目录(在哪个文件夹打开的
Git Bash 就在哪生成)


从远程仓库中抓取和拉取
远程分支和本地的分支一样,我们可以进行merge 操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。
解决合并冲突
在一段时间,A、B 用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突。A 用户在本地修改代码后优先推送到远程仓库,此时B 用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时B 用户晚于A 用户,故需要先拉取远程仓库的提交,经过合并后才能推送到远端分支(拉取后的操作和本地解决冲突相同)
在Idea 中使用Git
在Idea 中配置Git
安装好IntelliJ IDEA 后,如果Git 安装在默认路径下,那么idea 会自动找到git 的位置,如果更改了Git 的安装位置则需要手动配置下Git 的路径
Ctrl+Alt+s 打开设置窗口,找到Version Control (版本控制)下的git 选项:

在最上方选择Git 可执行文件的路径,之后点击测试,如果出现Git 的版本,就表示配置成功
在Idea 中操作Git
场景:本地已经有一个项目,但是并不是git 项目,我们需要将这个放到码云的仓库里,和其他开发人员继续一起协作开发
新建远程仓库
操作见上:远程仓库-添加远程仓库
初始化本地仓库
选择某一个项目打开后,点击版本控制-创建Git 仓库,选择本项目

设置远程仓库



点击确定后会让你输入Gitee 的用户名和密码以确认身份

提交到本地仓库


推送到远程仓库
在Idea 的控制台中输入git pull origin master --allow-unrelated-histories ,否则可能会推送失败



克隆远程仓库到本地

创建分支

切换分支

注意事项
- 切换分支前先提交本地的修改
- 代码及时提交,提交过了就不会丢
|