git 学习笔记
1. 工作流
【十分钟学会正确的github工作流,和开源作者们使用同一套流程】 https://www.bilibili.com/video/BV19e4y1q7JJ/
- 克隆到本地并开发
git clone https://gitee.com/lei2019/mongolian_news_crawler.git
# 到本地
git checkout -b xxx
切换至新分支xxx(相当于复制了remote的仓库到本地的xxx分支上
- 修改或者添加本地代码(部署在硬盘的源文件上)
git diff
查看自己对代码做出的改变
git add
上传更新后的代码至暂存区
git commit
可以将暂存区里更新后的代码更新到本地git
git push origin xxx
将本地的xxxgit分支上传至github上的git
- 开发完成后分支合并(如果在写自己的代码过程中发现远端GitHub上代码出现改变)
git checkout main
切换回main分支
git pull origin master
(main) 将远端修改过的代码再更新到本地
git checkout xxx
回到xxx分支
git rebase main
我在xxx分支上,先把main移过来,然后根据我的commit来修改成新的内容
- (中途可能会出现,rebase conflict —–》手动选择保留哪段代码)
git push -f origin xxx
把rebase后并且更新过的代码再push到远端github上(-f —》强行)
- 原项目主人采用pull request 中的
squash and merge
合并所有不同的commit
- 远端完成更新后
git branch -d xxx
删除本地的git分支
git pull origin master
再把远端的最新代码拉至本地
git remote prune origin
同步“修剪”分支,保持分支的一致性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| git clone <repo> git checkout -b feat-xxx
git diff git add <pathspec>... git commit git push origin feat-xxx
git checkout main git pull origin main git checkout feat-xxx git rebase main
git push -f origin feat-xxx
git branch -d feat-xxx git pull origin main git remote prune origin
|
单分支工作流
- 初始化仓库
git clone url
或者git init
- 本地开发
- 修改、编写代码 - 开发相应的功能
git diff
查看自己对代码做出的改变
git add .
git commit -m "comment"
- 可选择重复进行步骤2.1开发相应的功能,后add commit
- 将本地修改推送到远程仓库
git push
- push出错 - 如果有人在main分支上做了修改,那么push就会出错
git pull
或git pull --rebase
- 可能产生冲突 - 当你与远程仓库上最新的提交修改了同一个文件,那么就可能出现冲突
- 处理冲突 - 使用
git status
查看存在冲突的文件 - 选择要保留的代码
git add .; git commit -m "comment"
冲突处理完毕后提交代码
- 冲突处理完毕再次进行步骤 3.1
git push
push的时候仍然可能会出错
- 接下来可以再进行步骤2本地开发
2. git学习工具
【团队开发神器 Git/GitHub 自学指南,几分钟掌握学习重点】 https://www.bilibili.com/video/BV1KZ4y1e7cG/
3. 子模块 submodule
知识1:克隆一个带有submodule的库
方法1:
1
| git clone <url> --recursive
|
方法2:
下载所有submodule
1 2
| git submodule init git submodule update --recursive
|
下载指定的submodule
1 2
| git submodule init lib1 lib2 git submodule update # 会update所有被init过的submodule
|
知识2:在现有仓库中添加submodule
1
| git submodule add <url> <dir>
|
知识3:更新submodule
方法1:
方法2:
1 2
| git submodule foreach git checkout master git submodule foreach git pull
|
1
| git submodule update --remote
|
知识4:删除现有仓库中的submodule
1 2 3 4 5 6
| # 逆初始化模块,其中{MOD_NAME}为模块目录,执行后可发现模块目录被清空 git submodule deinit {MOD_NAME} # 删除.gitmodules中记录的模块信息(--cached选项清除.git/modules中的缓存) git rm --cached {MOD_NAME} # 提交更改到代码库,可观察到'.gitmodules'内容发生变更 git commit -am "Remove a submodule."
|
4. subtree
github中还是submodule用的多一点,等有时间再深入研究