1.Git简介
2.Git的基本使用
3.远程仓库操作
4.IDEA中操作Git
Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的项目(项目不仅仅是java代码,任何一个文件都可以用git进行管理,这里的项目指的是一组文件的集合)。
分布式管理的简单理解:(把数据分散存储在若干个存储设备中)
例如:
张三 、李四 、王五是同一个工作组的人员T0组,每个人有一个自己的电脑PC,他们同时去做一个项目P_1,那么每个人本地PC中都有P_1这个项目,张三负责P_1项目中的用户管理模块,李四负责P_1项目中的客户管理模块,王五负责P_1项目中的订单管理模块。每个人写的代码是不一样的,这时候创建三个项目是不合适的。
那到底应该怎么做呢? 应该用Maven去创建一个聚合项目叫P1,里面至少聚合了三个子项目,分别是客户管理,用户管理和订单管理…每个人开发自己的子项目,即使这样又出现了一个新的问题,在各自开发子项目的时候避免不了要涉及到各项目之间的交互问题。这是我们可以让每个人都把代码上传到一个服务器上,让这个服务器共享数据,客户端只需要上传自己的子项目,下载自己需要的项目即可,避免重复提交。例如张三只需要下载客户管理和订单管理到自己客户端即可,在完成自己的子项目后,提交已经修改完成的用户管理 到服务器即可,不需要将下载的客户管理和订单管理再次提交。其他项目也是如此…
这样就实现了同一份代码可以存储到各个不同的电脑上,从而实现了分布式管理。
Subversion(简称 SVN,基于 Unix,只能做局域网的版本控制)、CVS (部分银行还在使用)等
协同修改
多人并行不悖的(例如服务器有一个文件,里面有3行数据,张三和李四都下载了下来,并且都加了一行数据,但是张三和李四都认为现在一共有4行数据但是服务器实际上是5行数据 ,这么做就是相悖论的,是错误的,在修改同一个文件的时候应该排队,这样就不会出现错误)修改服务器端的同一个文件。
数据备份
不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。
版本管理
在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间,提高运行效率。这方面 SVN 采用的是增量式管理的方式,而 Git 采取了文件系统快照的方式。
权限控制
对团队中参与开发的人员进行权限控制。
对团队外开发者贡献的代码进行审核——Git 独有。
历史记录
查看修改人、修改时间、修改内容、日志信息。
将本地文件恢复到某一个历史状态。
分支管理
允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。
集中式版本控制工具示意图
https://git-scm.com/
一路下一步即可,【注意:要将git安装到一个非中文的文件夹中】
大部分操作在本地完成,不需要联网
尽可能添加数据而不是删除或修改数据
分支操作非常快捷流畅
与 Linux 命令全面兼容
代码托管中心的任务:维护远程库
局域网环境下
GitLab 服务器
外网环境下
GitHub
码云(gitee)
输入git --version
输出版本信息证明安装成功
填写用户名和邮箱作为一个标识
git config --global user.name "用户名"
git config --global user.email "邮箱地址"
在本地创建一个目录作为 git 仓库,并通过 git init
命令进行初始化,初始化成功后会在 当前目录生成一个.git 目录文件,不要删除及修改。
在当前文件夹下,新建一个文件test.txt
使用git进行管理
clear清一下屏
文件只要修改了 就需要先提交的缓存,add 之后再commit提交
查看一下状态git status
只要修改
就又会提示 文件已改变 然后需要add -->commit
git本地命令——存储流程
代码工作区—>执行git add
—>暂存区(临时存储)—>执行 git commit
—>本地库(历史版本)
工作区、暂存区和本地仓库,逻辑上是本地计算机。当我们新建一个文件时,文件位于 工作区,处于已修改(modified)状态,表明文件已进行了修改,但还没有提交保存;通过 命令 git add
将其添加到暂存区,文件是已暂存(staged)状态,表示把已修改的文件放到 下次提交时要保存的清单中;通过命令 git commit
将文件放入本地仓库,文件为已提交 (commited)状态,表示该文件已经被安全地保存在本地数据库中,到这一步可以说是成 功生成了一个新的版本。
远程仓库用来将本地仓库上传到网络,实现备份、共享和合作。
git commit -m "提交注释"
将文件提交到本地仓库
git status
查看目录中是否还有文件未提交
git diff
比较文件差异
git diff [文件名]
将工作区中的文件和暂存区进行比较
git reflog
查看历史记录,并以简短信息显示
HEAD@{移动到当前版本需要多少步}
git reset --hard [局部版本号]
将文件添加到缓存区中【add】,然后提交【commit】。
如果删除文件后没有提交 可以使用 git checkout -- [文件名]
恢复
在版本回退那里,已经知道每次提交,git 都会把他们串成一条时间线,这条时间线就 是一个分支。截止到目前,只有一条时间线,在 git 里,这个分支叫主分支,即 master。切 换分支即可以理解为切换时间线。
在版本控制过程中,使用多条线同时推进多个任务。每条线成为一个分支。 例如:
git branch [分支名]
git branch –v
git checkout [分支名]
修改一下文件
提交到 b1 分支
第一步:切换到接受合并的分支
git checkout [接受合并的分支名]
第二步:执行 merge 命令
地址: https://gitee.com/
因为数据保存在远程服务器,服务器需要对你的身份进行识别,SSH Key可以让你的电脑和码云之间建立安全的加密连接。
ssh-keygen -t rsa -C"你的邮箱"
,会有三次提示输入,直接回车即可。登录码云,在SSH公钥文本框里粘贴 id_rsa.pub 文件的内容
执行命令 ssh -T [email protected]
Git 使用 SSH 连接第一次验证服务器的 key 时,需要你进行确认,此时输入 yes 回车即 可。
再次执行 ssh -T [email protected]
git add .
将工作区所有内容上传到暂存区git commit -m "本次提交的注释"
提交到本地仓库git push [别名] [分支名]
其中别名和分支名可省略。将 本地仓库所有内容上传到远程仓库码云 ,码云刷新可看到最 新内容git pull
拉取远程库内容git remote -v
查看当前所有远程地址别名
git remote add [别名] [远程地址]
增加远程地址
git remote remove [别名]
删除远程地址
要点
如果不是基于GitHub远程库的最新版所做的修改,不能推送,必须先拉取。
拉取下来后如果进入冲突状态,则修改->add->commit
即可。
设置->数据管理->私有仓库成员->选中仓库->邀请成员
mkdir: XX(创建一个空目录 XX 指目录名)
pwd: 显示当前目录的路径
git init 把当前的目录变成可以管理的 git 仓库,生成隐藏的.git 文件。
git add XX 把 XX 文件添加到暂存区。
git commit -m “XX” 提交文件 -m 后面的是注释
git status 查看仓库状态
git diff XX 查看 XX 文件修改了哪些内容
git log 查看历史记录
git reset -hard HEAD^ 或者git reset -hard HEAD~ 回退到上一个版本(如果想回退到 100个版本,使用 git reset -hard HEAD~100)
cat XX 查看 XX 文件内容
git reflog 查看历史记录的版本号 id
git checkout --XX 把 XX 文件在工作区的修改全部撤销
git rm XX 删除 XX 文件
git remote add origin https://gitee.com/oldlu_wk/gittest.git 关联一个远程库
git push -u (第一次提交要用-u 以后不需要)origin master 把当前 master 分支推送到远 程库
git clone https://gitee.com/oldlu_wk/gittest.git 从远程库中克隆
git checkout -b dev 创建 dev 分支 并切换到 dev 分支上
git branch 查看当前所有分支
git checkout master 切换回 master 分支
git merge dev 在当前分支上合并 dev 分支
git branch -d dev 删除 dev 分支
git branch name 创建分支
git stash 把当前的工作隐藏起来等以后恢复现场后继续工作
git stash list 查看所有被隐藏的文件列表
git stash apply 恢复被隐藏的文件,但是内容不删除
git stash drop 删除文件
git stash pop 恢复文件的同时也删除文件
git remote 查看远程库的信息
git remote -v 查看远程库的详细信息
git push origin master Git 会把 master 分支推送到远程库对应的远程分支上
创建本地仓库
如果上传时出现Push rejected: Push to origin/master was rejected
解决方法:
1.选择你要上传代码的文件夹,鼠标右键git Bash Here
2.输入下面两行命令
git pull origin master --allow-unrelated-histories
git push -u origin master -f
冲突产生的根本原因是:两个人修改了同一个文件的同一个区域,在前者已经提交代码到远程仓库的情况下,后者修改代码前没有使用pull命令更新代码,而是修改完代码后再使用pull命令,这时就会产生冲突。这也是最常见的冲突,下面介绍解决冲突的办法也是主要针对这种冲突。
在修改代码前,使用pull命令更新代码,能够保证在开始修改代码前本地的代码与远程长裤中的版本一致,这样能够大大降低冲突发生的概率。
按照图片中的步骤,顺序不能乱,先stash,然后pull,最后unstash
第一步:暂存代码,idea会恢复到上次更新后的代码,将修改的代码隔离出去
第二步:将远程仓库的代码拉下来
1 本地代码更新后的代码
2 合并后的代码
3 暂存文件的代码