这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天
概述
历史
Linux之父Linus在开发linux内核的时候, 最开始是手动合并代码, 然后是租用了商业版本控制系统BitKeeper, 后来闹矛盾, 于是Linus用C语言两周便开发了Git
Git:分布式版本管理系统
GitHub:为用户提供Git服务的代码托管平台
- 本地版本控制
- 集中式版本控制
- 分布式管理系统
操作区
- 三个操作区域:
- Working Directory(工作区): 平时存放项目代码的地方
- Stage/Index(暂存区): 临时存放你的改动,事实上它只是.git下的文件
- Repository(资源库): 安全存放数据的位置, 这里面有你提交到所有版本的数据
- Remote(远程仓库):托管代码的服务器
基本命令
添加git用户名和邮箱 一次即可
git --global user.name "name"
git --global user.email "email"
- 将本文件夹初始化, 建立Repository(.git文件)
git init
- 提交一个版本到暂存区Index, 并提交到资源库Repository
git status # 查看当前状态
git add FILE1 FILE2 # 添加文件到暂存区
git commit -m "这里是commit的注释" # commit之后暂存区的所有文件都清空, 需要重新add
- 查看本地修改记录
git status # 此时git会告诉你哪些文件修改了
git diff # 比较文件不同的地方
- 版本回退
git log --oneline # 得到commit记录, 同时显示commit id, 以及HEAD指针的位置
git reset --hard 2we78efj
git reset --hard HEAD^^ # 回退到上两个版本
# 回退后也可以前进
git reflog # 查看git命令历史, 得到想要版本的commit id. 再reset即可
- 撤销本地修改: 回退本地版本到最近一次add或者commit
git resotre FILENAME
# git checkout -- FILENAME #老版本
- 撤销暂存区的add记录, 但本地修改依然存在, 可撤回部分文件(unstage).
git restore --stage FILENAME
- 在本地删除文件后, 同步git暂存区
git rm FILENAME
# 或者:
git add FILENAME
- 查看已经commit到资源库Repository中的文件
git ls-files
远程
初始化 (ssh密钥为例)
ssh-keygen -t rsa -C "youremail@example.com"
- 关联一个远程仓库/解除关联
git remote add origin git@server-name:path/repo-name.git
git remote rm origin
- 远程代码克隆到本地
git clone URL
远程分支
- 首次推送分支到Remote (创建远程分支)
git push -u origin main
# 第一次推送完成后, 本地分支会关联main分支, 所以简化为:
git push origin main
当远程库是空的,我们第一次推送main
分支时,加上了-u
参数,Git不但会把本地的main
分支内容推送的远程新的main
分支, 若远程分支不存在则会创建远程分支, 还会把本地的 main
分支和远程的 main
分支关联起来,在以后的推送或者拉取时就可以简化命令.
- 删除远程分支
git push origin --delete BRNAME