目录
一. 集中式和分布式的区别
1. 集中式版本控制工具
2. 分布式版本控制工具
3. 基本概念
4. 配置信息
二. 创建本地仓库(git init)
三.基础指令
1. 获取git版本号
2.查看文件的状态
3. 查看提交记录
4. 版本回退
5. git reflog
6. .gitignore文件
四.分支
1. 分支的好处
2. 查看分支(git branch)
3. 创建分支
4. 切换分支
5. 创建并切换分支
6. 分支合并
7. 解决合并冲突
五. git远程连接
1. 给远程仓库添加密钥
2. 新增远程仓库
3. 克隆远程仓库
一. 集中式和分布式的区别
1. 集中式版本控制工具
集中式版本控制工具,版本库是集中存放在中央服务器的,team里每个人work时从中央服务器下载代码,是必须联网才能工作,局域网或互联网。个人修改后然后提交到中央版本库。
举例:SVN和CVS
2. 分布式版本控制工具
分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样工作的时候,无需要联网了,因为版本库就在你自己的电脑上。多人协作只需要各自的修改推送给对方,就能互相看到对方的修改了。
- 分布式版本库存在远程仓库和本地仓库的区别。
- 远程仓库(github,gitee)存放共享服务器上的代码或者 数据
- 本地仓库就是每个人的主机上的数据或代码。
- 远程仓库和本地仓库可以通过网络之间进行交互数据,在交互数据之前,远程仓库与本地仓库需要先关联起来。
- git就是一个分布式版本系统
3. 基本概念
工作区:工作区就是你电脑能看见的目录。
暂存区:英文叫stage或者index,一般存放在.git目录下
版本库:工作区有一个隐藏目录.git,这个工作区,而是GIT版本库。
4. 配置信息
在执行指令之前,我们先需要配置用户的邮箱和密码,如下两个指令:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
查看配置信息
git config --list #查看配置信息
二. 创建本地仓库(git init)
-
要使用Git对我们的代码进行版本控制,首先需要创建本地仓库
-
在电脑的任意位置创建一个空目录(例如test)作为我们的本地Git仓库2)进入这个目录中,点击右键打开Git bash窗口
-
执行命令git init
-
如果创建成功后可在文件夹下看到隐藏的.git目录,。所有 Git 需要的数据和资源都存放在这个目录中
实操:
-
在该空目录下执行git init 命令,创建成功则会看到 .git目录,则该git目录就是我们的工作目录
三.基础指令
1. 获取git版本号
git --version
- 未跟踪状态:新创建一个文件,如果这个文件还没有提交到暂存区,则这个文件处于未跟踪状态
- 未暂存状态:已经提交过的暂存区的文件,如果修改这个文件之后,但还没有提交到暂存区,,则这个文件处于未暂存状态。
git add 文件名 #将文件提交到暂存区
git commit -m "注释" #将暂存区中的所有修改提交到本地仓库
2.查看文件的状态
git status //查看文件状态
如果文件从暂存区提交到仓库后,则我们不需要再关心文件状态,如果修改了文件,则文件会显示到未暂存区域,例如2222.txt文件
举个例子:
我们将文件1111.txt文件提交到仓库中,git status 则不会看到1111.txt文件的状态
git commit 1111.txt文件后,查看所有文件的状态:
3. 查看提交记录
git log #查看提交记录
选项:
--all 显示所有分支
--pretty=oneline 将提交信息显示为一行
--graph 以图的形式显示
--abbrev
当我们的提交记录多了以后,为了方便我们查看各个分支的日志,我们一般都需要将git log中所有的选项给添加上去。
给常用指令设置别名
如果我们的git指令太长了,则我们可以给该指令设置别名
- 进入用户目录,创建.bashrc文件
- 在.bashrc文件中设置别名
- 在gitBash执行 source ~/.bashrc
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
4. 版本回退
git reset --hard commid #切换到某一个版本
什么是版本?
仓库中每一次提交记录则 记为一个版本
举个例子:
1111文件第一次提交到仓库存储的数据如下:
当我们修改1111文件中的数据并提交到仓库,此时记录为第二个版本:
什么版本回退?
所谓的版本回退就是 恢复 往前 提交到仓库中的的数据
举个例子:
此时处于第二个版本的数据,如果你想要 1111文件中第一个版本的数据,那么你可以使用 git reset 来回退到第一个版本的数据,具体操作:
查看git-log(git-log之前设置的指令别名)
找到第一个版本的commid为63b2d2d,指令git reset --hard 63b2d2d
查看1111文件中的内容是回退到第一个版本的数据。
我们再查看git-log,发现第二版本的数据已经删除掉了。
如果我们此时想从第一个版本再退回到第二个版本,此时我们应当怎么做?
我们可以利用git reflog指令来查看 往前的记录(包括被删除的记录)
5. git reflog
查看git的往前的删除操作之前的记录,,每个步骤之前都有一个commitId。
当我们找到提交第二版本记录的CommitId,这样就可以直接回退到第二版本。如下:
6. .gitignore文件
在当前的工作目录下创建.gitignore文件
在.gitignore文件中添加不需要被管理的文件名即可,则git就不会去管理.gitignore里面的文件。
例子:
git status 查看文件中的状态, 发现3333.txt文件属于未跟踪的状态
再将3333.txt文件写入到.gitignore文件里面。
发现3333.txt文件则没有显示状态。
再将将 3333.txt文件提交到暂存区,发现提交不了。
四.分支
几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。
1. 分支的好处
- 同同时并行推进多个功能的开发,提高工作效率
- 各个分支在开发过程中不影响,一个分支开发失败不会影响到其他分支,失败的分支直接删除重新开发就可以
2. 查看分支(git branch)
git branch
如下:
该工作区下只有一个master分支。
3. 创建分支
git branch 分支名
创建一个sjp名的分支
在git-log中HEAD指向的分支,即为当前执行的分支。
4. 切换分支
git check 分支名
切换到sjp分支上
5. 创建并切换分支
git checkout -b 分支名
每个分支他们的数据是相互独立的,只要分支将数据提交到本地仓库中,分支中无论创建的文件,删除文件,修改文件数据等操作都不会影响到其他分支。
例如:
当我们在sjp分支上创建一个4444.txt,5555.txt文件,并将5555.txt文件提交到本地仓库中。
查看sjp分支目录下的文件:
切换master,查看master下文件,发现并没有5555.txt文件
注意:
如果sjp分支上的 5555.txt文件 没有提交到仓库中,即使提交到暂存区中,切换到master分支,master分支也是看得5555.txt文件的。
6. 分支合并
git merge 分支名
分支合并是将 正在执行的分支 与其他的分支进行数据的合并。
如果合并的分支的数据 是当 前分支上没有,那么直接将该数据拷贝过来。
例如:
master 分支上有一个test.txt文件,这个文件中的数据是hello world!
而sjp分支上没有一个文件,当我们sjp分支合并master分支后,则test.txt文件则会创建到sjp分支,且文件内容与master分支上的test文件内容一样。
查看git-log
7. 解决合并冲突
如果合并的分支与当前分支的数据发生冲突,那么git会保留两个分支的数据,让使用者自己选择。
例如:
master分支合并sjp分支上的数据,master和sjp分支仅有一个test文件。
sjp分支上 test文件内容:
master分支上的test文件内容:
当前分支(master分支)与sjp分支进行合并
我们再来查看test文件内容,发现test文件上存在master分支上和sjp分支上的数据。
这时候我们可以选择其中一个分支上的数据,并提交到仓库中即可
五. git远程连接
1. 给远程仓库添加密钥
并不是每个人都可以将数据推送到远程仓库中,在本地仓库的数据提交到远程仓库的过程中,远程仓库确认你的身份,所以我们需要在远程仓库上(Github,或者Gitee)添加本地密钥。
1. 右键,点击 Git Bash 进入命令窗口
2.进入~/.ssh目录,查看是否有id_rsa.pub文件。
3. 如果没有id_rsa.pub文件,则使用如下创建它:
ssh-keygen -t rsa -C "your_email@example.com"
- 将 " your_email@example.com " 替换成你自己的GitHub注册邮箱,接下来的提示都按回车即可。
- 成功生成密钥后,进入id_rsa.pub文件,将文件中的所有内容进行复制
进入github,找到setting
2. 新增远程仓库
我们需要先初始化仓库,然后再添加远程仓库。
git remote add {仓库名}{url}
url即下面复制的这个字符串
创建一个远程仓库,仓库名为origin。
A@DESKTOP-LO8AAG6 MINGW64 ~/Desktop/c++学习笔记 (master)
$ git remote origin git@github.com:sjp1237/study-note.git
git remote 查看所有的远程仓库
3. 克隆远程仓库
git clone
不需要初始化仓库,直接奖整个项目的数据给拷贝下来,包括.git目录,所以不需要使用git init进行初始化。