准备工作
版本管理软件
作用
记录代码的版本
实现多人协作
分类
集中式,典型代表 SVN
分布式,典型代表 Git
注册远程仓库账号
远程仓库相当于中央服务器
我们需要在github上或码云上注册一个账号,用于创建远程仓库使用
注册的时候,要使用一个邮箱,所以我们必须有一个邮箱。
如果涉及到邮箱验证,不要使用手机邮箱,应该使用浏览器邮箱。
初次使用Git管理项目
Git软件在工作的时候,需要知道你是谁?所以需要设置一个用户名和邮箱。
这个用户名和邮箱,最好使用你的github账号或码云账号,当然随便填也可以。
具体做法:
任何文件夹,空白处,右键 --> Git Bash Here
依次执行下面两行代码
# --global 会将配置项保存到用户配置
$ gitconfig--globaluser.name"xxx"
$ gitconfig--globaluser.email"xxx"
$ 不是命令命令的一部分,你只需要从 “git config ....” 这里开始复制(或抄写)
Git初始化
目的是学习,所以,随便创建一个项目文件夹,里面随便创建几个文件,打开项目文件夹
一定要在项目文件夹中,右键-->Git Bash Here。
执行下面的命令:
# 初始化,表示使用Git管理我们的项目。这个命令只需要执行一次(注意空格)
gitinit
对于一个项目来说,git init 只需要执行一次
执行 git init 命令之后,会在项目文件夹中生成一个隐藏的 .git 文件夹
Git 管理项目的每一次记录,都在 .git 文件夹里面保存着。
你的计算机中,可以有多个项目,而且都可以使用Git来管理,不会冲突
如果你的项目需要使用git管理,则必须在项目文件夹中初始化
mac查看隐藏文件 shift+command+.
初体验
初始化之后,就可以使用Git来管理你的项目了。
用Git保存当前的代码
gitadd .
gitcommit-m'提交说明(此次提交了什么代码,功能是什么,类似注释)'
新增、删除或修改了代码(随便新增、删除或修改点代码),用Git保存修改后的代码
gitadd .
gitcommit-m'提交说明'
新增、删除或修改了代码(随便新增、删除或修改点代码),用Git保存修改后的代码
gitadd .
gitcommit-m'提交说明'
查看提交日志
# 查看详细日志记录
gitlog
# 查看简略版的记录
gitlog--oneline
# 查看所有的记录(适用于版本穿梭后)
gitreflog
gitreflog--oneline
切换版本,在历史版本中穿梭
# 上述查看提交日志的时候,会看到每次提交的版本号,然后执行下面的命令即可完成版本穿梭
gitcheckout 版本号
穿梭到历史的某个版本后,打开你的代码看看,是不是很神奇呢?
三个区域
下面三个区域,是Git虚拟的区域,看不到,摸不着。
工作区
工作区,指的是使用Git管理后的文件,这些文件显示在磁盘上,供我们使用或修改的区域。所以,粗略的说,项目文件夹就是工作区。
暂存区域
执行 git add .之后,文件由工作区,添加到了暂存区。 暂存区保存了下次将提交的文件列表信息。
Git 仓库区、本地仓库
执行 git commit -m '提交说明' 之后,代码会被提交到仓库区。仓库区是 Git 中最重要的部分,代码只有提交到仓库,才会形成一次历史记录,即才会形成一个版本。
工作区新建的文件和Git没有任何关系;文件被添加到暂存区,才叫做被Git管理过
记录每次更新到仓库
添加文件到暂存区
新文件,只有添加到暂存区,才叫做被Git管理。否则和Git没什么关系,即使文件在项目文件夹。
# 添加指定文件到暂存区
$ gitadd 文件名
# 以空格隔开可以一次 add 多个文件
$ gitadd [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录
$ gitadd [dir] [file] [dir] [file] [file] ...
# 添加当前目录的所有文件到暂存区,包括子目录
$ gitadd .
提交文件到仓库
提交到仓库的文件,是暂存区中的文件。
# 提交暂存区到仓库区
$ gitcommit-m[message]
# 提交暂存区的指定文件到仓库区
$ gitcommit [file1] [file2] ...-m[message]
# 提交工作区和暂存区自上次commit之后的变化,直接到仓库区。
# 新文件,从未被Git管理过,是不能直接提交到仓库区的
$ gitcommit-a-m"提交日志"
撤销操作
撤销操作,只能恢复暂存区或工作区,与最近一次提交的代码一致。
# 恢复暂存区的指定文件到工作区
$ gitcheckout [file]
# 恢复暂存区的所有文件到工作区
$ gitcheckout .
# 恢复某个commit的指定文件到暂存区和工作区
$ gitcheckout [commit版本号] [file]
# 重置暂存区的指定文件,与上一次 commit 保持一致,但工作区不变
$ gitreset [file]
# 重置暂存区与工作区,与上一次commit保持一致。该命令后不能加文件或文件夹
$ gitreset--hard
前文中,git checkout 版本号 能够将代码退回到历史的任何版本,但不算是严格意义的回退,因为它叫做版本穿梭。具体见后文的分支管理。
分支管理
什么是分支
随着git提交的次数越来越多,就会形成由各个版本连接而成的一条提交线。如下图:
由Git提交而形成的提交线,称为分支。默认的分支是主分支,叫做 master,前面的学习,一直是在 master 分支上提交。
我们也可以创建其他分支,新创建的分支,相当于是原分支的一个拷贝。
实际开发中
为了保证代码的安全性,不允许在主分支上进行开发
需要创建其他分支,在其他分支上进行开发,这样不会影响主分支上的代码
其他分支开发完成后,可以选择将其他分支代码合并到主分支上
创建其他分支
# 创建分支
gitbranch 分支名
# 比如
gitbranch dev
# 切换分支到dev
gitcheckout dev
# 也可以创建并直接切换分支
gitcheckout-bdev
切换分支之前,需要把当前分支的工作全部提交,否则不允许切换到其他分支。
实际开发中,鼓励多使用分支。
快进模式合并两个分支
快进模式合并
两个分支A和B
B分支包含A分支的最新版本,在合并的时候,叫做快进模式合并。
快进模式合并,相当于使用B分支的代码覆盖A分支的代码;同时版本也会更新到A分支
两个分支合并,比如把 B 分支 合并到A分支上
需要先切换到A分支
然后执行 git merge B ,表示把B分支的代码合并到A分支上。
# 切换到A分支
gitcheckout A
# 把B分支的代码合并到A分支
gitmerge B
合并模式合并两个分支
合并模式
两个分支A和B
A分支有独立的提交,B分支也有独立的提交,在合并的时候,叫做合并模式的合并。
合并模式,有可能会产生冲突;如果出现冲突,需要解决冲突,然后需要添加、提交一次,从而完成合并。
两个分支合并,比如把 B 分支 合并到A分支上
需要先切换到A分支
然后执行 git merge B ,表示把B分支的代码合并到A分支上。
如果看到 CONFLICT,则表示有冲突,需要打开有冲突的文件,手动解决冲突,然后添加、提交即可。
# 切换到A分支
gitcheckout A
# 把B分支的代码合并到A分支
gitmerge B
如果有冲突,会显示如下提示:
手动打开有冲突的文件,解决冲突,保存文件。(手动解决)
再次添加(add操作)提交(commit),即可完成合并。
其他相关命令
# 查看所有分支(本地分支)
gitbranch
# 查看所有分支(包括远程分支)
gitbranch-a
# 删除分支(需要先切换到其他分支,然后在执行删除)
gitbranch-d分支名
# 创建并直接切换分支
gitcheckout-bdev
如果要切换分支,必须把当前分支的代码全部提交到本地仓库。
穿梭到历史后,如何使用历史版本中的代码
穿梭到历史的一个版本后,根据该版本创建一个分支,比如 B 分支
在分支B中,修改需要使用的文件,然后提交(提交之后,后面的合并就会有冲突)
回到之前的分支的最后一次提交的位置(切换回原来的分支)
合并刚刚创建的新分支(B)即可
实际上就是为了练习分支。
远程仓库
说明
目前,我们的操作都是一个人开发,如果涉及到多人开发呢?大家的代码如何合并到一起呢?这个时候就需要公网上的一台服务器了,大家可以把代码提交到这台服务器上,也可以从服务器上拉取所有的代码。这个公网上的服务器就叫做远程仓库。
完全可以自己搭建一台运行Git的服务器,不过现阶段,为了学Git先搭个服务器绝对是小题大作。好在这个世界上有个叫 GitHub 的神奇的网站,从名字就可以看出,这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。
实际上,除了GitHib,还有很多第三方远程仓库托管服务:
GitHub(这个网站有时很难打开)
码云(gitee)(打开速度快)
coding
Gitlab
创建远程账号
略
配置SSH
在本地命令行,执行下面的命令,可以生成SSH秘钥(包含一个公钥一个私钥)
ssh-keygen-trsa-C"你的邮箱地址"
# 执行完这个命令之后,后面有一些询问,我们直接一路回车即可
最后生成的秘钥在:
Windows:
C:\Users\用户名\.ssh // Users--用户 GaoWei--我的计算机用户名
mac:
你的用户名那个文件夹中。 按shift+Commend+. 可以显示隐藏文件,然后就可以看到 .ssh文件夹了
找到 .ssh/id_rsa.pub,用vscode打开,复制里面全部的内容,配置到远程仓库
GitHub右上角的三角号
Settings
左侧有 SSH and GPG keys
在显示的界面中,点击右上角的 New SSH key,然后完成添加公钥操作
新建远程仓库
将本地仓库中的代码推送到远程仓库
推送的是本地仓库的代码。工作区和暂存区的代码不会被推送到远程仓库
复制远程仓库的 ssh 地址
本地仓库中,执行
# 添加远程仓库地址,让我们的本地仓库和远程仓库建立关联
# origin 可以自定义
gitremote add origin 远程仓库的ssh地址
首次推送之前,需要先拉取远程仓库的代码(README.md)到本地
gitpull origin master--rebase
完成首次推送
# 如果远程没有本地的 分支,第一次推送,需要加 -u
gitpush-uorigin master
后续继续开发
# 改动了代码,先添加到暂存区
gitadd .
# 提交到本地仓库
gitcommit-m'xxxx'
# 推送到远程仓库
gitpush
注意事项
什么时候需要先拉取,然后在推送
远程仓库的提交比本地仓库的要新,或者不一样,都需要先拉取,然后在推送
如果提示 “Are you sure you want to continue connecting (yes/no/[fi....])”
输入yes,回车
克隆远程仓库到本地
实际开发中,有些时候,我们需要把别人仓库的代码克隆到本地
下载别人的代码的时候,可以选择克隆
多人合作开发的时候,需要克隆合作伙伴的代码到本地
克隆命令
gitclone 远程仓库的ssh地址
克隆别人的仓库到你的电脑中
克隆,相当于下载。可以克隆下来,但是不能向别人的仓库推送
克隆的是自己的仓库
克隆下来,也可以推送
多人协作
可以先创建远程仓库
【可选】我先把基础的代码推送到远程仓库
合作者,需要把远程仓库的代码,克隆到你的计算机中
管理员邀请合作者共同来开发
合作者,需要同意
然后,管理员和合作者,都可以向远程仓库推送代码
推送之前,必须先拉取。拉取之后,如果有冲突,解决冲突。然后推送。
如果遇到:
点击 “i” ,按上下左右键,调整光标的位置,然后删除里面所有的内容,随便写一点也可以,但是不能太多。按esc,退出编辑模式,继续按 “:wq” ,表示保存,并退出的意思。
后续,可以push。