Git使用的讲解

一、Git简介

提到Git是Linux之父Linus两周时间用C语言编写的,相比类似于CVS和SVN集中式管控方式,Git具有以下优势:
1.版本本地化:其支持离线提交,相对独立,不影响协同开发。每个开发者都拥有自己的版本控制库,可以在自己本地库创建分支、回滚历史和提交代码等。
2. 更少的仓库影响:git对于每个工程只会产生一个.git目录,本地提交的代码会先”缓存”在本地仓库,不会影响远程仓库。
3. 完整克隆版本:所有版本信息位于.git目录中,它是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签、分支、版本记录等。
4. 方便分支管理:在同一目录下即可切换不同的分支,方便合并,且合并文件速度比SVN快。
5. 内容完整性好:内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

二、Git安装

1、Windows版本安装
Git官网下载,或者通过国内镜像下载。
2、MAC版本安装
具体安装可以参考homebrew的文档
3、常用可视化操作工具

三、Git配置

下载安装后,通过CMD输入git找到Git Bash,类似下图所示,表示安装成功。
这里写图片描述
安装成功后,因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

完成name和email后,我们还需要生成电脑的SSH key ,把生成的SSH key 配置在github这样相当于我们的电脑与github的远程仓库之间,建立的连接,我们每次在push代码时就不需要每次都输入密码。

  • 生成 ssh key,其中you email 是你在配置时的email,生成后会在C:\Users\Administrator\路径下生成.ssh 文件夹,里面包含两个文件id_rsa和id_rsa.pub。其中id_rsa.pub里面包含我们所需的SSH key,如下图所示。
ssh-keygen -t rsa -C "you email" 

这里写图片描述

注意我们在复制SSH key时是全部复制所有内容,其是ssh-rsa 开头的内容。

  • github配置:进入gitHub官网,依次点击”Settings”–>”SSH and GPG keys”–>”New SSH key”,完成对SSH key的配置,检验配置是否成功,只需在Git Bash 输入以下命令行
 ssh -T git@github.com

显示如下结果,表明配置成功
这里写图片描述

四、 Git常用命令

在介绍git常用指令之前,我们需要明白一个知识点:工作区、本地 版本库和远程仓库,工作区是指我们电脑上能看到的目录文件,比如我们创建一个README.md文件;本地版本库是指在.git目录下的内容,是Git的本地版本库,而我们在git上创建的repository则是我们的远程仓库。如果我们将一个文件提交至元远程仓库需要经历以下几个命令行(已经配置好远程长路的关联,稍后会详解)。

git add.  --->   git commit -m"message"  -->   git push -u origin master

1. 关联仓库

根据两种方式来管理远程仓库,一种是先创建远程仓库,我们本地通过SSH将远程仓库的内容克隆到本地,还有一种是先在本地创建资源文件,然后在创建一个空的远程仓库,通过SSH将本地资源文件推送到远程仓库。

  • 先创建远程仓库
    先创建远程仓库是我们经常使用的,在我们新进入一个团队,首先要做的肯定是拉取远程仓库的代码,此时只需在本地新建一个空文件,通过SSH即可完成代码的拉取(此时我们需要cd到该目录下)。
git clone  SSH
  • 先创建本地资源
    比如我们自己写了一个开源的项目,希望将 项目上传至Github上,此时通过以下过程实现。在操作之前我们需要通过cd指令,进入到我们新创建的文件目录下
    A:初始化本地git文件
 git init

B:创建并关联远程仓库
在gitHub上新建一个仓库,复制SSH,输入以下添加SSH的指令,其中SSH是指我们新创建的SSH地址。

 git remote add origin SSH

通过以上两种方式,我们就实现本地文件与远程仓库之间的关联,我们可通过git相关指令将我们的文件推送至远程仓库,实现对代码的管理。
2、版本的控制
A、本地提交
在工作区中编写好逻辑代码后,我们需要先将工作区的代码提交至本地仓库,首先通过add指令,将数据添加到git中,然后通过commit指令,将文件提交至本地仓库。

git add . //添加文件 注意add和“.” 之间有空格,这个是提交该目录下所有文件,也可指定提交的文件名称
git commit -m"message"  // message是指我们本次提交的的信息说明

B、查看git操作log
我们在操作git提交代码时,有时需要查看我们提交的一些历史信息,此时我们可以通过git log指令获取到我们提交的一些log信息。

git log   //显示提交的一些log信息

上面打印的log信息显示的比较乱,包含的信息比较多,有时我们希望将其过滤以下,只显示我们关心的版本号,我们可通过以下方式将log过滤处理。

git log --pretty=oneline  

上面是我们打印所有执行过的commit信息,我们也可通过 reflog获取我们执行过的所有git操作

git reflog

我们可以实时的 查看仓库状态,便于我们及时处理Git的管理

git status

C、版本回退处理
有时我们在操作时,由于操作失误希望回退到我们之前的版本,此时我们可通过以下方式将回退到我们希望的版本中。
通过HEAD操作

git reset --hard HEAD^

通过log获取到版本号,借助版本号回退到指定的版本中

git reset --hard 36xxx   //36xxx 代表是版本号

通过checkout撤销指定文件最近一次提交的信息

git checkout -- readme.txt  //readme.txt指的是文件名称

删除指定文件

rm test.txt  //test.txt 为删除的文件名

3、 创建分支
git的一大优点就是对于分布式分支管理,通过创建不通过的分支,方便团队之间的项目协同开发,下面介绍几种常用的分支管理命令。

  • 创建与合并分支
    在git的版本提交过程中,其实通过一条线连接的,默认的这条线是主分支(master),在对分支操作过程有一个类似于C语言中的指针(HEAD)概念,这个HEAD实时的指向我们当前分支所在位置,我们在切换分支时,该HEAD也在不断的切换指向。在使用分支管理时我们主要使用分支的创建、合并和冲突管理。

查看当前分支信息

 git branch

创建分支

 git branch test

切换分支

git checkout test  //test是分支名称

合并分支

git merge test   //test是分支名称

删除分支

git branch -d test   //test是分支名称
  • 分支冲突处理

假设我们在A上上对README.md上第一行进行修改,提交到本地数据库;切换到master分支,修改README.md文件的第一行代码,提交到本地数据库;最后执行git merge test 指令时会提示以下信息,说明我们对于文件的操作存在冲突。

CONFLICT (content): Merge conflict in README.md

打开该冲突的文件,我们可以看到对于冲突信息已经标注出来,此时我们需要对分支冲突的内容手动修改。

<<<<<<< HEAD   //当前分支操作的内容
aaaa22
=======
www
>>>>>>> test //test分支操作的内容

4、工作隐藏
在实际开发中,经常会出现正在编写手头逻辑代码,但是由于项目中临时出现紧急BUG需要去修复,这时我们可以临时保存当前工作区现场,去临时修复BUG,而后回复现场继续开发,主要用到以下指令。
保存现场

git stash

查看所有被隐藏的文件列表

git stash list

恢复被隐藏的文件,但是内容不删除

git stash apply

删除之前临时保存的文件

git stash drop

恢复文件的同时 也删除临时文件

git stash pop

5、提交至远程仓库
以上是Git对于代码的本地化管理,想要实现代码的远程管控,还需将代码提交至远程仓库,通过以下命令行提交至远程仓库

git push -u origin master   
  • origin :在配置远程仓库关联时,默认的SSH的别名,我们也可以根据需要自己设置其他名称;
  • master :当前分支的名称(默认是主分支),如果是在处于别的线程,需要先切换至别的分支,然后提交。

以上是会Git的简单介绍和常用的操作命令讲解,在实际的应用中我们可以借助可视化操控界面,实现对git的操控,也可通过配置第三方的IDE(如:Android Studio ),通过Git来管理代码,协同开发。

猜你喜欢

转载自blog.csdn.net/xk7298/article/details/79593723
今日推荐