git
企业实战
在本地储存源码
- 源码被误删
- 添加新功能后,希望回退到上一个版本
- 团队协作
生成与
github
平台通信的公钥与私钥
- 打开
git bash
,输入ssh-keygen -t rsa -C "你的git邮箱"
- 回车后会出现一个包含了密钥信息的文件,一般生成在
/c/Users/Vitam/.ssh/id_rsa
之中 - 登录到
github
,在setting
中找到配置SSH and GPG keys
选项,将上述的密钥内容复制到其中,点击添加即可 - 使用
ssh -T [email protected]
查看托管平台是否已经成功连接 -You've successfully authenticated, but GitHub does not provide shell access.
表示连接成功 - 使用
git config --global user.name "你的用户名"
配置自己的用户名 - 使用
git config --global user.email "你的电子邮件"
配置自己的邮件信息
项目中
git
的步骤及常用命令
- 项目负责人搭建项目仓库
- 开发人员使用
git clone "新建项目的远程仓库地址"
将项目负责人的仓库克隆到本地 - 将项目克隆到本地之后,会自动将远程的项目定义为origin
,在项目的config
文件中可以对这个项目的名称进行修改- 会创建远程仓库对应的本地仓库- 会自动在本地生成一个main
主分支,对应远程仓库origin/main
- 开发人员在项目中新增功能代码(默认在主分支,也可以创建并切换到其他分支) - 使用
git pull
拉取更新远程仓库最新的代码到本地仓库- 使用git add 文件名/.
将指定文件/所有文件添加到暂存区- 使用git commit -m "你的描述信息"
将暂存区的文件提交到本地仓库- 使用git log
查看代码修改日志- 使用git status
查看当前操作的状态信息- 使用git branch
查看当前工作在哪个分支上- 使用git push origin main:main
将本地仓库中main
分支上的代码推送到名为origin
的远程仓库main
分支中- 使用git diff HEAD -- 文件名
可以查看工作区与仓库的代码差异
HEAD
指针的作用
HEAD
指针指向当前的版本
版本回退
- 在
git add
之前出现的错误 - 可以直接修改源文件- 可以使用git checkout -- 文件名称
利用仓库中的文件直接覆盖掉这次的改动 - 在
git add
之后与git commit
之前出现的错误 - 使用git reset HEAD
将暂存区的所有文件全都回退到工作区- 也可以使用git reset HEAD 文件名
将某个文件从暂存区回退到工作区 - 在
git commit
之后与git push
之前出现错误 - 使用git reset --hard 版本id
将仓库中的文件回退到指定编码的仓库状态- 使用git reset --soft 版本id
将仓库中的文件回退到指定编码的仓库状态,并且会向前推进一个版本 - 在
git push
之后出现的错误 - 按照正确的流程,在本地修改好bug
之后重新进行提交- 一般来说,如果出现错误之后,往往希望回退到错误出现之后的版本,但是如果本地仓库版本低于远程仓库版本,那么使用push
将不会推送成功 - 不建议使用git push origin -f main:main
强制推送代码,因为如果在你之后仍然有人向远程仓库提交代码,那么强制推送将会覆盖掉别人的代码,而回退到之前的代码
冲突解决
- 多人开发同一个项目时,同时
pull
到最新的代码后,执行开发,这时每个开发人员的基础代码都是基于最初的代码版本 - 在开发的过程中,首个
push
新代码的人不会出现冲突,因为源码仍然是最初的版本未被更改 - 其余人员在后续的
push
时,会出现代码冲突
当多人未修改同一个代码区时
- 在
push
时会被reject
,同时会提示需要将代码重新pull
后再push
,拉取回代码之后会自动将新代码merge
到当前文件中,再次执行push
命令即可
当多人同时修改同一个代码区时
- 在
push
时会被reject
,同时会提示需要将代码重新pull
后再push
,但是在拉取回代码之后不会自动将新代码merge
到当前文件中,这时候要求开发者自行解决冲突,在冲突解决好之后,从git add
开始执行
本地分支管理
git branch
查看本地分支git branch -r
查看远程分支git branch -a
查看所有分支git checkout -b 新的分支名称
新建本地分支并切换到新建分支- 对于新建分支,默认地,这个分支不会对应远程仓库的任意分支- 在pull
时会报错- 在push
时,需要指定推送的远程仓库分支git checkout -b 新的分支名称 远程仓库名称/远程分支名称
创建新的分支并且将新分支与远程仓库对应分支实现映射git checkout 分支名称
切换到对应分支git branch 分支名称
新建对应本地分支git merge 分支名称
将对应分支名称合并到当前所在的分支-merge
之后,分支的代码将会被合并到当前分支的仓库git branch -d/-D 分支名称
删除对应分支--d
表示如果分支尚未被合并,还存有代码,将不会删除分支--D
表示无论分支是否还有代码,强制删除git branch -vv
可以追踪本地分支与远程分支的映射情况git branch -u 远程仓库名称/远程分支名称
为当前分支设置一个远程仓库的映射分支
本地分支冲突解决
- 我基于某个原始版本创建了一个分支,并且基于这个分支增加了新的功能
- 在将新功能推送到远端的仓库之前,另外的开发者更新了远端的原始版本
- 这时我切换到原始分支,执行
pull
操作,会拉取到最新的版本,而我的分支是基于原始版本开发的,在将我的分支merge
到最新版本时,会出现合并冲突 - 解决冲突的逻辑与上述逻辑一致
远程分支管理
- 当项目已有功能稳定之后,项目负责人会创建另外的远程分支开发新的功能
git
在企业中的使用
分支总览
- 远程:
master
,release
,dev
- 个人:
feature
,bugfix
,hotfix
远程分支
- 项目管理人员会从项目的主分支中新建一个
dev
开发分支,在一个开发周期内,允许开发人员将代码向dev
分支进行提交 - 当开发周期结束后,项目管理人员会将
dev
分支中的所有代码合并到master
分支中.并再次创建一个release
分支,测试人员介入,测试代码,发现bug
之后开发人员在该分支上修复bug
- 当所有的
bug
修复完成之后,项目管理人员再次将所有代码合并到master
分支中,最后上线产品 - 在之后的版本迭代中,依照上述顺序进行迭代
本地分支
- 开发者创建本地分支 - 使用
git checkout -b feature/dev origin/dev
创建一个名为feature/dev
的本地分支,同时这个分支映射远程的origin/dev
仓库 - 因为项目不会是一个人单独开发,所以经常使用
git pull
命令将最新的远程仓库代码拉取回来 - 在自己创建的
feature/dev
分支中进行开发 - 包括执行后续的git add
,git commit
等命令 - 当所有的功能开发完成后,我们执行
git push origin feature/dev:feature/dev_m_1.x
将自己本地仓库的代码推送到远程仓库的feature/dev_m_1.x
分支 - 注意在push
代码之前,一定要执行git pull
命令将最新的代码拉取到本地- 注意:执行git push
并不是将自己的本地代码直接推送到远程的dev
分支中,而是推送到远程的一个新建分支 - 接下来就是使用代码评审工具,比如
gitlab
,gerrit
等工具评审代码 - 代码评审团队会评审开发人员新增的代码,评审通过后,开发人员提交一个
merge request
,并且邀请相应的人员对代码进行code review
,通过之后项目管理人员会批准代码的合并 - 相关人员提出修改意见之后,重新修改自己的代码,并且推送到对应的远程分支中
- 相关人员批准代码后,项目管理人员执行代码合并
- 代码合并后,可以删除自己的远程分支 - 使用
git push origin :feature/dev_m_1.x
,表示使用空的本地分支覆盖对应的远程分支
总体流程
- 将远程仓库中的代码
git clone
到本地 - 在本地使用
git checkout -b 本地的新建分支名称 远程仓库名称/远程分支名称
创建一个新的分支,同时这个本地分支会映射到远程仓库对应的分支 - 在这个新的分支中开发新的功能- 这个分支要对应正确的远程分支 - 使用
git push origin 本地的新建分支名称:再次新建一个远程的分支
将自己完成的代码推送到远程仓库的另外一个新建分支 - 注意在push
之前使用git pull
将最新的代码进行同步- 在这个新建分支中执行pull request
请求,选择合适的合并分支与reviewers
人员,提交请求 - 如果请求未通过,通过
git pull
拉取回最新的代码后进行更改,再次执行上述步骤 - 如果请求通过,当代码合并之后,执行
git push origin :上述自己新建远程分支名称
来删除远程分支
标签:
git
本文转载自: https://blog.csdn.net/qq_41455525/article/details/142884987
版权归原作者 Midshar.top 所有, 如有侵权,请联系我们删除。
版权归原作者 Midshar.top 所有, 如有侵权,请联系我们删除。