【狂神说Java】Git最新教程通俗易懂

版本控制
概念
版本控制、版本迭代、版本管理器
相关软件
Git、SVN、CSV、VSS、TFS
版本控制软件分类
1.本地版本控制:适合个人用
2.集中版本控制:
- 所有的版本数据都存在服务器上,协同开发者从服务上同步更新或上传自己的修改。代表软件:SVN、CSV、VSS。
- 优缺点:用户本地只有自己以前同步的版本,不联网的话,就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。
- 所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样会丢失所有的数据,当然可以定期备份。
3.分布式版本控制系统:git
- 每个用户都拥有全部的代码。有安全隐患。
- 不会因为服务器损坏或者网络问题,造成不能工作的情况。
- 所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有的版本数据,可以离线在本地提交,只需要在联网是push到相应服务器或者其他用户那里。由于每个用户那里保存的都是所有的版本书记,只要有一个用户的设备没问题,就可以恢复所有的数据,但这增加了本地存储空间的占用。
4.git和svn的区别
- git是分布式,svn是集成式
- 命令其实差不多
Git历史
linux缔造者linux torvalds开发出了Git。
Git免费、开源,分布式版本控制系统。
Git环境配置
下载:
官网可以下载很慢;可以找镜像下载;
卸载:
1.清理环境变量
2.程序与软件中直接卸载即可
安装:
无脑下一步即可(路径选自己的路径)
检查:
软件中有git的三个程序;
任意文件夹下右键也可以看到对应的程序。
mac在终端中输入 git --version
which git
Linux常用命令
cd #改变目录
cd.. #退回目录
pwd #显示路径
clear #清屏
cls #清屏
ls #列出目录中文件
touch #创建文件
rm #删除文件
mkdir #创建文件夹
rm -rf #递归删除
rm -r #删除文件夹
mv #移动文件
reset #重新初始化终端
history #显示历史命令
help #帮助
exit #退出
Git配置
git config --global user.name "lijun" #设置user.name
git config --global user.email "jun@qq.com" #设置user.email
git config -l #查看git配置
git config --system --list #win查看系统git配置
git config --global --list #(win/mac)查看本地git配置
Git创建本地仓库
mkdir mygit
cd mygit
git init #Git创建初始化本地仓库
Git基本理论
Git的3个工作区域
- 工作目录(working directory,是你平时存放代码的目录)
- 暂存区域(stage/index,用于存放临时的改动,事实它是一个文件,保存即提交到文件列表信息)
- 资源仓库(Repository/Git directory)
- 本地资源仓库(下图的History)
- 远端资源仓库(Remote,托管代码的服务器,如:GitHub|Gitee)
不同区域的转换关系如下:

Git的工作流程 :
- 在工作目录(working directory)中添加、修改文件;
- git add #将需要进行版本管理的文件放入暂存区
- git commit #将暂存区域的文件提交到git仓库
Git管理的文件有三种状态:
- 已修改modified
- 已暂存staged
- 已提交committed

Git项目搭建
两个搭建方法:
1.git init #本地新建仓库
2.git clone url #克隆远程仓库
日常使用6个命令:
- git add #把文件从工作区加到暂存区
- git commit #把文件从暂存区加到本地仓库
- git push #从本地仓库推到远端仓库
- git clone #克隆远端仓库
- git checkout #丢弃修改,回滚操作
- git pull #
- git commit -m "注释" #comment自己的修改,提交暂存区的内容到本地仓库
Git文件操作
文件4种状态(untracked|unmodify|modified|staged)
- Untracked:未跟踪,此文件在文件夹中,但并没有加入到git 库,不参与版本控制。通过 git add 状态变为 staged
- Unmodify:文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致.这种类型的文件有两种去处,如果它被修改,而变为 Modified ,如果使用 git rm 移出版本库,则成为 untracked 文件
- Modified:文件已修改,仅仅是修改,并没有进行其他的操作。这个文件也有两个去处,通过 git add 可进入暂存 git add staged 状态,使用 git checkout ,则丢弃修改过,返回到unmodify 状态。这个 git checkout 即从库中取出文件,覆盖当前修改!
- Staged:暂存状态。执行 git commit 则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为 unmodify 状态。执行 git reset HEAD filename 取消暂存,文件状态为Modified
查看文件状态:
- git status #查看所有文件状态
- git status [filename] #查看文件filename状态
- git add . #添加所有文件到暂存区
忽略文件
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,涉及文件等。
在目录下.gitignore文件中进行设置忽略,文件书写规则如下:
- 忽略文件中的空行或以井号(#)开始的行将会被忽略。
- 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号[abc]代表可选字符范围,大括号 {string1,string2.} 代表可选的字符串等。
- 名称的最前面有一个感叹号(!),表示例外规则 ,将不被忽略。
- 名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
- 名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)
*.txt #忽略所有•txt结尾的文件
!lib. txt #lib.txt除外,其他都忽略
/temp #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/ #忽略bui1d/日录下的所有文件
doc/*.txt #会忽略doc/notes.txt,但不包括 doc/server/arch.txt
使用码云Gitee
- 注册账号,完善个人信息
- 设置本机绑定SSH公钥,实现免密码登录。
- 将公钥信息public key添加到码云账户中即可
- 使用码云创建一个自己的仓库
- git clone url #远端仓库克隆到本地
IntelliJ IDEA中集成Git
GIT分支Branch(平行宇宙)
分支的例子
- master #主分支,master是分支名
- dev #开发分支develop
- version1 #版本1的分支
Git分支的常用命令
- git branch #查询本地所有分支
- git branch [branch-name] #新建分支
- git checkout -b [branch] #新建分支,并切换新分支
- git branch -r #查询本地+远程分支
- git merge [branch] #合并某分支,到当前本地分支上
- git push origin --delete [branch-name] #删除远程分枝
- git branch -dr [remote/branch] #删除远程分枝
- git branch -d 分支名 #删除分支
- 修改冲突后的文件后重新提交,选择保留哪个代码即可。
- master主分支需要保证非常稳定。