Git基础
Git
-
Workspace:开发者工作区
-
Index / Stage:暂存区/缓存区
-
Repository:仓库区(或本地仓库)
-
Remote:远程仓库
git --version
查看安装git的版本
Git使用前配置
在使用git前,需要告诉git你是谁,在向git仓库中提交时需要用到。
1.配置提交人姓名: git config --globa1 user.name 提交人姓名
2.配置提交人姓名: git config --global user.email 提交人邮箱
3.查看git配置信息: git config --list
注意
1.如果要对配置信息进行修改,重复上述命令即可。
2.配置只需要执行一次。
提交步骤
git init
初始化git仓库git status
查看文件状态git add
文件列表追踪文件git commit -m
提交信息向仓库中提交代码git 1og
查看提交记录
撤销
- 用暂存区中的文件覆盖工作目录中的文件:
git checkout 文件
- 将文件从暂存区中删除:
git rm --cached 文件
- 将git仓库中指定的更新记录恢复出来,并且覆盖暂存区和工作目录:
git rest --hard commitID
分支
为了便于理解,大家暂时可以认为分支就是当前工作目录中代码的一份副本。
使用分支,可以让我们从开发主线上分离出来,以免影响开发主线。
分支细分
1.分支(master) :第-次向git仓库中提交更新记录时自动产生的一个分支。
2.开发分支(develop) : 作为开发的分支,基于master分支创建。
3.功能分支(feature) :作为开发具体功能的分支,基于开发分支创建。
功能分支的作用是开发一个独立的功能,当功能开发完成以后,再将功能分支中的代码合并到开发分支,这时功能分支就可以删除了。当开发分支中的功能累计到一定程度以后,再将开发分支中的代码合并到主分支。
功能分支->开发分支->主分支
分支命令
-
git branch
查看分支 -
git branch 分支名称
创建分支 -
git checkout 分支名称
切换分支 -
git merge 来源分支
合并分支 -
git branch -d 分支名称
删除分支(分支被合并后才允许删除) (-D 强制删除)
这里需要注意,在切换分支之前,当前分支上的工作一定要提交到git仓库中,要保持当前分支上的工作区是完全干净的状态,否则会出错
合并分支时,要先切换到主分支
删除分支
注意:如果要删除的分支,没有被合并,默认情况下,这个分支时不允许删除的,这是git程序对分支的保护机制,防止开发人员误删文件。如果一定要删除,可以使用git branch -D 分支名称
来删除分支
暂时保存更改
在git中,可以暂时提取分支上所有的改动并存储,让开发人员得到一个干净的工作副本,临时转向其他工作。
使用场景:分支临时切换
●存储临时改动: git stash
●恢复改动: git stash pop
多人协作开发流程
●A在自己的计算机中创建本地仓库
●A在github中创建远程仓库(start a project)
●A将本地仓库推送到远程仓库
●B克隆远程仓库到本地进行开发
●B将本地仓库中开发的内容推送到远程仓库
●A将远程仓库中的最新内容拉去到本地
本地仓库推送到Github远程仓库
git push 远程仓库地址 分支名称
在输入完推送远程仓库的命令后,会弹出验证权限的弹框
GitHub远程仓库地址别名
git remote add 仓库别名 别名所对应的仓库地址
用别名推送
git push 别名 分支名称
git push -u 别名 分支名称
加上-u之后git会记住仓库地址和分支名称,下次推送可直接用git push
总结:
git push
远程仓库地址分支名称git push
远程仓库地址别名分支名称git push -u
远程仓库地址别名分支名称
-u记住推送地址及分支,下次推送只需要输入git push
即可git remote add
远程仓库地址别名远程仓库地址
以上为A的操作
GitHub远程仓库克隆到本地仓库
克隆远端数据仓库到本地: git clone 仓库地址
现在B还并不能向远程仓库推送代码,因为没有权限,需要A邀请B称为当前项目的开发者
需要复制邀请链接,然后将其发给B。B在登录github的情况下,访问链接,并接受邀请。
现在B可以向远程仓库推送
B在克隆的时候会将A添加的远程仓库地址的别名也克隆下来 ,所以可直接使用别名
拉取远程仓库中最新的版本
拉取远程仓库中最新的版本:git pull 远程仓库地址 分支名称
解决冲突
在多人同时开发一个项目时,如果两个人修改了同一个文件的同一个地方,就会发生冲突。冲突需要人为解决。
这个时候只有先向远程仓库推送的人,才能推送成功,后推送的人是推送不上去的,因为第一个人已经向远程仓库提交了版本,第二个人的本地仓库中并没有这个版本,导致远程仓库版本高于本地仓库版本,所以推送不上去。
解决冲突:第二个人需要先将第一个提交的版本拉取到本地仓库中,先把冲突解决掉,然后再向远程仓库中提交
跨团队协作
1.程序员C fork仓库
2.程序员C将仓库克隆在本地进行修改
3.程序员C将仓库推送到远程
4.程序员C发起pull request
5.原仓库作者审核
6.原仓库作者合并代码
ssh免登陆
到目前为止,我们对远程仓库的操作,一直都是采用的https协议的仓库地址。这种协议要实现身份验证,用户必须要提供用户名和密码,在正常的情况下,每一次向远程仓库推送内容都是需要进行身份验证的,都需要提供用户名和密码,只不过现在使用的是win10操作系统。在我们第一次输入完用户名和密码后,操作系统就帮我们记住,下一次再推送的时候,使用的就是操作系统记住的用户名和密码。如果使用的操作系统不具有这有的功能,那么每次推送的时候,就都需要输入用户名和密码。频繁的输入,是一件头疼的事情,github提供了另外一种仓库通讯协议,就是ssh协议。
这种协议在实现身份验证时,是不需要使用用户名和密码的,它可以实现免登陆操作。在ssh中身份验证通过秘钥实现,秘钥是成对出现的,分为公钥和私钥。ssh通过验证公钥和私钥的配对情况,来决定验证是否通过。举个栗子:公钥相当于门锁,私钥相当于钥匙,如果钥匙能打开门锁,就说明是配对的,验证通过。公钥和私钥是开发者使用命令生成,实际上就是两个文件,公钥要将它放到github的账户中,私钥要保留在开发者的电脑中。当开发者通过ssh协议,向远程仓库推送内容时,公钥和私钥会进行配对,如果配对成功,内容就会推送成功,如果配对失败,内容就会推送失败。
生成秘钥:、ssh-keygen
秘钥存储目录: C:\Users\用户\.ssh
公钥名称: id. rsa.pub
私钥名称: id_ rsa
打开 id. rsa.pub文件,复制内容,打开github-->Settings-->SSH and GPG keys-->New SSH key 粘贴
在这个过程中,是没有输入用户名和密码的。是因为在github中存储了我的公钥,在我自己的电脑中,由保留了公钥对应的私钥,在推送的时候,会自动进行配对。配对成功,推送成功。
Git忽略清单
将不需要被git管理的文件名字添加到此文件中,在执行git命令的时候,git就会忽略这些文件。
git忽略清单文件名称: .git
将工作目录中的文件全部添加到暂存区:git add .
为仓库添加详细的说明
在项目的根目录下创建一个readme.md文件,将它推送到远程仓库。这个文件的内容会自动显示在仓库文件列表的下方。