Git是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容。
开发过程中使用版本控制思想管理代码的版本迭代。
以SVN为例,开发人员是客户端,文件和版本信息是存放在服务器上的,所以我们是跟服务器进行交互的。
缺点
如果服务器一旦宕机、损坏,那所有的数据都会丢失,我们将其称之为单点故障
以Git为例,它是从本地就可以进行完整的版本控制。
任何一个人都可以把数据传给别人,那样就算自己的数据丢失,也可以从别人的电脑上恢复,这样就可以有效的避免单点故障。
维护远程库
局域网环境下
外网环境下
git init
注意:.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要随意修改。
git config [选项] user.name tom_pro
git config [选项] user.email [email protected]
选项:
空 代表项目级别
--global 代表系统用户级别
项目级别信息保存的位置,切换到当前目录,执行以下命令
cat .git/config
全局级别信息保存的位置
cat ~/.gitconfig
项目(仓库)级别
系统用户级别
优先级:项目(仓库)级别 > 系统用户级别
查看工作区、暂存区的状态
git status
将工作区的“新建/修改”添加到暂存区
git add [file name]
将暂存区的内容提交到本地库
git commit -m "commit message" [file name]
查看含当前版本之前的历史记录
git log [选项]
选项:
空 详细信息
--pretty=oneline 列表
--=oneline 精简Hash值的列表
查看所有回退、前进的历史记录
git reflog
HEAD@{
移动到当前版本需要的步数}
基于索引值操作【推荐】
git reset --hard 局部索引值
后退
一个^表示后退一步,n个^表示后退n步
git reset --hard HEAD^
表示后退n步
git reset --hard HEAD~n
前提:删除前,文件存在的状态提交到了本地库
删除文件之后,提交暂存区,再提交到本地库,只需要回退到文件存在的版本,即可找回已删除的文件
删除文件之后,只提交到了暂存区,未提交到本地库只需要使用以下命令即可恢复
git reset --hard HEAD
将工作区中的文件与缓存区进行比较
git diff [文件名]
将工作区中的文件和本地库的历史记录比较
git diff [历史索引] [文件名]
不指定文件名可比较当前工作区中所有的文件
git diff HEAD
在版本控制中,使用多条线同时推进多个任务
hot_fix:临时分支,专门用来修复Bug,修复完之后会合并到主干上
master:主干
feature_blue、feature_game:从主干复制出来的其它分支,可以与主干同时开发,不会互相影响,最终都会合并到主干上
创建分支
git branch [分支名]
查看分支
git branch -v
切换分支
git checkout [分支名]
合并分支
第一步:切换到接受修改的分支(被合并,增加新内容)上
git checkout [被合并分支名]
第二步:执行merge命令
git merge [有新内容分支名]
冲突的解决
第一步
编辑文件,删除特殊符号
第二步
把文件修改到满意的程度,保存退出
第三步
git add [文件名]
第四步
git commit -m "日志信息"
(注意:此时commit一定不能带文件名)
哈希算法也叫安全散列函数,又称信息摘要,它可以把任意的信息集,用非常简单的信息予以描述。
各个不同的哈希算法虽然加密强度不同,但是有以下几个共同点
Git底层采用的是SHA-1算法
哈希算法也可以用来验证文件
Git就是靠这种机制来从根本上保证数据完整性的
以文件变更列表的方式存储信息,这类系统将它们保存的信息看作是一组基本文件和每个文件随时逐步累积的差异。
Git把数据看作是小型文件系统的一组快照,每次提交更新时Git都会对当前的全部文件制作一个快照并保存这个快照的索引,为了高效,如果文件没有修改,Git将不再重新存储该文件,而是会创建一个指针指向之前存储的文件,所以Git的工作方式可以称之为快照流。
之所以会形成历史记录就是因为各个版本之间的父子关系
就是创建了一个指针
就是切换了指针指向的位置
1. 首先在Github上新建一个仓库,获取到仓库地址
例:https://github.com/UnityAlvin/book.git
2. 创建一个README文件
echo "# book" >> README.md
3. 初始化工作区
git init
4. 将工作区所有文件上传到暂存区
git add .
5. 提交
git commit -m "first commit"
6. 保存仓库地址到本地
git remote add origin https://github.com/UnityAlvin/book.git
7. 上传
git push -u origin master
git clone git地址
效果
拉取
git fetch [远程库地址别名] [远程分支名]
查看 拉取的文件
git checkout [远程库地址别名/远程分支名]
合并
git merge [远程库地址别名/远程分支名]
拉取+合并
git pull [远程库地址别名] [远程分支名]
1. 进入当前用户的家目录
cd ~
2. 删除.ssh 目录
rm -rvf .ssh
3. 运行命令生成.ssh 密钥目录
ssh-keygen -t rsa -C 用户名
注意:这里-C这个参数是大写的 C
4. 进入.ssh 目录查看文件列表
cd .ssh
ls -lF
5. 查看 id_rsa.pub 文件内容
cat id_rsa.pub
6. 复制 id_rsa.pub 文件内容,登录 GitHub,点击用户头像→Settings→SSH and GPGkeys
7. New SSH Key
8. 输入复制的密钥信息
9. 然后在GitHub→Clone Code的地方,选择Use SSH,复制SSH的远程地址
10. 回到 Git bash 创建远程地址别名
git remote add origin_ssh [email protected]:UnityAlvin/book.git
11. 测试
git commit -m "test ssh login" book.sql
第一次执行后,需要输一次回车
创建Git仓库,位置选择当前项目根目录,完成后,文件名会变成褐色
修改.git\info\exclude
添加需要忽略的配置
已忽略的文件在IDEA中会置灰
右键项目→Git→Add,完成后,文件名会变绿
右键项目→Git→Commit Directory
或者点击工具栏按钮,完成后,文件名会变回默认的颜色
2. 选择要切换的版本
5. 选择 Hard 并粘贴版本号
点击Create后自动切换新分支
在新分支添加新的代码并提交
让主干和分支在同一个位置添加一行代码
正常情况下是合作伙伴上传新的代码到 GitHub,如果此时本地库不更新将无法上传