git 入门¶
基础篇¶
git是什么?为什么要用git?git怎么入门?¶
git是目前最常用的文件版本管理工具(之一)。具体内容我实在懒得写了,请参考这个教程。
- 实用篇(基本上必看):P1,P4,P5,P6,P8,P9,P13
- 感兴趣的其它随便看看,git的历史还是挺有意思的。
常用指令速查¶
git init # 初始化git仓库
git add . # 添加当前目录全部文件至暂存区
git commit -m '测试' # 提交,提交信息为测试
git push origin master # 推送至远端分支(master为需要推送分支,按实际需要选择)
git pull origin master # 合并远端分支至本地 (git pull 等于 git fetch + git merge)
git status # 查看当前状态
git log # 查看提交日志
git reset --hard xxxx # 强制回退至某个版本(xxxx为版本hash),慎用,因为这个操作会丢失所有后续的修改和提交
git merge dev # 合并dev分支至当前分支
git branch # 查看当前分支
git branch dev # 创建dev分支 (dev可选)
git branch -d dev # 删除dev分支
git branch -r # 查看远程分支
git branch -a # 查看所有分支 (包括远程分支)
git remote show origin # 查看远程仓库信息
git checkout master # 切换至master分支
git checkout -b dev # 创建dev分支并切换至dev分支
git checkout -b dev origin/dev # 创建远程分支到本地
git restore file # 丢弃工作区修改(file为具体文件名称)
git restore * # 丢弃所有工作区修改
git restore --staged file # 回退暂存区文件 不会更改文件内容
git submodule add submodule_url submodule_path # 添加子模块
git pull --recurse-submodules # 更新子模块
git 使用注意事项和tips¶
合理使用.gitignore文件
用途 .gitignore文件用于忽略不需要git追踪的文件。
哪些文件不应该用git追踪
- 编译生成的文件,如可执行文件,目标文件,编译生成的中间文件等,都不需要git追踪,因为这些文件可以通过编译脚本重新生成。
- 一些敏感信息,如密码,私钥等,也不应该被git追踪。
- 缓存文件如__pycache__也不应该被git追踪。
- 编辑器和IDE生成的文件,如.vscode,.idea等,也不应该被git追踪。(因为是个人配置文件,不同人的配置不同,不应该被git追踪)
如果缓存文件和编译生成的文件已经被git追踪了,会怎么样?
由于代码的变动往往会导致编译生成的文件和缓存文件的变动,这些变动会被git追踪,导致git仓库的体积变大,同时会导致冲突频繁,每次提交都要手动解决冲突,影响开发效率。
GitHub每次push都要输密码太麻烦?访问太慢了?
不妨配置一下ssh key,这样就可以免密登录了,访问速度也会快很多。 具体教程 | GitHub如何配置SSH Key
本地好用的git客户端
GitKraken,推荐是一款非常好用的git客户端,支持多平台,支持多种git仓库,包括GitHub,GitLab,BitBucket等。 GitKraken可以使用Github学生认证免费使用。
SourceTree是一款免费跨平台的git客户端。
面向 GitHub 新手的 Pull Request 冲突解决指南¶
进阶篇¶
git merge原理(递归三路合并算法)¶
git merge原理请参考1。
实际案例篇¶
我写好了数据标注部分的程序,如何建立一个新的仓库存放?¶
- 在github上新建了仓库Annotator,写好了readme和gitignore
- 在本地文件夹下初始化仓库:
git init
- 关联远程仓库:
git remote add origin git@github.com:Peiyang-Aeromodelling-Association/Annotator.git
- 先要把远程仓库pull下来,不然会有冲突:
git pull origin main
git add .
git commit -am"first commit"
git push origin main
失败,git branch
查看本地的默认是master分支,远端是默认main分支,不一致。git branch -M main
修改本地分支名称git push origin main
成功git remote -v
可以看此时关联的远程仓库