基本介绍
- 工作区:注意工作区不是IDEA,IDEA只是我们开发代码的工具,我们本地代码的存放目录才是我们的工作区。
- 暂存区:在本地写了代码之后,得让git知道你的代码文件,因此你需要将工作区的代码添加到暂存区。暂存区是临时存储的,也就就是说暂存区的代码是可以删掉的。
- 本地库:暂存区的代码提交到本地库之后,才会产生历史版本,也就谁说此时的代码删不掉了,因为这个历史版本会一直存在。
Git安装
基本使用
常用命令
命令名称 | 作用 |
---|---|
git config –global user.name 用户名 | 设置用户签名 |
git config –global user.email 邮箱 | 设置用户邮箱 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git commit -m “日志信息” 文件名 | 提交到本地库 |
git reflog | 查看历史记录 |
git reset –hard 版本号 | 版本穿梭 |
设置用户签名
##设置用户名
git config --global user.name 用户名
##设置邮箱
git config --global user.email 邮箱
设置好用户名和邮箱之后,可以在git全局配置文件中看到设置的信息
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码。
注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系
初始化本地库
你要想使用git管理目录(项目代码所在目录)的话,就需要将目录的权限交给git,即初始化本地库。
git init
初始化本地库之后,会在目录中生成.git目录
查看本地库状态
git status
接着我们在项目目录中新增一个文件,此时再查看本地库状态,发现新增的文件还是红色的,代表该文件还未被追踪。
添加暂存区
git add 文件名
添加到暂存区后,此文件就会被开始追踪了(文件是绿色的)。
注意:上面的命令也提示我们,如果想要从暂存区中删除文件(只是暂存区中删除,工作区不会被删除),使用如下命令
git rm --cached 文件名
提交本地库
git commit -m "日志信息" 文件名
接着继续修改文件
查看历史版本
# 查看简要的历史版本日志
git reflog
# 查看详细的历史版本日志
git log
版本穿梭
如果对于想要退回到以前的版本,即修改HEAD指向的版本,则可以通过版本穿梭进行回退
git reset --hard 想要回退到的版本号
首先查看当前HEAD指向的版本,最新的版本
也可以打开.git目录中查看
发现最新的版本号就是上面通过git log
命令查看的d55be83fa4595bed566ba33a599cf2da22007433
此时的版本号图如下图所示
此时我们想要版本穿梭到0b7a3b1703bf1130acfb53740e8d50af08ffde7f
,即first commit
此时hello.txt
中文件内容会发生改变,变成first commit
中的内容,当然F:\pro_demo\.git\refs\heads\master
中的当前版本号也会变成0b7a3b1703bf1130acfb53740e8d50af08ffde7f
此时的版本号图如下图所示
git分支操作
什么是分支
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)
分支的好处
同时并行推进多个功能开发,提高开发效率。各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
分支操作
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
查看分支
git branch -v
创建分支
#创建新的分支,并将当前所在分支的内容复制一份
git branch 分支名
切换分支
git checkout 分支名
查看.git目录中的内容
发现当前HEAD
指向了hot-fix
分支了
分支目录中也多了一个hot-fix
分支
分支之间是相互独立,互不影响的,即我在hot-fix
分支上修改内容,提交的话,不会影响到主分支master
。
合并分支
#把指定的分支合并到当前分支上
git merge 分支名
正常的合并
在刚刚创建的hot-fix
分支中,修改hello.txt
文件
接着切换回master
分支,查看此时的hello.txt
文件,发现还是原来的内容
然后合并hot-fix
分支,合并成功
冲突合并
冲突产生的原因:合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替。我们决定使用哪一个。必须人为决定新代码内容。
首先我们在master分支,修改hello.txt
文件
接着切换到hot-fix
分支,修改hello.txt
文件
然后切换回master
分支,合并hot-fix
分支
冲突产生的表现:后面状态为 MERGING
,此时查看hello.txt
文件
特殊符号:<<<<<<< HEAD
当前分支的代码 =======
合并过来的代码 >>>>>>> hot-fix
最后vim hello.txt
修改文件,合并hot-fix
修改的内容
接着,想要提交的话,注意:此时使用 git commit 命令时不能带文件名
发现后面 MERGING
消失,变为正常
切换分支图示如下:
master、hot-fix
其实都是指向具体版本记录的指针。当前所在的分支,其实是由 HEAD
决定的。所以创建分支的本质就是多创建一个指针。
-
HEAD
如果指向master
,那么我们现在就在master
分支上。 -
HEAD
如果执行hotfix
,那么我们现在就在hotfix
分支上。
所以切换分支的本质就是移动 HEAD
指针。
git团队协作机制
团队内协作
注意:令狐冲
clone
代码之后,修改代码之后,想要push
到远程库的话,提前是得先把令狐冲加入到团队成员中,才有权限push
跨团队协作
GitHub操作
GitHub 网址:github.com/
Ps:全球最大同性交友网站,技术宅男的天堂,新世界的大门,你还在等什么?
创建远程库
远程库操作
命令 | 作用 |
---|---|
git remote -v | 查看当前所有远程地址别名 |
git remote add 别名 远程地址 | 起别名 |
git push 别名 分支 | 推送本地分支上的内容到远程仓库 |
git clone 远程地址 | 将远程仓库的内容克隆到本地 |
git pull 远程库地址别名 远程分支名 | 将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并 |
创建远程仓库别名
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址
推送本地分支到远程仓库
git push 别名 分支
上面我们创建了远程库,但是此时远程库还没有代码,所以我们想把本地库代码推送到远程库
出现连接超时的话,重试几次。
此时发现已将我们 master
分支上的内容推送到 GitHub
创建的远程仓库。
克隆远程仓库到本地
克隆代码是不需要登录github
的
git clone 远程地址
小结:clone
会做如下操作。1、拉取代码。2、初始化本地仓库。3、创建别名
邀请加入团队
我们知道想要其他人也拥有push
代码到远程库的权限,需要邀请他加入团队。选择想要邀请的作者。
我们来模拟一下这个过程,首先在github
再创建一个令狐冲账号。
接着邀请令狐冲加入项目合作者
复制地址 并通过微信,钉钉等方式发给令狐冲 , 复制内容如下 :
github.com/yellowhs/pr…
接着登录令狐冲账号到github
,打开复制的邀请链接,点击同意
同意之后,就可以看到pro_demo
远程仓库了
然后令狐冲修改本地库代码。
现在这种弹出框github
不支持密码登录,需要通过token
登录,可以参考文章:blog.csdn.net/qq_41646249…
跨团队协作
首先将远程仓库的地址复制发给邀请跨团队协作的人,比如东方不败。项目可以通过搜索的方式
也可以在东方不败的 GitHub
账号里的地址栏复制收到的链接,然后点击 Fork
将项目叉到自己的远程仓库。
接着我们为了简单演示,直接修改刚刚fork
的远程库代码,当然正常的开发步骤是先clone
到自己的本地库,修改代码,然后commit
到自己本地库,然后再push
到刚刚fork
的远程库
接下来点击上方的 Pull Request
请求,并创建一个新的请求。
接着换账号登录,审核pull request
代码
如果代码有问题的话,可以在添加评论,这样东方不败也能看到的
代码没有的话,可以点击直接合并
SSH 免密登录
之前使用HTTPS
地址操作的时候,每次都需要登录,比较繁琐,我们可以看到远程仓库中还有一个 SSH
的地址,因此我们也可以使用 SSH
进行访问
我们先把本地的.ssh
目录删了
然后在这个目录中打开git bash
,执行命令
ssh-keygen -t rsa -C 自己的邮箱
然后查看发现当前目录重新生成了.ssh
目录了
接着打开settings
复制公钥文件id_rsa.pub
的内容,打开
接着我们来测试一下,之前我们合并过东方不败的pull request
代码,我们本地库拉取一下