起因
在实际工作项目当中,我们会进行多人协同开发,这就需要一个远程仓库来管理项目
正常管理项目代码的工具有三种:GitHub、Gitee(码云)、Gitlab(公司一般用这种)
项目创建者操作
新建仓库
作为项目的创建者,刚开始没有远程仓库,我们需要创建一个远程仓库(这里以码云为例),
如下:
连接远程仓库前进行全局配置用户信息
git config --global user.name "yessir"
git config --global user.email "983410683@qq.com"
有/无本地仓库的两种连接方式
# 1.现在本地没有仓库 >新建本地仓库 >添加本地仓库到远程
mkdir luffyapi
cd luffyapi
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/yessir_ye/luffyapi.git # 连接远程仓库
git push -u origin "master" # 将master分支提交到远程仓库
# 2.本地已有仓库
cd existing_git_repo # 进入本地仓库
git remote add origin https://gitee.com/yessir_ye/luffyapi.git # 连接远程仓库
git push -u origin "master" # 将master分支提交到远程仓库
连接远程仓库,push的时候会让我们输入用户名密码(就是码云的用户名密码),输入即可
如果之前有人在本电脑上登录过,就无法push,我们需要进行如下操作:
打开控制面板>用户账户>管理Windows凭据>找到码云对应的那条数据,删除
然后重新连接远程,输入我们自己的用户名密码即可
项目开发者操作
作为项目的开发者,我们只需要将远程仓库的代码clone下来,继续开发即可:
# 1 项目开发者,参与者(换了一台电脑),把代码拉下来继续开发
-git clone https://gitee.com/liuqingzheng/lqz_test.git
-能看到完整的版本和日志控制
-可以回复到任意版本
-git rest --hard 版本号
-git checkout .
# 表示回到指针指向的版本,因为已经用git rest --hard把指针移动了,所以checkout .就是当前再的版本上的东西
# 2 本地新增c.txt文件
-提交到暂存区
-提交到版本库(没有提交到远程,远程看不到)
-提交到远程:git push origin master
# 3 让a文件夹中的代码成为最新的
-git pull origin master
# 4 重点:每次再提交代码之前,一定要先更新代码(拉),如果不拉提不上去
注意:
每次push(提交到远程)代码之前,一定要先pull(将远程仓库代码拉下来)一下,
否则会失败,如果强制提交可能会导致同事刚提交完的代码不见了
ssh连接和https连接
公司内部正常大部分都用ssh连接
# 1 公司内部大部分用ssh连接
-领导给你一个git地址(项目地址)
-你 git clone 地址 到本地
-改代码,改完了---》提交(禁止)
-ssh配置,以后都不用输密码了
# 2 配置如何做
-对称加密(加密和解密用同一套秘密)
-非对称加密(公钥和私钥),公钥加密,私钥解密
-生成一对公钥和私钥(用命令)
-https://gitee.com/help/articles/4181
-ssh-keygen -t rsa -C "lqz@qq.com" 生成到用户家目录的.ssh文件夹下(一个公钥,一个私钥)
-把公钥复制出来,再码云上配置
# 跟远程操作有三个命令
-git pull
-git push
-git fecth(一般不用,他跟pull是一个东西,当作不知道)
ssh连接配置
1.打开git输入如下命令:
ssh-keygen -t ed25519 -C "yessir@qq.com"
# 生成到用户家目录的.ssh文件夹下(一个公钥,一个私钥)
2. 把公钥复制出来,在码云上配置(C:/ >用户 >yessir >.ssh)
用记事本打开公钥,复制里面的内容,粘贴到码云上,如下:
协同开发
# 多个人同时开发一个项目,既要做好版本的管理,又要做好代码的合并
1)作为开发者,第一次同步项目(前台已经是项目开发者了)
>: git clone 项目地址
2)本地开发的代码,必须add、commit到本地版本库后,才和远程仓库进行交互
4)交互顺序:必须 先拉(pull)后提(push)
5)必须切换到要交互的分支,在与远程同名的分支进行交互,如本地dev与远程dev交互
>: git checkout dev
>: git add .
>: git commit -m '本次提交的信息提示'
>: git pull origin dev
>: git push origin dev
解决冲突
# 分支合并
# 协同开发,共同操作同一个分支
# 刚到公司,可能只给你访问权限---》只能看,不能提交
1.多个人在同一个分支上开发,出的冲突
多个人在同一分支上开发,一个人修改好了之后推到了远程仓库,
第二个人也在相同的位置修改了代码,需要先pull,再push,
由于pull下来的代码与第二个人本地的代码在统一位置修改了,
有冲突,所以会飘红
# 1 协同开发出现冲突,如何解决
# 2 git pull origin master 拉下远程代码,同事和你修改了同一个位置,会冲突,如下
<<<<<<< HEAD
你的代码
=======
别人代码
>>>>>>> origin/master
# 3 处理方案
-删除你的代码
-删除同时代码
-合并你们的代码# 肯定是改了共同的代码才出的冲突--->保留某个人或者两个都保留
git add .
git commit -m
git push origin master
# 1 远端创建一个dev分支
-在远端直接创建
-本地创建,提交到远端
git checkout -b dev
git push origin dev
# 2 本地新建一个dev_bug分支
-dev_bug分支改了文件
-dev分支改了同样的文件
-合并就出冲突
-git merge dev_bug (在dev分支上操作)
-解决冲突(删你的,或删同事的,或者合并起来)
-git add . git commit
-正常了,冲突解决
# 3 手动线下合并代码并提交到远程
-git checkout master
-git merge dev
-如果出冲突,解决
-git add .
-git commit
-git push..
线上分支合并
# 远端:master和dev分支
# 本地:master和dev分支
# 我们都在dev分支开发---》本地的dev---》开发完了提交到远端的dev----》要把远端的dev合并到远端的master
# 提交pr(pull request),提交合并分支请求
# 远端建立一个dev分支
# 本地只需要
git checkout dev # 自动把远端dev拉下来,切换到本地dev上
# 在本地dev开发,提交到远端dev
# 修改dev分支代码
git add .
git commit -m 'dev改了'
# 提交到远端dev
git push origin dev # 把现在在的本地分支(dev),提交到远端的dev
远程新建分支
如下图:选择1或者2都可以进入新建分支,
本地新建分支
三种方式:两种命令 + 直接切换到远端有但是本地没有的分支,
# git branch 分支名
git branch dev # 创建dev分支
# git checkout -b 分支名
git checkout -b dev # 创建并切换到dev分支
除了以上两种命令创建外,如果远程有一个分支,本地可以直接切换该分支
会自动将远程的分支直接拉到本地,如下:
线上回滚
# 1 切换到master分支
# 2 回滚到某个版本 git reset --hard 版本号
# 3 强制提交代码 git push origin master -f
remote源操作
1)查看仓库已配置的远程源
>: git remote
>: git remote -v
2)查看remote命令帮助文档
>: git remote -h
3)删除远程源
>: git remote remove 源名
eg: git remote remove origin
4)添加远程源
>: git remote add 源名 源地址
>: git remote add orgin git@gitee.com:doctor_owen/luffyapi.git
5)提交代码到远程源
>: git push 源码 分支名
6)克隆远程源
>: git clone 远程源地址
1)通过克隆方式连接远程源,默认远程源名就叫origin;
所以主动添加远程源来连接远程仓库,源码也用origin
2)本地一个仓库只需要和远程一个源进行同步,
所以只需要连接一个远程源,如果还想把本地代码同步给第三个平台,
那么可以通过主动添加远程源来连接第三个平台的远程仓库,
此时的源码就不能再叫origin了,比如online都可以
3)pull和push都可以提供选择不同的源码,和不同的远程仓库交互
变基
merge普通合并分支,git log可以看到很多条分支的记录,会很杂乱
如果主分支想很干净,不管提交了多少次,变基就只能看到一条
所以,变基是为了让主分支看起来更加的简洁而又明朗