团队协作中git的基本使用
git对于软件开发团队的意义
在我们进行团队协作的软件开发时,我们的项目可能会分解成多个不同的模块、功能,这些模块、功能又会细分下去交给不同的人来进行开发,当多个人共同来完成一个项目的时候,我们如何同步进行呢?使用git就能完美的解决这个问题,我们可以在git上建立多个分支,多人来同时工作,同事也可以通过你上传的代码来实时同步我们的工作进度。
另外,当多人对一个文件进行修改时,必然会发生冲突,不同人的思想不同,开发一个逻辑也难免出现错误,而git的优势就在于,对代码质量把控、减少代码冲突。
又或者,我们在写代码的过程中,对于一段代码想要进行修改甚至删除,但又害怕将来出错需要恢复,这时候用git将是你最好的选择,git的定义就是一个开源的分布式版本控制系统,那什么是版本控制呢?通俗来讲,就是git可以将你的每次修改记录下来,形成一个版本,当你想要恢复你的代码时,只要找到对应的版本即可。
git 和 github 的区别
git 是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。
简单来说,git就是一个帮助我们管理我们的代码版本控制工具。
而 gitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 git 作为唯一的版本库格式进行托管,所以叫 github。
我们可以将自己的项目提交到 github 上进行托管,也可以在上面查阅他人公开的项目,必要的时候可以拉下来进行学习。
简单来说,github 就是一个用来存放代码的仓库。
本地仓库和远端仓库
本地仓库和远端仓库在本质上来说没有什么区别,甚至可以理解为一个是本地电脑,一个是远端的电脑,通常情况下,远端仓库不参与开发,主要作为托管中心。
上图就能够很清晰的表明远程仓库、本地仓库、暂存区、工作区之间的关系。这其中出现的一些概念:
workspace:工作区,我们进行编写代码的区域,可以通过pull将远端仓库的代码拉取下来,也可以通过checkout来切换分支。
Index:暂存区,当我们代码完成一个阶段后,需要在本地仓库进行同步,即进行commit操作,但每次修改都进行commit会比较麻烦,所以git给我们提供一个暂存区,修改代码后进行add操作添加到缓存区,最后统一进行commit到本地仓库。
Repository:本地仓库,本地用来存储代码的仓库,可以通过push将本地仓库文件上传到远程仓库,也可以通过fetch/clone将远端仓库的文件拉取克隆下来。
Remote:远程仓库,远端用来存储代码的仓库。
代码如何上传到私有远端仓库
Http
- 进行初始化本地仓库 git init
- 加到暂存区 git add . / git add *
- 提交到本地仓库 git commit -m ‘文本’
- 连接远程仓库 git remote add origin 你的远程仓库的URL(在创建仓库中可以找到)
- 提交到远程仓库 git push origin master
SSH
配置
- 首先在桌面右键打开 gitbash 输入ssh
出现如图代表git安装成功可以正常使用。 - 然后输入 ssh-keygen -t rsa 该命令是指定 rsa 算法生成密钥,输入命令后连续三个回车即可,默认情况下会生成两个文件 id_rsa 和 id_rsa.pub,id_rsa是密钥,id_rsa.pub是公钥。生成目录在执行命令后可以看到。
- 用记事本打开 id_rsa.pub 后 copy 全部内容。
- 进入远程仓库(用github示例),找到settings。
- 选择 SSH and GPG keys -> New SSH key。
- 将(3)复制的内容粘贴到 Key 中,Title 可以空着不写,然后 Add SSH key。
上传项目
- 首先在 github 上创建新的仓库,然后复制SSH。
- 打开编译器终端依次输入如下命令
git init
git remote add origin 你复制的SSH
git add .
git commit -m’文本’
git push origin master
进入到github仓库中查看是否上传成功。
代码怎么从远端仓库同步到本地
第一种情况:将远端仓库代码克隆到本地
git clone 仓库的 http/SSH
第二种情况:将远端仓库代码拉取下来合并到本地
git pull / git pull origin master
多人工作在同一代码库如何合并代码
1、切换到其他分支:git checkout 分支名
2、将代码拉取下来:git pull
3、合并分支:git merge 分支名
合并出现冲突怎么处理
首先要知道为什么会产生代码冲突,假设我们现在有三次提交A.B.C
在远程分支 origin 的基础上创建一个名为 “mywork” 的分支并提交了(可以理解为我们自己进行了更改要进行提交),同时有其他人在 “origin” 上做了一些修改并提交了。
此时在 E 提交的时候就会产生代码冲突。
产生代码冲突后如何解决呢?
我们有两种方法可以用来解决代码冲突:
首先就是 git merge 方法,该方法就是使用 git pull 命令将 origin 分支上的修改拉取下来,再与本地的提交合并之后再提交,简单来说,就是将别人的修改和自己的修改合并成一个文件再进行提交。
因为是合并两个修改,所以会形成菱形。
另一种方法就是 git rebase,该方法就是废除掉我们要提交的修改,选择一个我们想要提交的正确的进行提交。
由于 E 被废除掉,所以用虚线表示,此时形成的是一条线而并非菱形。
在 rebase 过程中有时会出现 conflict,此时就需要用户自己手动来解决冲突后继续提交。
关于 commit 的提交规范
- feat: 新的功能
- fix: 修复 bug
- refactor: 重构代码
- chore: 不影响业务功能的一些操作
- doc: 关于文档的修改
- test: 测试代码
- perf: 性能优化
- style: 代码格式修改
- ci: 持续集成
- release: 发布新版本
Git 常用命令
分支
- 创建分支:git branch 分支名
- 创建并切换到分支:git checkout -b 分支名
- 查看分支:git branch
- 切换到其他分支:git checkout 分支名
- 创建并切换分支并与远端仓库分支进行关联:git checkout -b 分支名 远端仓库分支
- 删除分支:git branch -d 分支名 //不能删除当前所在分支;已进行过提交的不能删除
- 强制删除分支:git branch -D 分支名
- 删除分支并且推送远程仓库:git push origin –delete 分支名
- 合并分支:git merge 要合并的分支名
- 查看所有分支信息:git branch -av
版本
- 查看版本简写日志:git log –oneline
- 查看版本路线:git log –oneline –graph
- 从远端仓库拉取:git fetch
标签
- 打标签:git tag xxx
- 查看标签:git tag –list
- 删除标签:git tag -d xxx
操作失误回滚
未提交到暂存区
- 使用命令git status 查看缓存区中未提交的文件,然后使用命令git checkout – 要还原的文件夹下的文件,执行命令后会自动还原
已提交到暂存区
- 使用命令 git reset HEAD 文件夹下的文件 ,把文件从暂存区撤销,然后使用未提交到暂存区的操作失误还原操作即可。
回滚到指定版本
- git reset –hard HEAD^ //一个^代表回归一个版本
- 先 git log 查看历史获取 commit 的 id,然后 git reset –hard 你要回到版本的commit的id