跳转至

git 入门

基础篇

git是什么?为什么要用git?git怎么入门?

git是目前最常用的文件版本管理工具(之一)。具体内容我实在懒得写了,请参考这个教程

  • 实用篇(基本上必看):P1,P4,P5,P6,P8,P9,P13
  • 感兴趣的其它随便看看,git的历史还是挺有意思的。

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追踪

  1. 编译生成的文件,如可执行文件,目标文件,编译生成的中间文件等,都不需要git追踪,因为这些文件可以通过编译脚本重新生成。
  2. 一些敏感信息,如密码,私钥等,也不应该被git追踪。
  3. 缓存文件如__pycache__也不应该被git追踪。
  4. 编辑器和IDE生成的文件,如.vscode,.idea等,也不应该被git追踪。(因为是个人配置文件,不同人的配置不同,不应该被git追踪)

如果缓存文件和编译生成的文件已经被git追踪了,会怎么样?

由于代码的变动往往会导致编译生成的文件和缓存文件的变动,这些变动会被git追踪,导致git仓库的体积变大,同时会导致冲突频繁,每次提交都要手动解决冲突,影响开发效率。

GitHub每次push都要输密码太麻烦?访问太慢了?

不妨配置一下ssh key,这样就可以免密登录了,访问速度也会快很多。 具体教程 | GitHub如何配置SSH Key

本地好用的git客户端

GitKraken,推荐是一款非常好用的git客户端,支持多平台,支持多种git仓库,包括GitHub,GitLab,BitBucket等。 GitKraken可以使用Github学生认证免费使用。

GitKraken

SourceTree是一款免费跨平台的git客户端。

SourceTree

面向 GitHub 新手的 Pull Request 冲突解决指南

知乎专栏 | 面向 GitHub 新手...

进阶篇

git merge原理(递归三路合并算法)

git merge原理请参考1

实际案例篇

我写好了数据标注部分的程序,如何建立一个新的仓库存放?

  1. 在github上新建了仓库Annotator,写好了readme和gitignore
  2. 在本地文件夹下初始化仓库:git init
  3. 关联远程仓库:git remote add origin git@github.com:Peiyang-Aeromodelling-Association/Annotator.git
  4. 先要把远程仓库pull下来,不然会有冲突:git pull origin main
  5. git add . git commit -am"first commit"
  6. git push origin main失败,git branch查看本地的默认是master分支,远端是默认main分支,不一致。
  7. git branch -M main 修改本地分支名称
  8. git push origin main成功
  9. git remote -v可以看此时关联的远程仓库

Reference