Git
-
工作区:仓库的目录。工作区是独立于各个分支的。
-
暂存区:数据暂时存放的区域,类似于工作区写入版本库前的缓存区。暂存区是独立于各个分支的。
-
版本库:存放所有已经提交到本地仓库的代码版本
-
版本结构:树结构,树中每个节点代表一个代码版本。
git安装
在 Windows 上安装
-
打开 https://git-scm.com/download/win,下载会自动开始
-
另一个简单的方法是安装 GitHub Desktop。 该安装程序包含图形化和命令行版本的 Git。 它也能支持 Powershell,提供了稳定的凭证缓存和健全的换行设置。 稍后我们会对这方面有更多了解,现在只要一句话就够了,这些都是你所需要的。 你可以在 GitHub for Windows 网站下载,网址为
在 Linux 上安装
-
CentOS
$ sudo dnf install git-all -
Ubuntu
$ sudo apt install git-all
在 macOS 上安装
在 Mac 上安装 Git 有多种方式。 最简单的方法是安装 Xcode Command Line Tools。 Mavericks (10.9) 或更高版本的系统中,在 Terminal 里尝试首次运行 'git' 命令即可。
$ git --version
安装过程不多做赘述
git使用
考虑到大多数同学电脑为windows环境,此教程基于windows
全局配置
安装完成后打开git bash

-
首先我在电脑E盘目录下新建了一个文件夹git_learn,当前文件夹中没有任何文件

-
在git bash中cd到当前文件夹
-
如果不太懂命令行路径的可以直接复制路径
-
在git bash中粘贴为
shift+insert -
复制为
ctrl+insert

-
-
效果如下:进入了E盘的git_learn文件夹目录下

全局配置命令(只会用到一次)
-
git config --global user.name xxx:设置全局用户名,信息记录在~/.gitconfig文件中
-
git config --global user.email xxx@xxx.com:设置全局邮箱地址,信息记录在~/.gitconfig文件中
-
git init:将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中
跟着一步一步来
-
首先设置全局用户名
git config --global user.name qfzwy -
然后设置全局邮箱地址
git config --global user.email 528916069@qq.com -
最后将当前目录配置成git仓库,信息记录在隐藏的.gitconfig文件中
git init
-
好了,到此一个仓库的初始化已经完成了,但你可能不知道有用什么,别急,先学点常用的命令
-
ls:查看当前目录下的所有文件或者文件夹(不包括隐藏的文件) -
ls -a:查看当前目录下的所有文件或者文件夹(包括隐藏的文件) -
cd:进入某个目录 -
cat:查看某个目录或者文 -
感觉windows下也不怎么使用命令,感兴趣的同学可以学习一下Linux

-
开始使用
为了让教程简单,通俗易懂。我以多人写一篇文章的背景来进行教学
仓库建立
每个成员都需要配置一下自己的用户名和邮箱,但是仓库只需要队长来创建。
队长在本地配置好git仓库以后,把仓库push到云端,课程要求使用gitee,那本教程也以gitee为例,其他网站类似
-
队长登录到gitee后,新建仓库,这里我命名为git_learn

-
创建好之后会到达这个页面

-
首先全局设置我们已经在之前设置好了(如果),所以直接跳过
-
然后本地仓库也已经创建了,所以直接从touch README.md开始,直接复制粘贴命令即
-
touch:创建一个文件 -
mkdir:创建一个文件夹
-
-
继续按照命令复制粘贴执行(暂时不解释含义,一会儿就懂了)

-
执行完这些步骤后,刷新当前页面,可以看见仓库已经和本地同步,那接下来将开始正式教学


个人使用
-
git add XX :将XX文件添加到暂存区
-
git add . :将所有修改过的文件加入暂存区 添加或删除
-
git commit -m "给自己看的备注信息":将暂存区的内容提交到当前分支 持久化暂存区内容
-
git status:查看仓库状态
-
git log:查看仓库节点日志
-
首先我们使用第一条命令
git status-
status即查看当前仓库的状态,是否发生变化,发生了什么变化
-
这里由于未对仓库做出任何操作,所以具体的变化会在后面讲解

-
-
当前我们的git_learn文件夹目录下只有一个README.md文件,但是为了方便教学,我使用txt文件给大家做演示

-
文本编辑会使用vim的可以使用vim,不会使用的也可以在本地打开txt文件进行编写。
-
vim


-
本地


-
为了方便,接下来我就使用vim了
-
-
当然,不着急编写,我们先看看仓库的状态

可以看到红色的
article.txt,这是因为我们在仓库中新建了一个名为article.txt的文件仓库发生了变化,由此我们可以引入下一条命令 -
将文件加入暂存区:
git add XX-
我们先来试一下,可以看到将article.txt加入暂存区,再查看status时,article变成了绿色

-
然后我们再来使用下一条命令
git commit
-
-
提交一个节点:
git commit -m "info"-

-
提交后再查看
git status发现仓库又恢复了最初的样子,但是整个过程发生了什么变化呢?我们可以使用下一条命令:git log
-
-
查看节点日志;
git log-
git log
-
可以发现当前仓库一共有两个节点:节点ID可以看commit的前六位即可
-
包含的信息有Author,Date,以及
git commit -m "xxx"引号中的信息
-
-
-
所以其实可以总结一下上面的几个操作
-
我们创建一个article.txt文件
-
将该文件放入了暂存区
-
然后把暂存区的内容提交,也就是生成一个新的节点
-
整个过程可以想象成一棵树的增长(画的还行吧)

-
-
以上我通过几个简单的过程,介绍了四个命令,你可能还是比较懵,但是接下来我会不断重复使用,并且详细介绍。
进一步的使用
-
我们尝试往article里写一点内容:qfzwy-gitlearn

-
git status:它告诉你,你对article进行了修改,红色表示还未放入暂存区

-
这里我简单(通俗易懂)解释一下暂存区,简单的说:我们写完自己的代码后,如果想提交,你总得告诉他你想提交什么吧。而add就是把你工作区写好的东西放入暂存区,也就是让他等着,我一会儿提交。
-
提交一下,看看信息。哎,出了一个警告,查了一下,这是windows下的问题,设置一下就好
git config --global core.autocrlf false

-
-
刚刚已经将article.txt放入了暂存区,此时我们试试继续对其进行更改
-
第二行添加了:modify_1

-
再查看一下

-
呐这就和第一次修改后的状态一样了,呐,我们再将其加入暂存区。(
git add .:. 就是把当前目录下所有修改过的文件都加入暂存区)。可以发现经过刚刚的修改后,没有出现警告了
-
-
但是在实际工作中,我们可能会遇到一些问题,如果我想撤回刚刚的修改怎么办。
-
如果已经放入了暂存区,那么需要先将其从暂存区移出:
git restore --staged
-
但这只是将它从暂存区移出,没有撤销修改。撤销修改:
git restore
-
现在查看一下文件,发现文件为空。所以,只要你没有提交,其内容都没有被持久化保存。可以进行修改。即使提交了也没事,只是麻烦一点,一会儿会讲。

-
-
现在我还是往里写一点内容,并放入暂存区进行一次提交


-
查看日志可以看见,有一个HEAD指针,指向了当前这个版本,这涉及到之后的版本回滚,现在知道有这个东西就行。图中用红色代表HEAD指针

-
-
我们再去看看云端
-
哎,发现云端没有东西,那就需要引出下一条命令:
git push

-
-
将内容推送到云端:
git push可以发现云端的内容也更新了


-
在云端的统计-提交中,我们可以看到和
git log一样的东西
-
所以总结一下,在日常的开发中,我们个人使用就是这几个简单的命令(只要不涉及版本回滚,但是一般都不会涉及,本教程只为简单,所以暂时不讲,如有需要后续会补)
-
写完一些东西 :
git add .orgit add filename:加入暂存区 -
此时如果要反悔:
git restore --stagedorgit restore --staged filename:撤出暂存区 -
撤出暂存区后如果想撤销操作:
git restore filename -
git commit -m "info":提交一个节点 -
git log:可以查看节点日志;git log --pretty=oneline -
git reset --hard id:id为日志文件中 commit前6位就行 返回到某一个节点 -
但是此时
git log就已经看不到当前节点操作之后的节点,如果想返回,使用git reflog即可看到所有节点
团队使用
其实团队使用,为难的只是队长一个人啦
让成员也加入云端git
-
让成员的ssh公钥传递到云端
-
然后git clone
-
然后创建一个dev分支
-
然后绑定到
git branch --set-upstream-to=origin/branch_name1 branch_name2 -
当两个成员使用dev的时候,当成员1已经git push以后,成员2再git push会报有冲动,此时需要git pull 将云端的分支拉到本地,处理冲突,再push
开始动手
-
在Windows下查看[c盘->用户->自己的用户名->.ssh]下是否有"id_rsa、id_rsa.pub"文件,
-
注意一点:直接复制的路径是C:\Users\mingj.ssh 终端中需要将\改为/

-
ssh-keygen 后 一路回车

-
保护好你的密钥,不要泄露

-
-
然后把pub中的内容给你的队长,队长将其上传到自己的git
就这样把团队成员公钥都加入后就OK了

团队开发命令
一般不会在主分支上开发
-
主分支:master分支
-
git checkout -b branch_name:创建分支并切换到这个新的分支 -
git branch:可以看到当前有哪些分支,*就是当前所在的分支 -
git checkout branch_name:切换到哪个分支 -
git merge branch_name:将分支branch_name合并到当前分支上 -
git branch -D dev:删除分支 -
将本地分支推到云端
-
此时删除分支
-
git branch -D dev删除本地分支 -
git push -d origin dev删除云端分支
-
-
云端分支下载到本地
-
本地创建该分支
git checkout -b branch_name -
将远程的branch_name分支拉取到本地:
git branch --set-upstream-to=origin/branch_name1 branch_name2 -
将远程仓库的当前分支与本地仓库的当前分支合并:
git pull
-
-
如果本地分支删了,也可以直接在云端把分支内容合并到master:
git pull origin branch_name。此时master会直接多一个节点push即可
创建dev分支并同步到云端
-
首先,团队开发时不要直接在主分支上进行开发。每次进行合并时,应该由队长来进行审核。
-
队长创建一个dev分支:
git checkout -b branch_name
-
-
创建dev分支并切换到这个新的分支:
git checkout -b dev
-
如果想切换回主分支:
git checkout master -
查看当前在哪个分支:
git branch
-
-
将本地分支推到云端


-
然后自己也需要将本地dev和云端dev绑定:
git branch --set-upstream-to=origin/dev dev -
之后的工作就都在dev上进行了
成员将云端的仓库拉到本地
-
首先队员需要将云端的仓库拉到本地:
git clone

-
把远程仓库的dev拉到本地
-
进入仓库查看分支会发现,当前成员处于master分支,而没有dev分支

-
首先在本地创建dev分支,然后将本地dev分支绑定到云端
-
git checkout -b dev -
git branch --set-upstream-to=origin/dev dev

-
-
在dev分支上进行开发
-
假设现在两个成员都处在dev分支:左边为大明,右边为二明

-
现在大明正在写大明的内容,同时二明也在写二明的内容
想象一下,他们两个人写的位置是一样的,但是内容不同,如果同时提交的话,会怎么样。
我们试一下

现在大明先提交,二明后提交

修改提交后查看日志,可以看到到此都还是正常的,因为是在本地进行修改
那么试一下push到云端

可以看到大明push后,二明再进行push就报错了,它提示二明需要git pull一下。
实际上是因为云端已经有过修改,此时需要先git pull一下,把云端的分支拉到本地

然后我们再试一下push,依然报错

此时是需要处理一下冲突
我们需要对article.txt进行一下修改,查看article.txt会发现一些不是我们写的东西,那就是我们要处理的

经过手动处理之后


成功push,然后我们可以去云端查看一下




冲突处理没有错,HEAD是当然我忘了删,不过没事,刚好给后面队长审查合并做了栗子
最后将dev分支合并到master分支
git merge branch_name:将分支branch_name合并到当前分支上
由队长去合并
-
队长先将云端的dev拉到本地:在dev分支进行:git pull
-
然后对内容进行审查修改

别忘了commit

-
然后切换到master分支

当前master分支的内容就是最新内容可以提交到master分支啦

云端中也是提交到了master分支

最后由于这次修改是在master分支中提交的,那么dev中的版本就低了一个版本,所以需要同步,队长可以在云端进行同步


同步后就和master分支一样了
下一次成员开发时,还是从云端pull下dev分支就可以处理冲突进行提交了
结语
基本的使用就是这样啦,如果还有哪里不明白可以问我喔

浙公网安备 33010602011771号