Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git是Linus Torvalds 为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件
官网:https://git-scm.com
Git - Downloads
下载后,一路下一步安装即可(可以改变安装路径)
配置用户名:git config --global user.name "zhangsan"
配置邮件: git config --global user.email "[email protected]"
git config -l list
git version
工作区:需要git来管理的文件夹---可以是一个文件夹,也可以是项目的根目录
暂存区:把工作区的修改后的文档 通过 add 操作,提交到暂存区
分支: 存放 暂存区里通过 commit 操作提交过来的文档
仓库: 工作区+暂存区+分支
本地仓库:在自己的电脑中,供自己使用
远程仓库:团队成员共同使用
远程仓库的内容必须下载到本地仓库,文件必须从本地仓库才能提交到远程仓库
原理图:
进入某个文件夹内部:在地址栏输入cmd 回车 输入命令 git init 回车
当前文件夹就被初始化为仓库 ,称为工作区 里面多了隐藏文件.git
工作区不包含.git文件
暂存区及分支在.git中
查看文件是否添加到了暂存区,是否提交到了分支
输入命令:git status
执行后,如果文件的颜色是红色,说明红色名字的文件没有从工作区,add到暂存区里
git add . 添加全部文件
git add java.txt 添加某个文件
git commit -m "注释内容"
gitee.com
先注册账号、然后登录
创建仓库
创建仓库后会有如下地址:https://gitee.com/zhang_san/java2105.git
进入到本地仓库中
git remote add origin https://gitee.com/zhang_san/java2105.git
origin:是关联的远程仓库的一个简化名字
git remote -v
git push origin master
默认提交到originf对应的远程仓库的名字叫做master的分支里
当第一次从远程仓库下载代码及文件时使用,克隆操作会在拉取文件的同时,把当前文件夹初始化为本地仓库
git clone https://gitee.com/zhang_san/java2105.git
git pull origin master
分支:就是版本文件最终存放的位置
无论是本地仓库还是远程仓库,都默认使用的是master的分支
在企业中往往使用master分支存放已经确定(测试通过,无需修改)的文件
还未最终确定的代码往往使用新建的其他分支
操作:
git branch
【说明】默认只有一个名字为master的分支
使用哪个分支,哪个分支的颜色为绿色
git branch 分支名字
git checkout 分支名
dev1 和master分支 的内容是一致的
hello
zhangsan 提交一次
lisi 提交第二次
hello
yinzuen 提交一次
在master进行合并 ,合并dev1分支
合并会产生冲突
【强调】当前在哪个分支中,会把其他分支合并到当前分支,并没有把当前分支的内容合并到其他分支
这个文件里的内容,不会提交到仓库里,会被忽略掉
当前项目所在的根目录就是仓库
添加后,文件编程绿色的
默认的是master分支
弹出窗口如下:
本地仓库操作结束
把本地仓库的代码通过idea 上传到远程仓库
创建了远程仓库:仓库的名字要和项目名一致
https://gitee.com/zhang_san/mavenpro2.git
弹出窗口如下:
弹出窗口如下:
单击 OK 后 又弹出登录窗口
单击 Log In 按钮 ,进行登录
在弹出的窗口中,单击 push 按钮即可
就把本地的内容提交到了远程服务器上
当第一次从远程服务器上获取代码时,需要克隆clone操作
1、打开idea
2、进行如下操作
弹出窗口如下:
【说明】克隆的位置必须是一个空的文件夹,名字最好和远程仓库名相同
单击 Clone 按钮后, 则进行文件的下载,下载后弹窗如下:
单击Yes 打开下载的代码
先本地仓库 add commit
然后远程仓库 push 菜单如下:
在弹出的窗口中
本地的文件就上传到了服务器
拉取了服务器的最新代码
两个人修改了同一个文件,先push的人没有问题,后push的就会提示冲突
Emp.java
张三:修改了, 修改后 先add commit 再push 没问题
我:增了一个属性 当我进行push操作时
git检测:目前服务器上push的文件和我pull文件已经发生变化,说明别人改动,发生冲突
出现如下窗口:
通过合并解决冲突,单击Merge按钮 ,弹出窗口如下:
单击 Merge 按钮 后,弹窗如下:
然后重新push
在修改文件之前,先pull最新的文件,有效避免掉部分冲突
变更文件
代码Pull下来之后 在此基础上进行修改,想回到最初的拉下来状态,
要是发现代码需要想反回滚
通过Show History 就可以找到了
新增文件
直接delete删除
最后一次git的时候 使用Undo Commit(仅限于最后一次git来使用)
drop Commit (任意一条git都可以使用 不会在git上留下新的抹除代码的记录) 使用最多
点击之后点击右下角的undo 就会再次出现
revert Commit(任意一条git都可以使用 但会在git上留下新的抹除代码的记录)
drop Commit 和 revert Commit 的区别就是一个回滚代码不会留下记录 一个会留下记录
【注意】一般不建议将中间的记录进行回滚因为会产生Merge的情况,这种合并情况的后果可能导致项目无法运行
如果回滚出现Merge的情况想终止 先点击close 但是并没有结束
点击三角形感叹号
点击Abort Rebase 才是结束
soft
在选定提交之后所做的所有更改都在缓存区commit的内容都会保留,其新增文件+文件变更都在缓存区
mixed
在选定提交之后所做的更改将被保留,但不会暂存以进行提交,commit的内容都会保留,新增文件在工作区,文件变更在暂存区
hard
在选定提交之后所做的所有更改都将被丢弃(暂存和已提交) commit的内容 + 暂存区的内容全部被丢弃
keep
在选定提交之后的已commit内容将被丢弃,但未commit的部分将保留 commit部分内容被丢弃,未commit部分保留
Git一般都是保护远程分支的,所以我们需要reset + force push
直接强推 然后再正常的提代码