目录
工作原理
git分为:
工作区(work directory)
暂存区(stage)
本地仓库(history):其中HEAD指向最新放入仓库的版本
远程仓库(remote)
git add: 将工作区的文件添加到暂存区
git commit:将暂存区的文件提交到本地仓库
git push:将本地仓库的文件推送到远程
git pull:将远程的文件拉取到本地
git reset: 回退版本
git checkout:把文件从暂存区域复制到工作目录,用来丢弃本地修改
分支管理
不同分支之间相互独立,可以用于不同功能的开发
# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 新建一个分支,但依然停留在当前分支
git branch [branch-name]
# 新建一个分支,并切换到该分支
git checkout -b [branch]
# 合并指定分支到当前分支
$ git merge [branch]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
例子:分支并行开发:aug , senet
git checkout -b aug #生成并切换到aug分支
#可以在工作区写相应数据增强的代码...
#写好以后把修改的文件提交
git add [file]
git commit -m 'message'
#然后再切换到senet分支
git checkout -b senet
git add [file]
git commit -m 'message'
#如果aug分支要继续修改
git checkout aug
例子:次分支合并到主分支main
git checkout senet
git fetch origin
git merge origin/main
git push
工作流程
使用Merge Request
- 在本地checkout到main分支使用git status确认工作目录没有改动,也没有自己额外的commit
- 执行git pull更新到最新的main分支
- 基于main分支创建开发分支git checkout -b <分支名>,分支名最好根据需要改动的内容命名,方便自己管理和识别
- 后续都在这个开发分支上改动并提交代码
- 将改动的文件添加到暂存区并提交git diff <file path>检查对应文件的改动是否符合预期
- git add <file path>添加对应文件的改动到暂存区
- git commit -m <message> 提交暂存区到本地仓库中,message可以是一些备注信息
- 首次使用时需要先设置提交的用户信息,包括用户名和邮箱git config --global user.name <user_name>
- git config --global user.email <user_email>
- 创建Merge Request提交完成之后,执行git push -u origin <分支名>推送到远端,第二次及以上执行时可直接用git push
- 此时命令行会给出创建Merge Request的网址,使用浏览器打开创建MErge Request
- Merge Request的标题最好可以简单用一句话说明当前的改动内容,这个Merge Request的标题最后会成为merge之后commit的message
- 根据评论修改Merge RequestReviewer给出审核意见之后,在本地分支进行相应的修改和commit
- 然后直接git push更新到同一个分支上,Merge Request即会相应更新
- 修改后的内容记得在网页上的comment上勾选已解决
- 合并Merge Request当所有评论意见处理通过之后,可以在网页端merge
- merge之后在本地执行git checkout main切换到main分支,执行git pull更新代码
- 删除本地开发分支git branch -D <分支名>
ps : 如果不小心在main分支上做了修改,但还没有commit,直接git checkout -b <分支名>,接着执行后续步骤就行。
参考网站:
注意事项
- 不要在main分支commit
- 每次创建Merge Request之前都要到main分支pull最新的代码,然后从最新的代码创建分支
- 每个Merge Request建议尽量小,方便代码评审。如果有多个相互独立的工作,可以创建多个分支和多个Merge Request。
提交冲突与解决方法
1.本地仓库的版本<远程仓库的版本
git pull #同步版本
git push
2.本地仓库和远程仓库有共同的内容不一致(分工不明确时容易导致多人修改了相同的部分)
git pull后需要手动对文件中的冲突内容进行取舍
然后再git add->git commit->git push