使用git有一段时间了,一直没时间做笔记,最近专门抽出时间来做个总结。不定期更新。
定义:git是一个版本控制工具。
一:git概念
- 1、集中式:版本库是集中存放在中央服务器中,要先从中央服务器获取最新版本,然后开始修改,完成后推送给中央服务器。
集中式缺点:必须联网才可以工作,局域网大文件速度快,但是在互联网中上传大文件就会影响效率。
- 2、分布式:没有中央服务器,每台电脑都是一个完整的版本库,工作时不需要联网,同时修改某一个文件的时候只需要把各自的修改推送给对方即可。
分布式优点:安全性高,因为每一个人都有完整的版本库,即使有某一台电脑坏掉也不会影响,集中式版本控制系统中央服务器出问题,所有人都无法工作。
二:git用法
Repository:
版本库/仓库,简单理解为目录,目录所有的文件都可以被git管理起来,每个文件的修改删除都可以跟踪它的历史记录,以备还原。
commit 可以理解为快照,每一次commit都保存了快照,使用log来查看
- git提交命令:
- 初始化仓库:git init
- 添加文件:git add .
- 提交文件:git commit -m “修改信息”
- git常用命令:
- 查看仓库状态:git status
- 查看修改内容:git diff
- 查看提交日志:git log
- 把xx文件在工作区的修改全部撤销:git checkout –xx.xx
- 删除某个文件:git rm file 删除的是工作区和暂存区的文件
版本回退:
- head指向就是当前版本
- 根据次数回退版本:git reset –head^100 ^100表示往上回退到第100个版本
- 根据提交id回退:git reset –head commit_id
- 穿梭版本之前使用git log查看提交历史,以确定要退到哪一个版本
- 如果想返回重来用git reflog 查看历史,以确定要回到未来的哪个版本
工作区/暂存区:
- 电脑中操作项目目录就是工作区
- 工作区中隐藏目录.git 就是git版本库
- git版本库中存储了很多东西,最重要的叫做stage(或者叫index)的暂存区,git为我们自动创建了第一个分支master,以及指向master的第一个指针head。
- 当你改乱了工作区的某个文件内容,想直接丢弃工作区的修改时,用git checkout – file
- 当你不仅仅改乱了工作区的某个文件内容,还添加到了暂存区时,想要丢弃修改,分两步,第一步:git rest head file 再进行第一步
- 当你提交了不合适的修改到版本库且没有推送到远程库时,可以通过版本回退git reset –head^1
- 远程仓库/github:
- 创建ssh key:ssh-keygen -t rsa -C “youremail@example.com”
- 成功后生成两个文件:私钥 id_rsa、公钥 id_rsa.pub
- 登陆github 添加sshkeys 拷贝id_rsa.pub的内容添加进去
- 连接远程仓库:git remote add origin git@github.com:github仓库地址
- 推送到远程库:git push -u origin master
- 关联远程库:git remote add origin git@server-name:path/repo-name.git
- 从远程克隆到本地库:git clone git@github.com:github仓库地址
SSH警告:
当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:
The authenticity of host ‘github.com (xx.xx.xx.xx)’ can’t be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。
Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:
Warning: Permanently added ‘github.com’ (RSA) to the list of known hosts.
这个警告只会出现一次,后面的操作就不会有任何警告了。
如果你实在担心有人冒充GitHub服务器,输入yes前可以对照GitHub的RSA Key的指纹信息是否与SSH连接给出的一致。