文章目录
一、Git介绍
Git用于分布式版本控制。
二、Git工作流程
三、Git安装与常用命令
1.Git安装与环境配置
下载地址:https://git-scm.com/downloads
按照默认选择安装程序即可。
安装之后,在桌面点击鼠标右键,出现下图两个选项则说明安装成功。其中GUI表示图形化界面,Bash表示命令行。
安装Git之后,首先要设置用户名和email地址,因为每次Git提交都会使用该用户信息。
1. 打开Git Bash
2. 设置用户信息
# 更换成自己的用户名和邮箱
git config --global user.name "username"
git config --global user.email "hello@tom.com"
查看配置信息:
git config --global user.name
git config --global user.email
3. 为常用指令配置别名(可选)
有些常用的指令参数很多,每次都需要输入很多参数,可以通过设置别名来简化。
- 打开GitBash,执行
touch ~/.bashrc
- 在
.bashrc
文件中输入以下内容:
# 用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
# 用于输出当前目录所有文件及基本信息
alias ll='ls -al'
- 打开GitBash,执行
source ~/.bashrc
4. 解决GitBash乱码问题 - 打开GitBash执行下面命令:
git config --global core.quotepath false
- ${git_home}/etc/bash.bashrc 文件最后加入下面两行:
export LANG="zh-CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
2.获取本地仓库
要使用Git对代码进行版本控制,首先需要获得本地仓库:
- 在电脑的任意位置创建一个空目录,作为本地Git仓库
- 进入这个目录,点击右键打开Git Bash窗口
- 执行命令
git init
- 创建成功后可在文件夹下看到隐藏的
.git
目录
3.基础操作指令
Git工作目录(.git文件所在目录)下,对于文件的修改、增加、删除会存在几个状态,这些修改的状态会随着我们执行Git的命令发生变化。
- 工作区 → 暂存区:git add
- 暂存区 → 本地仓库:git commit
-
查看状态
- 作用:查看修改状态(在暂存区还是工作区)
- 命令:git status
-
从工作区添加到暂存区
- 作用:添加工作区的一个或多个文件的修改到暂存区
- 命令:git add 文件名,或者
git add .
表示添加所有文件
-
从暂存区提交到本地仓库
- 作用:提交暂存区内容到本地仓库的当前分支
- 命令:git commit -m “注释内容”
-
查看提交日志
-
git log [option]
options可选参数如下:--all 所有分支 --pretty=oneline 将提交信息显示为一行 --abbrev-commit 使得输出的commitId更简短 --graph 以图的形式显示
-
-
版本回退
- 作用:版本切换
- 命令:git reset --hard commitID(id是前面配置的简略的输出也可以)
- commitID 可以使用前面配置的
git-log
或git log
指令查看 - 使用
git reflog
可以查看已经删除的提交记录
- commitID 可以使用前面配置的
-
添加文件至忽略列表
一般我们会有一些文件无需纳入Git的管理,通常是一些自动生成的文件,比如日志文件、Idea项目中的.idea等。此时可以在工作目录中创建一个名为.gitignore
的文件(文件名称固定),在文件中列出要忽略的文件模型。下面是一个示例:
# 忽略以.a结尾的的文件
*.a
# lib.a这个文件不忽略,其它.a的忽略(结合上一句)
!lib.a
# 忽略TODO文件
/TODO
# 忽略名为build的文件夹
build/
# 忽略doc目录下的所有.txt文件
doc/*.txt
# 忽略doc目录及其字目录下的所有.pdf文件
doc/**/*.pdf
4.分支
使用分支可以从开发主线上分离开来,修改重大Bug、开发新的功能,避免影响开发主线。
- 查看本地分支
- 命令:git branch
- 创建本地分支
- 命令:git branch 分支名
- 切换分支
- 命令:git checkout 分支名
- 创建并切换:git checkout -b 分支名
- 合并分支
- 作用:一个分支上的提交可以合并到另一个分支
- 命令:先切换到master(一般都是合并到master分支),然后执行:
git merge 分支名
- 删除分支
不能删除当前分支,只能删除其它分支- 命令:
git branch -d b1 删除其它分支时,需要做各种检查
git branch -D b1 不做任何检查,强制删除
- 命令:
- 解决冲突
两个分支上对文件的修改可能会存在冲突,例如同时修改了同一文件的同一行,这时就需要手动解决冲突,步骤如下:- 处理文件中冲突的地方
- 将解决完冲突的文件加入暂存区(git add)
- 提交到仓库(git commit)
5.开发中分支使用原则与流程
- master(生产)分支
线上分支,主分支,在中小规模项 目中,作为线上运行应用对应的分支。 - develop(开发)分支
从master创建的分支,一般作为开发部门的主要开发分支,如果没有其它并行开发不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要合并到master分支,准备上线。 - feature/xxxx分支
从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后再合并到develop分支。 - hotfix/xxxx分支
从master创建的分支,一般作为线上修复bug使用,修复完成后合并到master、test、develop分支。 - 一些其它分支,例如test分支(用于代码测试)、pre分支(预上线分支)等等。
四、Git代码托管服务
使用Gitee作为远程仓库,地址:https://gitee.com/
1.创建远程仓库
注册、登录Gitee,并创建仓库
2.配置SSH公钥
- 打开GitBash,输入
ssh-keygen -t rsa
生成SSH公钥,不断回车(如果公钥已存在,会覆盖)
- Gitee账户设置公钥
- 获取公钥:
cat ~/.ssh/id_rsa.pub
- 在Gitee个人设置页面中,设置公钥
- 验证配置是否成功:
ssh -T git@gitee.com
,输入yes
3.操作远程仓库
首先要绑定本地仓库和远程仓库,进入Gitee仓库并且复制地址(SSH)。
再打开GitBash,输入以下内容:git remote add origin 远程仓库地址
其中origin
是自己起的远程仓库名称(不用和Gitee中的名称一致,一般规范就叫做origin
)
- 查看远程仓库:
git remote
- 推送到远程仓库:
git push [-f] [--set_upstream] [远端名称 [本地分支名][:远端分支名]] git push origin master:master -f 表示强制覆盖,一般不用 # 远程分支名和本地分支名相同,可以只写本地分支名 git push origin master # --set_upstream推送到远端的同时,建立当前分支和远端分支的关系 # 当master已经存在远端时,会推送不了,需要建立对应关系 git push --set_upstream origin master # 如果当前分支已经和远端分支关联,则可以省略分支名和远端名 git push 将master分支推送到已关联的远程分支
- 从远程仓库克隆
如果已经有一个远端仓库,可以直接clone到本地。
命令:git clone <仓库路径> [本地目录]
仓库路径是SSH路径,本地目录可以省略,会自动生成一个目录 - 从远程仓库中抓取和拉取
远程分支和本地分支一样,可以进行merge操作,只是需要先把远程仓库里的更新都下载到本地,再进行操作。- 抓取命令:git fetch [remote name] [branch name]
- 抓取就是将仓库里的更新都抓取到本地,但不会进行合并
- 如果不指定远端名称和分支名称,则抓取所有分支
- 拉取命令:git pull [remote] [branch name]
- 拉取就是将远程仓库的修改拉到本地并自动进行合并,相当于 fetch+merge
- 如果不指定远端名称和分支名称,则抓取所有分支并更新当前分支
- 拉取中的merge可能会有冲突,需要按照上面说的方法解决冲突
- 抓取命令:git fetch [remote name] [branch name]
五、使用idea操作Git
- 首先打开Idea–设置–Version Control,配置本地下载的Git路径Git/bin/git.exe,可点击Test按钮测试是否设置成功。
- 然后创建一个Gitee的远程仓库,并且复制仓库的SSH路径。
- 在Idea中打开本地仓库,创建.gitignore文件,并将.idea文件到其中
- 初始化本地仓库,按照下图选择创建Git仓库,并且选择本地仓库路径(相当于git init)
- 提交
下图中,绿色对号表示提交到本地仓库,蓝色箭头表示pull
选择需要提交的文件,由于已经有.gitignore文件,因此可以全选提交。并在Commit Message框中输入备注信息。之后一路选择确认提交即可。
- 查看日志
- 推送
origin是给远程仓库起名称,url是Gitee中远程仓库的SSH路径。
- 从远端克隆仓库
填写SSH路径和本地路径
- 解决冲突
一般建议先pull再push,如果本地与云端的代码修改了同一文件的同一行,则在commit时会出现冲突。因此,每次提交前,先pull拉取远程仓库中最新版本的代码,出现冲突后(因为pull包含了merge),在本地解决冲突,再add、commit和push。 - 分支操作
创建分支:在Idea–Version Control–Log页面,右键创建即可
总结:
六、多人开发场景
- 组长基于项目创建本地仓库,创建远程仓库,推送项目到远程仓库
- 每一个组员从远程克隆项目到Idea中,这样每个组员电脑上都有一个副本,进行开发。假设有组员A和B。
- 组员A修改工作区,提交到本地仓库,再推送到远程仓库。组员B可以从远程仓库获取最新代码。
- 组员A和B修改了同一文件的同一行,需要解决冲突。
七、补充
- 切换分支前先提交本地的修改
- 代码及时提交,提交过了就不会丢
- Idea集成GitBash作为Terminal
参考:黑马程序员Git全套教程 https://www.bilibili.com/video/BV1MU4y1Y7h5/