Git简介
Git: 分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。
Git的功能特性:
从一般开发者的角度来看,git有以下功能:
1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
2、在自己的机器上根据不同的开发目的,创建分支,修改代码。
3、在单机上自己创建的分支上提交代码。
4、在单机上合并分支。
5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
6、生成补丁(patch),把补丁发送给主开发者。
7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
8、一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。
从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能:
1、查看邮件或者通过其它方式查看一般开发者的提交状态。
2、打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
3、向公共服务器提交结果,然后通知所有开发人员。
优点:
适合分布式开发,强调个体。
公共服务器压力和数据量都不会太大。
速度快、灵活。
任意两个开发者之间可以很容易的解决冲突。
离线工作。
缺点:
资料少(起码中文资料很少)。
学习周期相对而言比较长。
不符合常规思维。
代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
(以上来自百度百科)
Git工作流程
常用命令
git init:仓库初始化(创建文件夹,在此文件夹下打开gitbash)
- git add 单个文件名:将工作区的文件添加到暂存区
git add . 将所有的修改添加到暂存区
git commit -m ‘注释内容’:将暂存区的内容提交到本地仓库的当前分支
git status:查看暂存区和工作区的修改状态
git log:查看提交日志
- git log [option]
options:
–all 显示所有分支
–pretty=oneline 将提交的信息显示为一行
–abbrev-commit 令输出的commitid更加的简短
–graph 以图的形式显示
git reset --hard commitid(该id可以使用 git log查看)
git relog:查看已经删除的提交记录
分支
git branch:查看本地分支
git branch 分支名:创建本地分支
git checkout 分支名:切换分支
git checkout -b 分支名:创建并切换到该分支
git merge 分支名:将该分支合并到现在所在的分支上
git branch -d b1:删除b1分支
git branch -D b1:强制删除b1分支
(删除分支时,不能删除当前分支,可以删除其他分支)
本地冲突的解决
当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下:
- 1 处理文件中冲突的地方
2 将解决完冲突的文件加入暂存区(add)
3.提交到仓库(commit)
Git远程仓库
1、在码云注册并登录账号,新建远程仓库,ssh地址即为远程仓库的地址。
2、配置SSH公钥
- 生成SSH公钥:ssh-keygen -t rsa
- 不断回车,如果公钥已经存在,则自动覆盖(如果原来的公钥有用,再备份再执行该操作)。
- Gitee设置账户公钥:
获取公钥:cat ~/.ssh/id_rsa.pub
将获取到的公钥粘贴到远程仓库
3、操作远程仓库
3.1 添加远程仓库(先初始化本地仓库,与已创建的远程仓库对接) - 命令: git remote add <远端名称> <仓库路径>
远端名称,默认是origin,取决于远端服务器设置
仓库路径,从远端服务器获取此URL
3.2 查看远程仓库:git remote
3.3 推送到远程仓库
命令:git push [-f] [–set-upstream] [远端名称 [本地分支名][:远端分支名] ]
如果远程分支名和本地分支名称相同,则可以只写本地分支:git push origin master
-f 表示强制覆盖
–set-upstream 推送到远端的同时并且建立起和远端分支的关联关系:git push --set-upstream origin master(如果当前分支已经和远端分支关联,则可以省略分支名和远端名。)
git push 将master分支推送到已关联的远端分支。
3.4 从远程仓库克隆
命令: git clone <仓库路径> [本地目录]
本地目录可以省略,会自动生成一个目录
3.5 从远程仓库中抓取和拉取
远程分支同样可以进行merge操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。
抓取 命令:git fetch [remote name] [branch name]
抓取:将仓库里的更新都抓取到本地,不会进行合并。如果不指定远端名称和分支名,则抓取所有分支。
拉取:git pull [remote name] [branch name]
拉取:将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge。如果不指定远端名称和分支名,则抓取所有并更新当前分支。
3.6 远程仓库的合并冲突的解决
在一段时间,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突。A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时B用户晚于A用户,故需要先拉取远程仓库的提交,经过合并后才能推送到远端分支。
Idea中使用Git
安装好IntelliJ IDEA后,如果Git安装在默认路径下,那么idea会自动找到git的位置,如果更改了Git的安装位置则需要手动配置下Git的路径。选择File→Settings打开设置窗口,找Version Control下的git选项:
1、创建远程仓库(同上码云中创建)
2、本地仓库初始化
3、设置远程仓库
4、提交到本地仓库
5、推送到远程仓库
弹出的框直接点击push
6、克隆远程仓库到本地
分支相关操作区:
解决冲突
- 执行merge或pull操作时,可能发生冲突
- 冲突解决后加入暂存区
- 提交到本地仓库
- 推送到远程仓库
注意:
切换分支前先提交本地的修改
2. 代码及时提交,提交过了就不会丢
3. 遇到任何问题都不要删除文件目录