git简介
git是代码管理工具,其特点是:分布式管理,有分支,代码回退,代码合并
安装和配置【第一次安装git需要做的事情】
- 先安装软件到本地电脑上
- 配置本地电脑的全局git的账户和邮箱(一个电脑只作一次)
git config --global user.name '账户'
git config --global user.email '邮箱'
- 生成本地的公钥和密钥
-
ssh -keygen -t rsa -C '邮箱'
连续回车三次,得到一个.ssh文件夹
- 把本机的公钥添加到远程的账户的ssh公钥里,目的是让本地电脑和远程账户进行关联。
- 公钥的位置:
C:/users/admin/.ssh/id_rsa.pub
把这个文件使用txt程序打开,复制里面的代码,粘贴到远程账号的ssh公钥里既可。
仓库的创建和基础的使用
- 首先在项目中通过
git init
创建一个仓库,目的是为了在当前的项目中产生一个.git的隐藏文件夹(这个可以在上面的查找中找到显示隐藏文件夹将他勾选就可以看到),一个项目只做一次就行。 - 暂存区存储
git add .
或git add *
如果你只想单独的把一个指定的文件存入暂存区可以用git add fileName
- 把暂存区的内容存储进本地仓库中:
git commit -m '干了什么的标题'
高级使用-代码的回退
- 用
git log
方法获取到提交的id(在上面的将内容存储进本地区域就会产生一个id)git log
只能查看正常提交的记录,对于回退后的记录就会丢失 -
git reflog
能购查看所有的提交记录 【注意】在git bash 命令窗口里,不可以使用快捷键复制和粘贴,只能选择后右键Copy或paste
- 复制提交的id进行回退,代码为:
git reset --hard 提交的id
查看仓库的状态
git status
本地仓库和远程仓库的关联和上传于下载(远程仓库就是gitee你的账号里面创建的仓库)
- 本地仓库关联远程仓库【每个项目只做一次】
git remote add prigin
线上的git仓库地址 【注意】仓库地址前缀必须是git@xxx开头的,不可以是https的。解决办法很简单就是将上面默认的http切换成第二个上 - 上传本地仓库到远程仓库中
- [如果是第一次上传]:
git push -u origin master
- [如果不是第一次上传]:
git push
git的工作流程
- 安装并配置git在电脑上【每个电脑只做一次】
- 在项目中初始化仓库:
git init
【每个项目里只做一次】 - 每次项目中改变了内容后,都要先存入暂存区:
git add *
- 再从暂存区存入到本地仓库:
git commit -m 'log'
- 从本地仓库上传到远程仓库:
git push
如果是第一次上传:git push -u origin master
- 总结:git add . > git commit -m 'log' > git push
克隆代码
- git clone 项目地址 克隆可以克隆所有的公开的项目。
拉取远程仓库的代码到本地【拉取代码】
git pull
git仓库的权限
- 对于开源的项目,我们可以克隆下来,但是没有权限去修改远程的开源项目,因为我们没有权限
- 如果你想修改别人仓库的内容,需要加入到仓库的成员中,获取到仓库的权限
代码冲突的问题【最大得一个问题】
- 当多人操作同一个文件的时候,在该文件的同一个位置都书写了内容,这个时候git的合并策略就会失效,然后就产生了代码冲突的问题
解决冲突
- 首先在项目中手动解决冲突
- 在存入本地
- 再上传到远程
【注意事项】
- 仓库里不能嵌套仓库
- 什么时候使用git init初始化仓库?远程仓库必须是一个空仓库的时候,我们才能再本地初始化新仓库,然后再关联,最后再上传
分支管理
- 创建分支:git branch name
- 切换分支:git checkout name
- 第一次上传新分支到远程:git push origin name以后就直接git push
- 克隆指定的分支:git clone -b name 仓库地址 -b 是 --branch的缩写
- 删除本地分支:git branch -D name -D 是 --delete的缩写
- 删除远程分支:git push origin -d name
- 【注意】每次切换分支前,一定要确保当前分支全部是存储的状态,删除某个分支的时候我们不能在被删除的分支中
标签tag管理
- 创建标签:git tag name 或者 git tag -a name -m 'log'
- 查看标签:git tag
- 删除标签:git tag -d name
- 上传标签:git push origin name
- 使用tag去回退代码
- 查看tag git tag
- 查看指定tag的详细信息git show name获取到提交的commitid
- 根据id回退代码git rest --hard commitid
代码合并
- git merge name 合并指定分支到当前分支
团队开发流程
- 一开始,所有人都需要克隆我的仓库到本地
- 接下来是开发代码
- 先把自己的改动存入本地:git add . git commit -m '存自己的'
- 自己的改动存入本地后,先拉取一下远程的代码:git pull目的是为了保持和远程是一样的,都是新的记录
- 【重点】:一定要注意看pull后的代码提示,如果有冲突一定要先解决冲突,在存入本地,再上传到远程 5.1 【重点】:如果没有提示冲突,意味着git帮我们把远程代码和咱们本地代码进行了合并,然后再git pull上传到远程仓库里
- 总结:每次改动项目后:先存本地,再拉取远程,最后提交push
公司里的团队协作
- 首先本地和线上分支都有一个自己的分支:dev-songyu dev-shenyi dev-laozhang
- 以后的开发全都再自己的分支中操作:dev-songyu: 提交到该分支,然后拉取masert分支的代码,最后提交到远程的dev-songyu
- 去线上仓库发起一个合并请求,然后由项目组长去审查代码,项目组长负责把我的分支代码合并到master上
一键快速解决冲突
- vscode里使用ctrl+shift+p 输入:merge
- 保留远程的代码,选择>merge conflict:Accept All incoming
- 保留自己的代码,选择>merge conflict:Accept All current