Git/Gitub笔记
文章目录
一、版本控制
1.1 版本控制工具应该具备的功能
-
协同修改
多人并行不悖的修改服务器端的同一个文件。
-
数据备份
不仅保存目录和文件的当前状态,还能够保存没一个提交过的历史状态。
-
版本管理
在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约储存空间,提高运行效率。这方面SVN采用的是增量式管理的方式,而Git采取了文件系统快照的方式。
-
权限控制
对团队中参与开发的人员进行权限控制。
对团队外开发者贡献的代码进行审核——Git独有。
-
历史记录
查看修改人、修改时间、修改内容、日志信息。
将本地文件恢复到某一个历史状态。
-
分支管理
允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。
1.2 版本控制工具
集中式版本控制工具:CVS、SVN、VSS … …
分布式版本控制工具:Git、Mercurial、Bazaar、Darcs … …
二、Git简介
2.1 Git历史
Git官网:https://git-scm.com/
2.2 Git的优势
- 大部分操作在本地完成,不需要联网
- 完整性保证
- 尽可能添加数据而不是删除或修改数据
- 分支操作非常快捷流畅
- 与Linux命令全面兼容
2.3 Git结构
-
本地库
-
暂存区
-
工作区
三、Git命令行操作
3.1 本地库初始化
- 命令:
git init
3.2 设置签名
-
形式:
用户名:tom
邮箱:abcd@efg.com
-
作用:区分开发者身份
-
命令
git config
:项目级别签名例:
git config user.name tom_pro git congig user.email abcd@efg.com
信息保存在
./config
git config --global
:系统级别签名例:
git config --global user.name tom_glo git congig --global user.email hijk@lmn.com
信息保存在
~/.gitconfig
3.3 提交文件和查看状态
-
工作区添加到暂存区命令:
git add [resources]
-
查看工作区/暂存区状态:
git status
-
移出暂存区:
git rm --cached [resources]
-
暂存区提交到库:
git commit
或者用
git commit -m "tips" [resources]
省略编辑器步骤
3.4 版本控制
3.4.1 查看历史版本
命令:git log
简略显示:git log --pretty=oneline
/ git log --oneline
带下标显示:git reflog
3.4.2 跳转历史版本
命令:git reset --hard [哈希值]
符号^
:git reset --hard HEAD[^^...]
回退^
的个数个版本(例:回退两个版本)
符号~
:git reset --hard HEAD~[n]
指定后退n个版本
3.4.3 reset命令三个参数对比
-
--soft
参数:仅在本地库移动HEAD指针
-
--mixed
参数:在本地库移动HEAD指针
重置暂存区
-
--hard
参数:在本地库移动HEAD指针
重置暂存区
重置工作区
3.4.4 删除文件并找回
git reset --hard [指针位置]
- 删除操作已经提交,指针指向某个历史版本恢复文件
- 删除操作还未提交,指针指向当前版本HEAD恢复文件
3.5 比价文件差异
-
命令:
git diff [文件名]
比较历史版本文件:
git diff [指针位置] [文件名]
(文件名省略时比较全部)
3.6 分支管理
-
创建分支:
git branch [分支名]
-
查看分支:
git branch -v
-
切换分支:
git checkout [分支名]
-
合并分支:
git merge [新内容分支名]
注:要先切换到目标分支上,将新内容分支并过来
-
解决冲突
两个分支同时修改了某处,需要手动合并
修改后添加至暂存区
提交,解决冲突(commit不用加文件名)
-
3.7 Git的基本原理
3.7.1 哈希
-
Git底层采用的是SHA-1算法
-
哈希算法的特点:
- 不管输入的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定。
- 哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大。
- 哈希算法不可逆。
3.7.2 Git保存版本机制
-
集中式版本控制工具(SVN)机制
以文件变更列表的方式存储信息,每一个版本保存的是与前一版本的差异信息,获取某一版本内容可以看做把历史版本的所有信息拼接起来。
-
Git文件管理机制
Git会把数据制作为一个快照,每次提交更新都会把新数据制作一个快照,并保存快照的索引。如果其余文件没有被修改,Git不会重新存储这些文件,而是在新快照保留一个链接指向之前存储的文件。
-
Git分支管理机制
分支创建:创建一个新指针指向快照
分支切换:将HEAD指针指向新分支
更新新快照:
切换主分支:
更新主分支快照:
四、连接GitHub远程管理
4.1 创建GitHub仓库
获取HTTP地址
4.2 Git推送到远程库
-
创建远程仓库地址别名
origin表示仓库地址别名
查看状态:
git remote -v
-
推送到远程库:
git push [地址/别名] [分支名]
4.3 克隆远程仓库
-
命令:
git clone [地址]
新建一个文件夹在该文件夹执行命令,自动初始化本地库,且默认设置改地址别名为origin
4.4 拉取远程库
命令:git pull [远程库地址别名] [远程库分支名]
pull = fetch(拉取) + merge(合并)
也就是 git fetch [远程库地址别名] [远程分支名]
+ git merge [远程库地址别名/远程分支名]