Git 简介

Git(全局信息追踪器)

​ Git 是一个分布式版本控制工具,Git的使用中央仓库不是必须的,用户本地就是一个完整的版本仓库,代码的前进、回退、删除等等操作都可以直接在本地进行,不需要中央仓库。但是,在实际操作中,为了能够和其他同事快速沟通以及合并代码,一般还是会搭建一个中央仓库。Git对分支的管理非常友好,可以快速创建或者合并分支。

与 SVN 对比:

Svn集中式的版本控制工具,Svn中,必须要有中央仓库,所有的版本信息都保存在中央仓库中,代码的前进、回退、删除等等操作都需要在中央仓库中进行,用户本地保存的只是版本仓库的一个副本,Svn中的分支非常臃肿。

Git 安装与配置

直接在官网下载 https://gitforwindows.org/ 下载完成后,一直下一步即可!

安装成功后,鼠标右键会多出两个 Git 相关的功能

  • Git GUI Here
  • Git Bash Here

点击 Git Bash Here 就可进去 Git 的命令窗口了,在里面很多基本的命令是和 linux 的命令相同的。

初次安装,需要在命令行窗口输入一下命令,初始化一下用户名和邮箱

git config --global user.name "huven"

git config --global user.email "1416454766@qq.com"

创建版本库

​ 版本库也就是我们平常说的仓库,repository。其实也就是个文件夹,只是这个文件夹被git管理,该文件夹中的文件的创建、修改、删除都能够被追踪。

创建文件夹:

// 进入自己需要创建 epository 的目录下
cd /tools/GitPro

// 创建一个文件夹
mkdir myRepository

初始化

​ 通过 git init 命令把这个目录变成Git可以管理的仓库,创建成功后在该文件夹下会多出一个.git的文件夹。

// 在之前创建的 myRepository 文件夹下面执行初始化操作
git init

基本命令

git add 添加文件到暂存区

执行下面的命令即可

git add hello.txt

这就表示将已有的 hello.txt 文件添加到暂存区,执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功!

git commit 文件提交到仓库

git commit -m '添加hello.txt文件'

​ commit -m的-m后面跟的是本次操作的备注说明信息。最好是有意义的,也就是下次看到这个说明就清楚提交了什么内容。

为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件

status 和 diff 命令

git status 查看当前的状态

git diff 是 difference 的简写,用来查看文件的变化(工作区和版本库)

git log 命令

​ 我们可以通过 git log 命令来查看修改的历史信息。

在这里插入图片描述

当我们修改了很多次的时候,这样查看就会显得比较臃肿,我们可以使用另外一个命令

git log --pretty=oneline

在这里插入图片描述

我们还可以查看指定文件的 log

git log --pretty=oneline aaa.txt

在这里插入图片描述

版本回退操作

1、回退到上一个版本:

git reset --hard HEAD^

2、回到之前最新的版本

git reset --hard 35c60e469

‘35c60e469’是最新版本的版本号,虽然不全,但是前几位要正确,git会自动匹配

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向first update file

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。

切换前,用git log可以查看提交历史,以便确定要回退到哪个版本。

3、切换到了之前,要换回其未来版本

git reflog 使用这个命令来查看所有的版本信息

然后 git reset --hard commit_id

commit_id 表示之前的上面图片中的黄色的 id,匹配前几位和其他不相同的就可以了

Git 的分支管理

所谓的分支管理其实就是就是同时可以有多条时间线在执行,最终合并为一个点,有点类似于多线程操作,这也正是git有别于其他版本控制软件的地方。
[在这里插入图片描述

创建与合并分支

在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。

分支的一些基本命令

1-查看当前分支

git branch 查看当前的分支,master 前面有一颗 * 就表示是当前分支
在这里插入图片描述

2-创建分支

git branch dev1

3-切换分支

git checkout dev1

在这里插入图片描述

4-创建并切换分支

git checkout -b dev2

在这里插入图片描述

5-合并分支

需要注意的是:我们在 dev2 分支上 add 并且 commit 后,master还是不能看见 dev2 提交的文件的,这个时候我们需要在 master 上执行 git merge dev2 命令。

6-删除分支

git branch -d dev2

执行这条命令就可以删除 dev2 这条分支了

分支管理的命令总结

命令描述
git branch查看分支情况
git branch {name}创建分支 {name} 表示名称
git checkout {name}切换分支
git checkout -b {name}创建分支并且切换分支
git merge {name}合并某条分支到当前分支
git branch -d {name}删除分支

冲突问题

版本控制软件不可避免的总会碰到版本冲突的问题

1-故意制造冲突
  1. 切换到 dev2 分支中修改 bbb.txt 文件,然后 add 并且 commit
  2. 再切换到 dev3 分支中继续修改 bbb.txt 文件,也执行 add 并且 commit
  3. 切换到 master 分支执行 git merge dev2 dev3

执行后出现了以下提示:

$ git merge dev2 dev3
Fast-forwarding to: dev2
Trying simple merge with dev3
Simple merge did not work, trying automatic merge.
Auto-merging bbb.txt
ERROR: content conflict in bbb.txt
fatal: merge program failed
Automatic merge failed; fix conflicts and then commit the result.
2-查看冲突的文件
$ cat bbb.txt
11111
<<<<<<< .merge_file_a03708
dev22222222222222222
=======

dev333333
>>>>>>> .merge_file_a01976
3-解决冲突

master 直接修改就可以了,修改后

11111
dev22222222222222222
dev333333
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐