Git基础教程
何为Git
git是一个分布式版本控制软件,代码的本地克隆就是一个完整的版本控制存储库。 通过这些功能齐全的本地存储库,无论脱机还是远程都能轻松工作。 开发人员会在本地提交其工作,然后再将存储库的副本与服务器上的副本进行同步。
为何要使用git
- 便于多人协作开发
- 方便进行代码版本管理
Git的分区
1.工作区
工作区指的其实就是我们正在操作的这个文件夹,这个文件夹里的文件可以相对于版本库分类为已管理文件和新增文件(在git status下表现为红色的文件)。
2.暂存区
用来临时存放准备更新到版本库的文件,暂存区的文件在git status下表现为绿色,工作区的文件通过git add命令将修改的文件添加到暂存区。
3.版本库
用来存放进行版本管理的文件,使用git commit 命令将暂存区的文件加入到版本库。
Git的使用
git仓库的初始化
git使用如下命令进行初始化:
git init
使用该命令后,该文件夹会生成一个.git目录,用于记录git仓库的信息,不要随意修改和删除该目录。
查看git仓库的情况
git status
使用该命令可以查看当前文件夹中的所有文件的文件状态,将状态和代码仓库中的文件状态做对比。工作区中相对于版本库新增或者被修改的文件都会显示为红色,被存入缓冲区的会被记录为绿色。
这里我在目录中创建了一个新的文件test.txt, 使用git status查看会显示其未被追踪。
将文件加入暂存区
git add <File>
git add . //将文件夹内的所有文件全部加入暂存区
使用该命令使文件被加入到版本管理的暂存区中。
注意:文件进行创建,修改,删除时,文件的状态都会改变和仓库中不同,我们都应该使用git add将其再次添加到暂存区中。
这里我们用git add 命令将test.txt加入暂存区后,再使用git status,可以看到test.txt的颜色已经显示为绿色.
生成一个Git版本
git commit -m "description"
用暂存区的文件,生成一个版本仓库, 双引号内为该版本的描述信息。
自此,我们已经生成了一个git版本,里面有一个test.txt文件。
注意:首次使用git时,这里可能会报错,如下:
这里是因为没有配置过git的信息,这里按照提示执行即可。然后便可以再次使用git commit 命令。
git config --global uesr.email "you@example.com"
git config --global user.name "your name"
查看git仓库的日志信息
git log
使用该命令查看git版本的日志信息。
执行后可以看到我先前生成的版本和当时写下的描述信息和对应的每个的版本的版本号。
但是git log不能查看到已经删除的commit记录,或者reset的操作,如果希望查询到所有的操作记录,可以使用如下命令
git reflog
git reflog能显示所有的操作记录,包括提交,回退的操作。一般用来找出操作记录中的版本号,进行回退。
代码回滚
1. 版本回滚
git reset --hard <版本号>
使用该命令,可以将目前的代码回复到你期望的版本,版本号可以通过git log或者git reflog来查看.
2.工作区代码回滚
git checkout -- <filename>
git checkout . //回滚工作区所有的代码
当工作区的文件相对于版本库发生变化后,可以使用该命令将文件恢复到版本库中的状态。
3. 将暂存区的文件回滚至工作区
git reset HEAD <filename>
使用该命令,可以把已经被添加到暂存区的文件回滚到工作区.
查看分支
git branch
使用该命令可以查看当前仓库的分支,和自己目前所处的分支。当前所处的分支前面会标记有*。
创建分支
git branch <Name>
使用该命令可以创建一个指定名字的分支.我们在哪条分支中新建分支,新建的分支就指向哪个分支.
这里我们创建了一个新的分支dev,用git branch 查看可以观察到。
切换分支
git checkout <name>
使用该命令将我们的工作环境切换到指定的分支.
分支合并
git merge <name>
使用该命令将指定的分支合并到当前的分支。
这里就将bug分支的内容合并到了master分支。
冲突
在进行分支合并的时候,如果某行数据在两个分支都被修改过,就会出现合并冲突,如下:
此时,冲突的内容会被全部写入test.txt文件中,打开该文件手动修改即可。
删除分支
git branch -d <name>
使用该命令可以删除掉不用的分支。
Gitee简介
这里大家要搞清楚一个事:Git和GitHub或者Gitee并不是一种东西,GitHub是基于Git的代码托管服务平台,而Git则是分布式版本控制系统。
可以把Gitee看成一个百度云盘,我们可以把git仓库推送至Gitee,或者把Gitee的git仓库拉取下来,对比百度云盘,Gitee的功能则可以和Git无缝衔接。
添加远程仓库
git remote add <name> <url>
使用该命令,将url指向的远程仓库关联到本地的git仓库,是我们给这个远程仓库起的别名,关联多个远程仓库时,别名不能重复. 对于远程仓库来说,其有两种url,如下:
分别对应HTTPS和SSH两种推送方式
执行完后,相当于我们有了一个别名为origin的远程仓库已经和我们本地仓库做了关联,并且之后我们将使用SSH协议推送数据。
SSH推送
使用Git向远程仓库推送数据时,有两种可选方式,一种即为使用SHH协议来推送数据。使用SSH协议推送之前,我们需要在Gitee上配置公钥,然后才能正常的推送数据。一般来说,密钥存储于.ssh目录下,如果没有该目录,可以用如下命令生成
ssh-keygen -t rsa -C "邮箱"
id_rsa.pub中记录就是我们要使用的公钥,将其配置到Gitee中即可。
HTTPS推送
HTTPS推送数据时,我们需要输入我们对应的账号和密码确认身份后,才能正常推送。
将本地分支推送到云端
git push -u <name> <branchName>
使用该命令,将本地指定的分支代码推送到指定的远程仓库中。
这样我们就将本地仓库中的master分支推送到了别名为origin的远程仓库中。
下载远程仓库
git clone <url>
使用该命令,可以把链接对应的远程仓库下载到本地。使用该命令后,克隆下来的仓库默认已经执行了 git remote add origin ,我们之后可以直接使用origin来向远程仓库推送数据。
注意:我们使用git clone克隆仓库后,在该仓库中使用git branch只能查看到master分支,但并不是其他的分支没有克隆下来,我们可以直接使用git checkout来切换到仓库中有的分支,哪怕在切换之前git branch并无法查看到该分支。
这样,我们就把刚刚的仓库成功克隆到了另一处。
从远程仓库拉取代码
git pull <name> <branchName>
使用该命令,可以将指定的远程仓库的指定分支的数据同步到本地,每次做开发前,我们都应该使用该命令,从远程获取最新的代码,并在此基础上做开发。
注意:git pull命令其实隐藏进行过merge操作,所以本地的分支和远程的分支如果出现冲突,只需要同步之后,手动修改冲突即可
这里,我们使用git pull将远程仓库的dev分支的数据,同步到了本地的dev分支中。