Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。当版本进行切换时,工作区的文件内容会变成切换后的版本下的。
Git官网: https://git-scm.com/
名词解释:
(1)版本控制:版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。
(2)集中式版本控制工具:集中式版本控制工具如SVN等,只有一个单一的集中管理的服务器,该服务器保存了所有文件的修订版本,协同工作的人们都通过客户端连到这台服务器取出最新的文件或者提交更新。
(3)分布式版本控制工具:分布式版本控制工具如Git等,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。
(4)代码托管中心:是基于网络服务器的远程代码仓库,一般称为远程库。 搭建在局域网中的远程代码仓库是GitLab,搭建在互联网中的远程代码仓库是GitHub(外网)和Gitee 码云(国内网站)。
Git 首次安装必须设置用户签名,否则无法提交代码。签名的作用是区分不同操作者身份,用户的签名信息在每一个版本的提交信息中能够看到。
注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系。
基本语法:
git config --global user.name 用户名
git config --global user.email 邮箱
设置完成后可以在home目录(C:\Users\当前登录的用户名)下的.gitconfig文件中查看相关信息。
用git对目录进行管理,需要通过初始化让git获取这个目录的管理权。初始化本地库成功后会生成一个.git的隐藏文件。
基本语法:
git init
基本语法:
git status
(1)首次查看(工作区没有任何文件)
(2)工作区新增文件 hello.txt
(3)再次查看(检测到未追踪的文件)
将工作区的文件添加到暂存区。
基本语法:
git add 文件名
注意:可以通过以下命令将已追踪的文件从暂存区中删除(该文件将会变成未追踪,不会有日志记录),而在工作区的该文件不会删除。
git rm --cached 文件名
基本语法:
git commit -m "日志信息" 文件名
查看版本信息记录
基本语法:
git reflog
基本语法:
git log
(2)将修改的文件再次添加暂存区并提交本地仓库。git 是按照行来维护文件的,在文件中修改一行,实际上是先删除原来的那一行,再新增一行。
(3)查看版本信息。
Git 切换版本,底层其实是移动的HEAD 指针。
切换版本:
基本语法:
git reset --hard 版本号
当版本6f4b4b0切换到版本d3652fb时,查看工作区的文件,其文件内容会变成版本d3652fb下的。
通过.git文件下的HEAD文件来查看当前分支。然后通过HEAD的内容,也就是.git文件中refs/heads目录下的master查看当前版本号。
分支:在版本控制过程中,同时推进多个任务,每个任务可以创建每个任务的单独分支,一个分支代表一条独立的开发线。使用分支意味着可以从开发主线上分离开来,然后在不影响主线的同时继续工作。分支可以简单理解为副本,一个分支就是一个单独的副本。
分支底层是指针的引用,比如有master、hot-fix 两个分支,master、hot-fix 其实都是指向具体版本记录的指针。当前所在的分支,其实是由 HEAD 决定的。所以创建分支的本质就是多创建一个指针。HEAD 如果指向master,那么当前分支现在就在master 分支上。 HEAD 如果指向hot-fix,那么当前分支现在就在hotfix 分支上。
基本语法:
git branch -v
基本语法
git branch 分支名
修改分支的文件内容,并添加到暂存区提交到本地库。
基本语法
git checkout 分支名
master切换到hot-fix分支,文件中显示的是不是master中修改之后的文件内容,而是在hot-fix分支下的文件内容。
通过.git文件下的HEAD文件来查看当前分支。然后通过HEAD的内容,也就是.git文件中refs/heads目录下的hot-fix查看当前版本号。
基本语法:
在当前分支上合并其它分支
git merge 分支名
例:在master 分支上合并hot-fix 分支
(1)切换到hot-fix分支,修改文件内容,添加到暂存区,提交本地库。
(2)在master分支上合并hot-fix分支。
(3)分支合并后文件的内容。
产生冲突原因:合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个,必须人为决定新代码内容。
(2)修改hot-fix分支上的文件内容。
(3)在master上合并hot-fix分支,合并时出现冲突,需要修改冲突文件的内容,再添加暂存区并提交到本地库。
特殊符号:
<<<<<<< HEAD
当前分支的代码
=======
合并过来的代码
>>>>>>> hot-fix
GitHub 网址:https://github.com/
基本语法:
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址
基本语法:
git push 远程地址别名/远程地址链接 本地分支
当第一次进行推送操作时,会弹出一个窗口让你的GitHub账户进行授权,授权成功后才能进行推送远程仓库git-demo中。当推送执行成功后进入GitHub,可以发现master 分支上的内容已经推送到远程仓库。
基本语法:
git pull 远程地址别名/远程地址链接 远程分支名
(1)在远程仓库对hello.txt进行修改。
(3)查看本地仓库的hello.txt。
基本语法:
git clone 远程地址
(1)新建一个文件夹git-demo2,进行该文件夹,右键选择Git Bash。
(2)通过远程地址克隆远程仓库到本地(公开类型的远程仓库克隆时不用GitHub账号和密码,可以直接克隆到本地)。
克隆会做如下操作:1、拉取代码;2、初始化本地仓库;3、自动创建远程地址的别名(别名为origin)。
1、邀请合作者加入团队。
2、输入合作者的GitHub账号或者GitHub名称。
3、选择合作者的GitHub账号。
4、点击将合作者添加到该仓库。
5、复制地址,通过qq或者微信发送给对方。
6、合作者登录GitHub账号后,再访问该地址,点击同意加入该仓库。
7、合作者点击个人头像,点击Your organizations,即可看到该仓库。
8、当合作者加入该仓库后,就可以对该仓库的文件进行修改。
1、跨团队协作人搜索该仓库。
3、创建成功后,跨团队协作人可以在其远程仓库中看到该仓库。
4、跨团队协作人修改仓库的文件。
5、跨团队协作人创建一个合并请求。
6、仓库管理员找到跨团队协作人发送的合并请求,仓库管理员先审核一遍代码,没有问题的话,再点击确认合并按钮。
7、合并请求成功合并后,在管理员的仓库文件中出现了跨团队协作人写的代码。
在GitHUb远程仓库中还有一个 SSH 地址,可以使用 SSH 进行免密登录操作。在使用SSH地址进行操作前,要先使用命令在本地电脑生成ssh公有秘钥和私有秘钥,然后使用公有秘钥在GitHub账号中生成一个SSH keys。
1、找到本地电脑的home目录。
2、使用命令生成ssh公有秘钥和私有秘钥。
生成ssh秘钥命令:
ssh-keygen -t rsa -C 账号邮箱
ssh-keygen:生成ssh免密登录的私有密钥和公有密钥的命令。
-t:密钥的类型,指定哪种算法生成。
rsa:非对称加密协议。
-C:用于识别这个密钥的注释。
3、复制公有秘钥id_rsa.pub 文件内容,登录GitHub,点击用户头像,点击Setting,点击SSH and GPG keys。
4、点击添加SSH Key。
5、输入SSH Key的名称和公有秘钥的文件内容,点击生成一个SSH Key。
6、接下来再往远程仓库push或者从远程仓库中pull文件时,使用SSH 连接就不需要登录了。