Git和协同开发
可以在百度搜索廖雪峰
集中式分布式区别
origin远程仓库
1. 了解Git
Linux作者是:Linus 林纳斯
Linux在90年开源之后,来自世界各地的开发者开始帮助Linux发展,支持它的开源行动。
开发者们如果需要给Linux添加一个补丁或者一个功能或者修复一个bug,这时候他们都会给Linus发一个邮件,告知他们的版本和原版本的差异(diff文件),然后Linus在实际添加以及综合考量之后,会将此代码并入Linux核心代码中。
这个过程非常的麻烦,所以早就有开发者提出希望能够使用版本控制系统,SVN,Bitkeeper…但是Linus不喜欢甚至讨厌市面上的一些免费版本控制工具,所以一直没有采用,后来有一家公司BitMover它的产品Bitkeeper免费提供给了Linux开发团队使用,美其名曰支持开源行动。
但是在使用了一段时间之后,其中有一位Linux开发社区的人员(梁山好汉),将Bitkeeper进行破解,想要研究其源码,然后被BitMover发现了,所以最终导致BitMover不再提供Bitkeeper给其使用。
Linus消失了一段时间,再次出现时,Git出现了。
Github在2008年基于Git创建,在其后的几年成为了全球最大的代码托管平台。
分布式的版本控制系统,比之SVN的集中式管理要先进很多。(公司里也有很多还在采用SVN,但是Git一定是一个趋势)
2. 掌握Git的搭建和初始化配置
-
下载最新版即可 https://git-scm.com/download/win
- 老版本下载请前往github
-
傻瓜式安装即可
-
在任意空白处位置右键 -> Git Bash Here(当你打开的时候 直接是在当前目录打开)
option 进去 可以修改中文
当你运行的时候 右键打开 同时在桌面新建一个learngit的文件夹
- 进入到Git(支持Linux命令)命令行之后,第一次使用可以配置一下全局初始配置(配置本机的使用人)
git config --global user.name "你的用户名(推荐写Github帐号或者码云帐号)"
git config --global user.email "你的邮箱(推荐写Github帐邮箱号或者码云帐号邮箱)"
3. 掌握Git的常用命令
版本控制系统(version control system vcs):
可以管理版本,我们自己编写Java代码,今天编写了一版,明天可能对其进行更新,后天又可能需要回退到之前的内容,所以版本控制的重要性不言而喻。
- 创建一个仓库(版本库) 文件夹
- 进入此文件夹,然后在此处打开Git命令行
- 然后执行
git init
进行Git仓库的初始化- 它会自动新建一个
.git
隐藏文件夹,实际上版本控制的细节内容就隐藏在此文件夹内(不需要动它) - 它会将当前的文件夹自动标注为主干
master
(类似于时间线)
- 它会自动新建一个
-
查看仓库的状态:
git status
他说不是一个git的仓库:
–版本控制初始化
git init
–添加一个内容(你可以在文件夹中建立一个.java文件)之后:
-
给文件添加追踪(track):
git add 文件名/文件夹
如果你想管理这个文件 先追踪
3. 将追踪的文件提交到版本库(这样就会建立一个版本):git commit -m "提交注释/说明"
就是相当于你给你的文件做了备份
- 查看本分支的提交记录:
git log
head表示当前在哪
它的升级版参数为:git log --pretty=oneline
-
查看操作记录:
git reflog
-
如果你在工作区区的内容修改了,和当前版本(Head指向的版本)内容不一致了,可以进行撤销修改。
git checkout -- 文件名
-
当你的内容修改添加到了暂存区之后,然后你又修改了,这时候怎么撤回?
- 先将工作区的内容可以撤回
git checkout -- 文件名
- 先将暂存区的内容撤回
git reset HEAD 文件名
可以将暂存区的内容撤回到工作区
- 先将工作区的内容可以撤回
-
撤销版本:
(你改完啦但是想要原来的版本)在你窗口不关闭的前提下
- 撤销一个版本
git reset --hard HEAD^
- 撤销两个版本
git reset --hard HEAD^^
- …
- 撤销更多个版本
git reset --hard HEAD~3
表示回退3个 - 回退到指定的版本
git reset --hard 版本id(commitID id不用都复制 复制一个唯一数据就可以)
- 撤销一个版本
-
查看工作区修改的内容和版本库的区别:
git diff 文件名
-
删除文件:
如果是误删除,可以通过刚才所学的工作区撤回实现找回
如果确定要删除,不需要添加到暂存区了,直接删除版本库内容即可
git rm 文件名
,然后再执行提交。
工作区和暂存区
**工作区:**我们项目所在位置,或者可以理解为.git
文件夹所处的目录。
版本库:.git
文件夹就是实际的版本库
可以同时修改多个到暂存区 再从暂存区中统一提交
**暂存区(stage):**用来追踪我们工作区的文件的(**git管理的是文件的修改 并不是直接管理文件**)
4. 掌握基于Git的协同开发
远程仓库
中央系统(远程仓库):你可以选用公司内部服务器搭建,也可以采用在线的托管平台,例如:码云或者github
-
创建一个码云、github帐号(通过邮箱验证)
-
在码云上建立中央仓库(远程)
点开码云 右上角 +号
-
可以对远程仓库进行开发人员绑定,还可以设置码云帐号和本地计算机绑定
-
通过加密协议:
ssh
-
在本地Git命令行执行:
ssh-keygen -t rsa -C "你的邮箱"
回车三次
-
找到.ssh文件夹,然后去打开
rsa_pub
全选复制生成的秘钥(公钥) -
然后找到码云设置界面 去添加此公钥,未来就可以进行本地推送了
-
-
建立远程仓库和本地仓库的绑定
git remote add origin git@gitee.com:Charles7c/learngit.git
-
可以选择将本地的仓库内容推送到远程仓库
git push -u origin master
-
未来再推送内容,记得先将本地的提交好,然后再推送
git push
上面的情况适用于线上是干净得仓库 把本地的推到线上
本地没有文件 但是你需要下载一下:
复制一下ssh
如果你本地没有仓库,你知道远程仓库上有代码,你想将此代码拿下来怎么办?
git clone 仓库地址
开发中 你有新的代码需要上传推送
如果你们在开发过程中,想要提交代码前,或者知道其他人已经更新了,需要执行拉取命令:
git pull
分支branch
创建并切换分支:git checkout -b 分支名
它会以当前的分支版本为基点继续开启新的分支
创建分支:git branch 分支名
切换分支:git checkout 分支名
查看所有分支:git branch
合并分支:
- 切换到“主干分支”
- 然后执行
git merge 要合并过来的分支名
如果没有特殊情况(冲突),它会采用快速合并(不推荐)。 - 推荐添加一个参数
--no-ff
表示取消快速合并
删除分支:git branch -d 分支名