git开发流程
准备工作
作为一个开发者,fork
一个仓库之后应该先做什么?
1、下载仓库,创建上游代码库,查看当前的分支情况
git clone https://github.com/<your_name>/<repo_name>.git
git remote add upstream git@github.com:<upstream_name>/<upstream_repo_name>.git
因为我们要对master分支做开发,但为了保证能够不修改master
,那么就需要在master
基础上建立dev
分支,并为分支设置远程跟踪信息,从而建立对应的上游分支并进行同步(即github接收端分支)
# 查看分支信息
git branch -a
# 选择dev分支
git switch -c dev
# 设置分支跟踪origin/dev分支
git branch --set-upstream-to=origin/dev dev
git pull
git流程框图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JrwVCtfd-1676213844165)(/media/liuyoufu/TOSHIBA EXT/文档集/博客正在撰写/git实例分析.assets/git流程图.png)]
开发流程
# 经过一系列开发之后,需要提交啦,此时有些仓库会有pre-commit脚本来检测并修正代码风格,以确保代码风格统一,以openmmlab为例
# pre-commit需要安装,一个虚拟环境安装一次即可
pip install -U pre-commit
pre-commit install
pre-commit install -c .pre-commit-config-zh-cn.yaml
# 安装完毕后,执行pre-commit
pre-commit run --all-files -c .pre-commit-config-zh-cn.yaml
# pre-commit 全部通过后,开始提交
git add <file>
git commit -m "xxxxx"
git push
# 如果提交需要修改,则仍在该分之下修改即可
在同时开发两个pr时,应该如何处理?
同时处理两个pr
的时候,就需要建立一个新的分支与upstream
取得联系,每一个分支与一个pr
进行联系
可能出现的问题
add后出错
add
之后,即已经将文件放入到暂存区存放,从暂存区撤销的命令如下:
# 所有文件撤回
git reset HEAD
# 部分文件撤回
git reset HEAD <file>
# 通过git status查看要提交的变更,里面所存放的就是暂存区的内容,即add之后,commit之前
commit后出错
commit出错,此时还没有push,但此时已经git log中出现此次命令,则需要通过--hard
或者--mixed
来撤销
git reset --mixed HEAD
执行命令后,会报HEAD 现在位于 a5bd821 no1
,但我们git log
后会发现并没有撤销,所以commit
之后要撤销,则需要加一个^
git reset --mixed HEAD^
此时的效果,就是collate.py
撤销commit
,同时本地文件中的修改也会撤销,但这也并不是我们想看到的,我们想要的效果应该是撤销commit
,同时保留文件内容:
git reset --soft HEAD^
此时,提交的文件又回到暂存区,特别注意的是,此操作只支持HEAD指针的移动,而针对某个文件进行撤回是不允许的!也是不支持的(目前我了解到的是不支持)
--soft
和--mixed
之外还有--hard
,这个指令会直接删除掉add
的修改,全部梭哈
如果此时想要撤回撤回操作,那么就需要重新提交
push后出错
继上文git commit
没有错误后,要上传至github
git push
此时,突然发现有个错误没改,那么此时在本地无法直接修改github
中的内容,着急情况下会这么操作
1、在最新的commit基础上直接修改
2、回退到上一个commit,或者某一个commit处,并撤销该commit与提交时commit之间的修改
git reset --hard HEAD <commit_id>
# 修改ing
git push
这说明你已经理解和掌握reset
的用法,但这样会报错,说当前分支的最新提交落后于其对应的远程分支,那么就git pull
然后解决冲突。