Git基操

一、git简介

1.1、git概述

Git是分布式版本控制系统(Distributed Version Control System,简称 DVCS) ,分为两种类型的仓库:本地仓库和远程仓库。 下载地址:https://git-scm.com/download

  • 本地仓库:是在开发人员自己电脑上的Git仓库

  • 远程仓库:是在远程服务器上的Git仓库

    图片2

1.2、git工作流程

  1. 从远程仓库中克隆代码到本地仓库(git clone)
  2. 从本地仓库中checkout代码然后进行代码修改(checkout)
  3. 在提交前先将代码提交到暂存区(add)
  4. 提交到本地仓库。本地仓库中保存修改的各个历史版本(commit)
  5. 修改完成后,需要和团队成员共享代码时,将代码push到远程仓库(push)

图片3

1.3、Git常用的代码托管平台

​ 我们的远程仓库就建立在代码托管平台上,常见的有GitHub,GitLab,还有码云等

  • itHub( 地址:https://github.com/ )是一个面向开源及私有软件项目的托管平台,因为只支持Git 作为唯一的版本库格式进行托管,故名gitHub
  • 码云(地址: https://gitee.com/ )是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快
  • GitLab (地址: https://about.gitlab.com/ )是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务

二、Git常用命令

2.1、环境配置

  • 设置用户信息

    git config --global user.name "name" # 设置git用户名
    git config --global user.name "email"# 设置git邮箱
    
  • 查看用户的配置信息

    git config --list # 查看git的配置
    git config user.name # 查看git的用户名
    git config user.email #查看邮箱
    

    image-20200919105057953

    通过上面的命令设置的信息会保存在C盘用户目录下的.gitconfig文件中

    image-20200919093020372

2.2、获取Git仓库

要使用Git对我们的代码进行版本控制,首先需要获得Git仓库

  • 可以通过clone命令从远程仓库克隆一个到本地

    image-20200919093827404

  • 可以通过init命令在本地初始化一个Git仓库

    image-20200919093900566

通过以上两种方式都可以在本地撞见一个仓库,它会生成一个.git的文件,有这个文件代表着是一个git本地仓库

2.3、工作目录、暂存区和版本库

  • 前面看到的.git隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等
  • 包含.git文件夹的目录就是工作目录,主要用于存放开发的代码
  • .git文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方

图片15

Git工作目录下的文件存在两种状态:

  1. untracked未跟踪状态(未被纳入版本控制)
  2. tracked已跟踪(被纳入版本控制)
    • unmodified 未修改状态
    • modified 已修改状态
    • staged已暂存状态

2.4、本地仓库操作

  1. git status 查看文件状态

image-20200919094935812

我们新建了一个.gitignore文件(可以在这个文件里面配置哪些文件不必纳入版本控制),此时查看文件状态发现.gitignore是未被跟踪状态,也可以使用git status -s 命令简介的显示文件状态

image-20200919095210626

​ 2. git add 将文件添加到暂存区

image-20200919095944281

此时查看再次查看文件状态

image-20200919100041939

  1. git reset 将暂存区的文件取消暂存

我们添加到暂存取得文件并没有提交到本地的仓库,可以通过git reset命令取消暂存,再次查看文件,文件又处于未被跟踪状态.

image-20200919100419666

  1. git commit 将暂存区文件提交到仓库

image-20200919104227996

参数-m的意思是记录提交的日志,想要commit必需要经过add

  1. git rm 删除文件

    image-20200919104143441

    此时显示.gitignore文件已经被删除,但是这只是删除了工作区的文件并没有删除本地仓库的文件。

    将删除操作提交到本地仓库

image-20200919104406634

注意:使用git rm 删除后默认进入暂存区可以直接commit,但是如果在windows中删除则需要add

  1. .gitignore忽略文件

    一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以在工作目录中创建一个名为 .gitignore 的文件

    image-20200919104836504

    7.git log 查看日志记录

    image-20200919104947551

2.5、远程仓库操作

  1. git remote 查看远程仓库

    image-20200919105341768

    如果本地仓库是直接从远程仓库clone的,我们可以看到一个origin 。这是Git克隆的仓库服务器的默认名字。

    如果没有指定远程仓库,则啥也没有

    image-20200919105642320

  2. 添加和断开远程仓库

    git remote add 添加一个新的远程 Git 仓库,同时指定一个可以引用的简写

    image-20200919110239300

    如果想要断开与远程仓库的连接可以使用git remote remove [仓库(origin)]注意:此命令只是从本地移除远程仓库的记录,并不会真正影响到远程仓库image-20200919110432857

    image-20200919110542263

    远程仓库可以添加多个

    image-20200919110731993

  3. 从远程仓库克隆

    如果你想获得一份已经存在了的 Git 仓库的拷贝,这时就要用到 git clone 命令。 Git 克隆的是该 Git 仓库服务器上的几乎所有数据(包括日志信息、历史记录等),而不仅仅是复制工作所需要的文件。 当你执行 git clone 命令的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。

    命令形式:git clone [url]

    image-20200919111619839

  4. 从远程仓库fetch

    git fetch 是从远程仓库获取最新版本到本地仓库,它会将数据放在git文件的object文件里面,我们找不到,它不会自动merge,fetch过后需要使用merge命令将本地仓库的数据和fetch来的数据合并。

    命令形式:git fetch[remote-name] [branch-name]

    ​ git merge[remote-name]/ [branch-name]

    image-20200919113844065

    注意:如果本地仓库不是从远程仓库克隆而来而是init初始化而来。则第一次合并或者提交的时候会出现fatal:refusing to merge unrelated histories,我们需要在命令后面加上--allow-unrelated-histories,表示允许不相关的历史

  5. 从远程仓库pull

    命令形式:git push [remote-name] [branch-name]

    image-20200919130555847

    如果第一次出现出现fatal:refusing to merge unrelated histories,也需要加上--allow-unrelated-histories

  6. 将本地仓库代码推送到远程仓库

    当你想分享你的代码时,可以将其推送到远程仓库。 命令形式:git push [remote-name] [branch-name]

2.6、Git分支

​ 几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。master分支是git仓库的默认分支。

  1. 查看分支

    列出所有本地分支:git branch

    列出所有远程的分支:git branch -r

    列出所有本地分支和远程分支:git branch -a

    image-20200919132645018

  2. 创建分支

    命令格式:git branch [branch_name]

    image-20200919133002897

  3. 切换分支

    使用git checkout [branch_name]可以切换分支,前面的*和绿色就表示当前分支

    image-20200919134215409

    在当前分支下创建一个文件master2.txt并push到远程仓库maste2分支,此时master分支没有master2.txt文件。

    当我们切换到master分支没有master2.txt文件

    image-20200919135958985

    当我们切换到master2分支,发现master2.txt文件

    image-20200919140131733

  4. git合并分支

    命令格式:git merge [branch_name]

    image-20200919143837145

    注意:如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没办法合并它们,同时会提示文件冲突。此时需要我们打开冲突的文件并修复冲突内容,最后执行git add命令来标识冲突已解决

  5. 删除分支

    git branch -d [branch_name]

    如果要删除的分支中进行了一些开发动作,此时执行上面的删除命令并不会删除分支,如果坚持要删除此分支,可以将命令中的-d参数改为-D

    git branch -D [branch_name]

    image-20200919144200156

    如果要删除远程仓库中的分支,可以使用命令git push origin –d [branch_name]

    image-20200919144418787

    image-20200919144406718

    此时远程仓库只剩下master分支,没有master2分支

2.7、Git标签

Git 可以给历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 、v1.2等)。标签指的是某个分支某个特定时间点的状态。通过标签,可以很方便的切换到标记时的状态。

  1. 创建标签

    git tag [tag_name]创建一个新的标签

    image-20200919150323085

  2. 列出标签

    git tag查看有哪些标签

    git show [tag_name] 查看标签的详细信息

    image-20200919150436211

  3. 将标签推送到仓库

    git push [remote] [brance] [tag_name]

    image-20200919150852772

    可以看到远程仓库多了一个v1.0标签

    image-20200919150900334

  4. 新建一个分支,指向某个标签

    命令格式:git checkout -b [branch] [tag]

    image-20200919151154501

  5. 删除标签

    git tag -d [tag_name] 删除本地标签

    git push [remote] [branch] :refs/taags/[tag_name] 删除远程标签

    image-20200919151515750

三、Git时光机

3.1、reset和checkout

​ 在工作中,一旦误删了文件或者是把文件弄乱了,我们可以从最近的一个commit版本恢复。git log命令 显示从最近到最远的提交日志,可以见看到我们各个版本的日志每个版本都有一个commit id,其HEAD表示当前版本,HEAD表示上一个版本,HEAD表示上上一个版本,往上100个版本可以写成HEAD加连续100个,也可以写成:HEAD~100。

git log :显示从最近到最远的提交日志

image-20200919165001383

git log --pretty=oneline:将只会显示提交的commit id号和对应的注释。

image-20200919165125494

回退到上一个版本

git reset --hard HEAD^

image-20200919165413066

已经成功回退到上一个版本,此时执行以此git log,已经没有第三个版本的信息

image-20200919165510348

此时我们如果想要恢复到第三个版本,我们需要使用 git reflog来查看过的你使用过的每一条命令

image-20200919165727751

执行命令 git reset --hard [commitId]

image-20200919165912466

image-20200919165935022

已经回到第三个版本!

git reset --soft [id] :最近一次提交节点的提交记录回退到暂存区。此时a.txt已经添加到暂存区但是未被提交

image-20200919171710334

git reset --mixed HEAD^ :将最近一次提交节点的提交记录回退到工作区

image-20200919170844761

如果想要将暂存区的内容回退到工作区直接使用git reset 命令。

如果想要清除工作区某个文件的修改可以使用 git checkout -- [file_name]命令,git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

3.2、revert

git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。

参考连接:https://blog.csdn.net/yxlshk/article/details/79944535

参考连接:https://www.jianshu.com/p/09dbd8dc7345

原文地址:https://www.cnblogs.com/myblogstart/p/13697389.html