Git
1、版本控制
学习git之前,需要明白一个概念:版本控制
版本控制是一种在开发过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复到以前的版本的软件工程技术。版本迭代
- 实现跨区域多人协同开发
- 追踪和记载一个或者多个文件的历史记录
- 组织和保护你的源代码和文档
- 统计工作量
- 并发开发、提高开发效率
- 跟踪记录整个软件的开发过程
- 减轻开发人员的负担,节省时间,同时降低人为错误
简单说就是用于管理多人协同开发项目的技术。
没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发中将会引入很多问题:如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性、以及软件的整合问题。
2、Git安装
下载:上官网下载Git对应操作系统的版本管理工具。【若下载速度慢的话,可以找国内镜像】
安装:基本无脑下一步即可!安装完毕后,环境变量会自动配置。
安装成功后在开始菜单中会有 Git
项,菜单中有3个程序。且右键时会出现Git相关的按钮。
Git Bash:Linux风格的命令行,使用最多。(推荐最多)
Git CMD:Windows风格的命令行。
Git GUI:图形化的Git,不建议初学者使用,尽量先熟悉常用命令。
3、Linux命令学习
常用的Linux命令(平时一定要多使用这些命令)
-
cd:改变目录。
-
cd ../:回到上一目录。
-
pwd:显示当前所在的目录路径。
-
ls(ll):列出当前目录中的所有文件,ll列出的内容更详细。
-
touch:新建一个文件。如:
touch index.js
就会在当前目录下新建一个index.js文件。 -
rm:删除一个文件。
rm index.js
就是把index.js文件删除。 -
mkdir:新建一个文件夹。
-
rm -r:删除一个文件夹。
rm -r src
就是删除src文件夹。rm -rf / :切勿在Linux中尝试!删除电脑中全部文件!(Linux中一切皆文件!)
-
mv:移动文件。
mv index.js src index.js
,将index.js文件移动到src文件夹下并命名为index.js。 -
reset:重新初始化终端
-
clear:清屏
-
history:查看命令历史
-
help:帮助
-
exit:退出
-
:表示注释
4、Git环境配置
4.1 查看配置
git config -l # 查看所有配置
git config --system --list # 查看系统配置
git config --global --list # 查看全局(用户)配置
4.2 设置用户名和邮箱(用户标识)
当你安装Git后首先要做的事就是设置你的用户名称和e-mail地址。这是非常重要的!因为每次Git提交都会使用该信息。
git config --global user.name "(你的用户名)"
git config --global user.name "(你的邮箱)"
用户配置会保存在 C:\Users\XXX\.gitconfig
,只适用于当前登录用户的配置
查询当前用户名和邮箱:
git config --global user.name
git config --global user.name
5、Git基本理论
Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage)、本地仓库(History)
如果加上远程的Git仓库(Remote Directory),就可以分为四个工作区域
- Working Directory:工作区,就是平时存放项目的地方。
- Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息。
- History:本地仓库,就是安全存放数据的位置,这里面有你提交的所有版本的数据。其中HEAD指向最新放入仓库的版本。
- Remote Directory:远程仓库,托管代码的服务器,可以简单地认为是你项目组中的一台电脑用于远程数据交换。
5.1 工作流程
git的工作流程一般是这样的:
- 在工作目录中添加、修改文件。
- 将需要进行版本管理的文件放入暂存区域。
- 将暂存区域的文件提交到git仓库。
因此,git管理的文件有三种状态:已修改(modified)、已暂存(staged)、已提交(committed)
6、Git项目搭建
6.1 创建工作目录与常用指令
工作目录(WorkSpace)一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文。
日常使用只要记住下图6个命令:
6.2 本地仓库搭建
搭建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。
6.2.1 创建本地仓库
-
创建全新的仓库,需要在需要Git管理的项目的根目录执行:创建一个项目文件夹
-
执行Git操作:
# 初始化当前目录为Git代码库 git init
-
执行后可以看到,仅仅在项目目录多出了一个
.git
目录,关于版本等的信息都在这个目录里面。
6.2.2 克隆远程仓库
-
克隆远程仓库,就是将远程服务器上的仓库完全复制一份到本地。
-
找到需要克隆的仓库,复制仓库链接,执行Git操作:
# 克隆一个项目和它的整个代码历史(版本信息)到本地 git clone https://gitee.com/XXX
-
执行后,会发现整个仓库都已经克隆到本地了。
7、Git文件操作
文件4种状态
-
Untracked:未跟踪,此文件在文件夹中,但并没有加入到git库,不参与版本控制。通过
git add
状态变为Staged
。 -
Unmodified:文件已经入库,为修改,即版本库中的文件快照内容和文件夹中完全一致。这种类型的文件有两种去处,如果它被修改,会变为
Modified
状态。如果使用git rm
移除版本库,则成为Untracked
文件。 -
Modified:文件已修改,仅仅是修改,并没有进行其他的操作。这个文件也有两个去处,通过
git add
可进入暂存Staged
状态,使用git checkout
则丢弃修改过,返回到Unmodified
状态,这个git checkout
即从库中取出文件,覆盖当前修改。 -
Staged:暂存状态,执行
git commit
则将修改同步到库中,这时库中的文件和本地文件又变成一致,文件为Unmodified
状态。执行git reset HEAD filename
取消暂存,文件状态为Modified
。
7.1 查看文件状态
上面的4种状态,通过以下命令可以查看文件的状态:
# 查看指定文件状态
git status [filename]
# 查看所有文件状态
git status
7.2 完整操作
# 添加所有文件到暂存区
git add .
# 提交暂存区中的内容到本地仓库,-m 是提交信息(提交信息必不可少,用来说明概括本次提交修改了的内容)
git commit -m ""
7.3 忽略文件
有时候我们不想把某些文件纳入到版本控制中,比如数据库文件、临时文件、设计文件等。
在主目录下建立 .gitignore
文件,此文件有如下规则:
- 忽略文件中的空行并以井号(#)开始的行将会被忽略。
- 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问好(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2})代表可选的字符串等。
- 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
- 如果名称的最前面是一个路径分隔符(/),表示要忽略此目录下的某个文件夹。
- 如果名称的最后面是一个路径分隔符(/),忽略目录下的所有文件
# 这是注释
*.txt # 忽略所有 .txt结尾的文件
!lib.txt # 但lib.txt除外(lib.txt不忽略)
/temp # 仅忽略项目根目录下的整个temp文件夹
build/ # 忽略build目录下的所有文件
doc/*.txt # 忽略doc文件夹下的所有以 .txt结尾的文件
8、使用码云 Gitee
-
注册登录码云,完善个人信息(官网:https://gitee.com/)
-
设置本机绑定SSH公钥,实现免密登录!
-
进入 C:\Users\(用户名).ssh 目录(若没有的话手动创建一个 mkdir .ssh)
-
生成公钥
ssh-keygen # 然后一直回车就可以了
-
然后会生成两个文件在
.ssh
文件夹下。
-
-
复制
id_rsa
中的内容,粘贴到Gitee
中。和码云绑定。 -
使用码云创建一个自己的仓库。
9、IDEA集成Git
-
新建项目,绑定Git
若要使该项目成为带Git的项目,那么该项目的根目录下应该有
.git
这个隐藏文件。使用git init
生成。 -
修改文件,使用IDEA操作Git
-
提交测试
10、Git分支
Git分支类似于科幻电影中的平行宇宙,如果两个平行宇宙互不干扰,那对现在的你也没什么影响。不过,在某个时间点,两个平行宇宙合并了,我们就需要处理一些问题了!
10.1 Git分支中常用的指令
# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 切换分支
git switch [branch]
git checkout [branch]
# 新建一个分支,但依然停留在当前分支
git branch [new-branch-name]
# 新建一个分支,并切换到该分支
git checkout -b [branch]
# 合并指定分支到当前分支(合并就类似于覆盖)
git merge [branch]
# 删除分支
git branch -d [branch-name]
# 删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]
10.2 合并分支(正常合并)
新建了一个分支 hot-fix
,里面内容与 master
分支一样。然后在 hot-fix
分支中新建一个 test.txt
文件,并add
和commit
。然后再切换分支到master
,然后执行合并操作。成功!
10.3 合并分支(冲突合并)
修改分支hot-fix
中的test.txt
文件,并add
和commit
。
再切换到master
分支,并修改test.txt
文件,并add
和commit
。
然后在master
分支上合并hot-fix
分支。合并冲突了,导致合并失败!这时候,Git不敢帮我们自动合并了。需要我们手动合并。
这时候,就要我们手动打开文件,合并内容。
<<<是当前分支
========= 等号上面是当前分支的代码,等号下面是另一个分支的代码
>>>是另一个分支
手动将需要的留下,删去不需要的代码。还要手动删除特殊标记!然后 保存退出-->add-->commit 。
参考资源:
- B站狂神说 https://www.bilibili.com/video/BV1FE411P7B3?p=1&spm_id_from=pageDriver
- B站尚硅谷 https://www.bilibili.com/video/BV1vy4y1s7k6?p=18&spm_id_from=pageDriver