一、Git命令操作
1、本地仓库初始化
命令:git init
将当前目录初始化为本地仓库。创建了名为.git
的隐藏目录。使用ls -lA
可查看。
注意:.git
目录中存放的是本地仓库相关的子目录和文件,不要轻易删除或修改。
2、设置签名
- 形式:
- 用户名:例
tom
- Email地址:例
goodMoring@atguigu.com
- 用户名:例
- 作用:区分不同开发人员的身份
- 注意:这里的签名与登录远程库所需的账号、密码无关。
- 命令(可设置不同级别)
- 项目级别/仓库级别:仅在当前本地库范围有效
git config user.name 用户名
git config user.email 用户邮箱
- 系统用户级别:登录当前操作系统的用户范围
git config --global user.name 用户名
git config --global user.email 用户邮箱
- 优先级:项目级别优先于系统用户级别。
- 项目级别/仓库级别:仅在当前本地库范围有效
项目级别的签名被保存在.git下的config文件中。可使用命令cat .git/config
命令查看文件内容。
而系统用户级别的会被保存在用户家目录下的.gitconfig文件中,可使用命令cat ~/gitconfig
查看。
3、基本操作
1)、状态查看操作
git status
查看工作区、暂存区状态
2)、添加操作
git add [file name]
将工作区的“新建/修改”添加到暂存区
3)、提交操作
git commit -m "commit message" [file name]
将暂存区的内容提交到本地库。-m参数说明提交信息,相当于注解,用来说明本次提交信息。不使用此参数会进入vim编辑器中进行设置。
4)、查看历史记录
git log
显示详细的提交信息
git log --pretty=oneline
在一行简洁显示
git log --oneline
更为简洁的显示
git reflog
在上面的基础上,额外显示移动到其他版本的步数。
注意:前三个只能显示当前所在版本即此版本以前的信息。而git reflog
可以查看所有版本记录。
5)、版本前进后退
1.基于索引值操作(推荐)
git reset --hard [索引值]
2.使用^符号,只能后退
git reset --hard HEAD^
。^个数量就是要后退的个数。
3.使用~符号
若要回退多个版本,可以使用波浪线符号~
来指定要回退的个数。例如:git reset --hard HEAD~3
6)、reset命令的参数对比
- --soft:仅仅在本地库移动HEAD指针
- --mixed:在本地库移动HEAD指针,重置暂存区
- --hard:在本地库移动HEAD指针,重置暂存区,重置工作区
7)、删除文件并找回
前提:文件被删除前,文件存在时的状态提交到了本地库。
操作:
- 若删除操作已经提交到本地库,那么回退到文件存在的版本
- 若删除操作未提交到本地库,使用
git reset --hard HEAD
即可
8)、比较文件差异
git diff [文件名]
默认是将工作区中的文件与暂存区中的文件进行比较。
也可以将工作区中的文件与本地库中的某一版本进行比较,使用命令git diff [本地库中的历史版本] [文件名]
如果不指定文件名,就会比较工作区中的所有文件。
4、分支管理
在版本控制过程中,使用多条线同时推进多个任务。
1)、分支的好处
- 同时并行推进多个功能开发,提供开发效率
- 各个分支在开发过程中,如果某一个分支开发失败,不会影响其它分支。删除失败分支重新开始即可。
2)、分支操作
- 创建分支
git branch [分支名]
- 查看分支
git branch -v
- 切换分支
git checkout [分支名]
- 合并分支
- 第一步:切换到接收修改的分支
- 执行
git merge [分支名]
命令
3)、解决冲突
不同的分支上进行的操作可能会产生冲突。例如:对同一个文件的同一行内容进行了不同的修改。在合并分支时就会产生冲突。并且冲突的地方会标记出来。
-
第一步:编辑文件,删除特殊符号。(标注错误地方的符号)
-
第二步:把文件修改好,保存退出
-
第三步:
git add [文件名]
-
第四步:
git commit -m "日志信息"
,注意此时不要带具体文件名。
二、Git基本原理
1、hash算法
哈希是一个系列的加密算法,各个不同的hash算法虽然加密强度,但是有以下几个共同点:
- 不管输入数据的数据量多大,用同一个哈希算法,得到的加密结果长度固定。
- 哈希算法确定,输入数据确定,输出确定
- 哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大
- 哈希算法不可逆
Git底层采用的是SHA-1算法。
2、Git保存版本的机制
Git把数据看做是小型文件系统的一组快照。每次提交更新时Git都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以Git的工作方式可以称之为快照流。
3、Git分支管理机制
Git分支的管理实质上就是创建一个新的指针,并将HEAD指向这些不同的指针来切换分支。
三、Git管理远程库
1、为远程库起别名
每次推送到远程库都要输入远程库的一长串地址很不方便。我们可以为远程库起别名。使用别名就能推送了。
git remote add 别名 远程库地址
2、推送到远程库
git push 别名|远程库地址 分支名
如果要将本地的分支推送到仓库的一个分支上,先在本地切换到要推送的分支,再使用git push -u 别名|仓库地址 分支名
,如果远程仓库没有此分支,就会创建此分支,然后将本地分支推送到对应的分支上
3、克隆
git clone 远程库地址
- 完整的把远程库下载到本地
- 创建origin远程库地址别名
- 初始化本地库
4、邀请其他成员加入团队
可以将其他人邀请加入团队,这样别人也可以对远程库进行读写操作。
5、远程库的拉取
pull=fetch+merge
git fetch [远程库地址] [远程分支名]
git merge [远程库地址/远程库分支]
fetch将会在本地创建一个名为远程库地址/远程库分支
的分支,不会修改当前分支。
而git pull [远程库别名|地址] [分支名]
。会直接将远程库上的内容拉取到本地并合并到对应的分支上。
6、协同开发的冲突解决
如果不是基于Github远程库的最新版所做的修改,不能推送,必须先拉取
拉取下来进入冲突状态,则按照“分支冲突解决”操作解决即可。
7、跨团队协作
第一步:团队外人员先fork,就会创建一个属于自己的相同的远程库。
第二步:本地修改,然后推送到远程
第三步:在远程库pull request。在点击new pull request就能看到自己所做的修改,然后可以create pull request,这样就能将自己的远程库的请求发送给原始库的拥有者。
第四步:原始库的拥有者对pull request进行审核。若通过可以合并。
第五步:将远程库修改拉取到本地
8、SSH登录
- 进入当前用户家目录
cd ~
- 删除.ssh目录
rm -rvf .ssh
- 运行命令生成.ssh密钥目录
ssh-keygen -t rsa -C 邮箱地址
- 进入.ssh目录,目录内生成有
id_rsa
和id_rsa.pub
文件,将id_rsa.pub
中的内容,添加到github的ssh key中 - 可以使用ssh地址进行推送。为方便也可以为ssh地址起别名