Git的简单理解及基础操作命令详解

git和svn有什么区别呢?

git采用分布式版本库管理,而svn采用集中式版本库管理。

集中式版本库管理需要有一台存放版本库的服务器,开发人员在开发的时候分别从服务器拉取过来最新版本,然后创建/进入分支进行开发,开发完成之后将分支提交或者合并到主分支。

分布式版本库管理允许开发者们将版本库搬到自己的电脑上,在开发过程中,开发者们可以根据不同的目的创建分支和修改代码,开发完成后进行各项合并,这样做提高了开发的敏捷性和速度,并且减少了公共服务器的压力,且任意两个开发者之间的冲突更容易得到解决。

git安装

首先,你可以在你的电脑上执行"git"命令,检查是否已安装git。如果已安装,则会列出它的选项和最常用的子命令。如果未安装,则打印提示未安装或不是内部/外部命令。

安装包下载地址:git.download,按需选择吧,想必凭各位多年的电脑开关机经验,QQ、浏览器、游戏等的安装卸载经验,这步骤应该不会出现什么问题。

git的配置

安装完git,我们执行"git"命令查看它的选项和最常用的子命令。

//这里命令也就不一一列出了,大家自己执行看下即可(让我伪装下注释,谢谢~)

然后就是配置你的名称及邮箱:

git config --global user.name "yeshou"
git config --global user.email xxx@qq.com

我们可以通过根目录下的.gitconfig文件查看配置信息,这里加了--global,所以是全局配置,若其他仓库木有单独配置,则使用的是全局的,如果其他仓库需要单独配置,去掉--global重复以上操作即可,同理,可在对应仓库文件夹下看.gitconfig文件的配置信息(友情提示,这是个隐藏文件)。

生成SSH-key

配置完了git的提交人信息,我们在本地生成个ssh-key,用来验证提交者身份。

ssh-keygen -t rsa -C xxx@qq.com

然后在.ssh文件夹下找到id_rsa.pub文件,里面内容复制到github的"setting"下的"SSH and GPG keys"的添加过程的输入框里,用以生成ssh-key。

在github上实践

在github上创建一个远程仓库,登录github网站,通过右上角"New respository"新建一个比如名为"git-test"的项目仓库。我们打开项目仓库的首页,复制仓库地址(既然配置了SSH,那就选择SSH咯;当然,也可以通过HTTP的来clone),可以通过git clone 命令将远程仓库拉到本地。

git clone git@github.com:your-github-name/git-test.git

这样就把项目拉取到当前文件夹下了,so easy~       之后,我们可以操作本地文件夹进行增删改查等操作,下面列出一些操作。

在操作之前,需要了解工作区和暂存区和版本库的概念。

工作区:电脑中的文件夹内容

版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

暂存区:该内容存在于隐藏的.git目录下,可以简单理解为,需要提交的文件修改通通放到暂存区,然后一次性提交暂存区的所有修改。

详情点击此链接,有图有真相啊~

git基础操作命令

文件操作

将文件添加到版本库

git add TEST.md //添加了一个TEST.md文件

将版本库中文件重命名

git mv TEST.md LALALA.md //改名:TEST => LALALA

将文件从版本库删除

git rm LALALA.md // 删除LALAL.md 文件

查看操作记录

git log  //如果觉得信息太多,可以加参数"--pretty=oneline",这样就能够输出简短信息。

列出master分支的历史操作

git log master 

列出某个文件的历史操作

git log LALALA.md

然后在上一句操作中你会发现,追溯LALALA文件的操作历史的时候看不到它改名之前的历史,怎么办呢?

git log --follow LALALA.md //加上"--follow"参数会让git在日志中内容相关联的整个历史记录

查看你的每一次操作命令

git reflog //列出每次你的操作命令,如:log、add、rm等

版本回退

git reset --hard HEAD^ //HEAD表示当前版本,加^表示上一个,加^^表示上上个...
git reset --hard commit-id //我们可以通过git log拿到指定版本的提交id,并且返回到指定版本

查看工作区状态

git status //可看出是否对文件进行修改

将修改提交到暂存区

git add fileName //添加修改的文件
git commit -m "message" //提交修改的文件,并且输入修改信息

将暂存区的文件提交到远程仓库

git push (master) //不填则默认提交到当前分支,也可提交到指定分支

查看工作区与版本库中最新版本之间的不同

git diff HEAD fileName //当文件在工作区修改后还未提交到版本库

丢弃在工作区所做的修改

git checkout -- index.html //丢弃对index.html的修改

将远程仓库的修改拉取到本地

git fetch (master) //不填则默认拉取当前分支的最新修改,也可指定需要拉取的分支,fetch之后并不会合并修改
git pull (master) //不填则默认拉取当前分支的最新修改,也可指定需要拉取的分支,pull之后合并修改

分支操作

分支是在软件项目中启动一条单独的开发线的基本方法,使得开发能够在多个方向上同时进行,分支一般会被调解并与其他分支合并,用来合并不同的开发。通俗来讲,相当于将一个大任务分解成多个小任务,分给多人同时进行处理,完了再组合到一起,于是完成了个大任务。

创建分支

git branch dev //创建了一个dev分支,然而并没切换到这个分支上

切换分支

git checkout dev //切换到dev分支上

创建并且切换分支

git checkout -b dev //创建了一个dev分支,并且切换到这个分支上

打了一遍上面的命令,然后屁颠屁颠跑去github刷新看分支,然而并没有,少年莫慌,那是因为你还没将分支提交到远程仓库~

将分支放到远程仓库

git push origin dev //好了,将dev分支提交到远程仓库了,然后又跑去刷新了github,这次终于看到分支的存在了

查看分支

git branch  //带星号的是当前分支,加参数"-r"查看远程分钟,"-a"查看所有分支

合并分支

注:首先明确目前在哪个分支上,不可以在当前分支上将此分支合并到其他分支。

git merge dev //假如我现在在master分支上,然后合并了dev分支

通常合并分支的时候,git使用Fast-forward模式,我们可以在合并的时候使用参数"--no-ff"禁用该模式

git merge --no-ff -m "" dev //这样的合并会创建一个新的commit

这时分支合并了,然后你会发现分支依然存在,怎么办呢?

删除分支

git branch -d dev //删除dev分支
git branch -D dev //强制删除dev分支

这时候问题又来了,去github刷新看dev分支还是存在的...

删除远程分支

git push origin --delete dev //删除了远程仓库中的dev分支

删除不存在对应本地分支的远程分支

git remote prune origin

删除不存在对应远程分支的本地分支

git fetch -p 

查看分支合并流程图

git log --graph //明确的看到何时创建/修改/合并分支

标签操作

标签可以简单的看做是一个标识点或者参考点。它是个静态的名字,不随时间的推移而改变。而分支是动态的,且随着你每次的提交而移动。他们之间看起来相似,但我们需要分清楚他们,且勿将其混淆。

创建一个标签

git tag v0.1 // 创建一个标签,名为v0.1=> version 0.1

将标签推到远程仓库

git push origin v0.1

一次性推送所有标签

git push origin --tags

删除本地标签

git tag -d v0.1 //删除名为v0.1的标签

删除远程仓库的标签

git push origin :refs/tags/v0.1

进度暂存操作(类似游戏的存档)

git提供一个"存档"功能。比如,当你正在改一个功能的时候,临时需要修改另一个功能,而且比较重要,而又不能直接checkout丢弃当前的修改,这时候git提供的"存档"就好用了。可以将之前的修改暂时存起来,把工作区恢复到干净的环境供你修改另一个功能。

创建一个"存档"

git stash //暂时存储了当前的操作进度

查看"存档"的列表

git stash list

查看"存档"内容

git stash show stash@{index} //查看相对索引的存档内容,不加stash@{index}则默认是最近的"存档"

恢复"存档"

git stash apply stash@{index} //恢复相对索引的存档内容,不加stash@{index}则默认是最近的"存档"

恢复之后会发现,这个"存档"还在存档列表中,简直跟玩rpg游戏一样么~

删除"存档"

git stash drop stash@{index} //删除相对索引的存档内容,不加stash@{index}则默认是最近的"存档"

清除所有"存档"

git stash clear //毕竟一个个drop太累

给命令配置别名

如果你嫌一些命令麻烦或者太长或者不好记等等...

git config --global alias.cmt commit

然后你就可以使用"git cmt"代替"git commit"了。

删除别名

打开.gitconfig文件,找到[alias]的内容,删除对应别名的行内容即可

.gitignore文件

可以在文件夹下添加.gitignore文件,告诉git在执行命令的时候忽略一些内容。

具体操作:打开.gitignore,在后面一行添加需要忽略的内容。

文件夹: 如"src/" //忽略src文件夹下的所有文件

文件:如"*.jpg" //忽略以jpg为后缀的文件

...

向git求助

git help //列出参数列表及命令列表
git help command //打开该命令的html文档
git command --help //打开该命令的html文档

总结

以上所述是小编给大家介绍的Git的简单理解及基础操作命令,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • linux系统安装git及git常用命令

    1 安装GIT 复制代码 代码如下: $  sudo aptitude install git$  sudo aptitude install git-doc git-svn git-email git-gui gitk git软件包包含了大部分Git命令,是必装的软件包,第二行命令也是Git软件包,但是是单独发布的,可以选择安装. 2 下载远程项目的GIT库到本地[code]$  git clone git://远程Git库地址  filename[code] filename 是你本地的文件

  • Git 常用命令速查表(图文+表格)

    一. Git 常用命令速查 git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支 git branch -r 查看远程所有分支 git commit -am "init" 提交并且加注释 git remote add origin git@192.168.1.119:ndshow git push origin master 将文件给推到服务器上 git remote show origin

  • 分享下自己总结的Git常用命令

    使用git也有一段时间了,把自己常用的命令用自己的描述记录起来,方便自己备忘也方便其他人参考. 目录: 最基本的命令: git clone 拷贝并跟踪远程的master分支.跟踪的好处是以后可以直接通过pull和push命令来提交或者获取远程最新的代码,而不需要指定远程分支名字. git submodule init git submodule update 参考示意图 HEAD 指向当前的commit 对象,同时也用来表明我们在哪个branch上工作.所以当我们使用HEAD来操作指针的时候,其

  • Git使用基础篇(一些常用命令和原理)

    Git是一个分布式的版本控制工具,本篇文章从介绍Git开始,重点在于介绍Git的基本命令和使用技巧,让你尝试使用Git的同时,体验到原来一个版本控制工具可以对开发产生如此之多的影响,文章分为两部分,第一部分介绍Git的一些常用命令,其中穿插介绍Git的基本概念和原理,第二篇重点介绍 Git的使用技巧,最后会在Git Hub上创建一个开源项目开启你的Git实战之旅 1.Git是什么 Git在Wikipedia上的定义:它是一个免费的.分布式的版本控制工具,或是一个强调了速度快的源代码管理工具.Gi

  • github版本库使用详细图文教程(命令行及图形界面版)

    Git是一个分布式的版本控制系统,作为开源代码库以及版本控制系统,Github目前拥有140多万开发者用户.随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法. > Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理.在推出后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中.目前,包括 Rubinius和Merb在内的很多知名项目都使用了Git.Git同样可以被诸如Capistrano和

  • Git的简单理解及基础操作命令详解

    git和svn有什么区别呢? git采用分布式版本库管理,而svn采用集中式版本库管理. 集中式版本库管理需要有一台存放版本库的服务器,开发人员在开发的时候分别从服务器拉取过来最新版本,然后创建/进入分支进行开发,开发完成之后将分支提交或者合并到主分支. 分布式版本库管理允许开发者们将版本库搬到自己的电脑上,在开发过程中,开发者们可以根据不同的目的创建分支和修改代码,开发完成后进行各项合并,这样做提高了开发的敏捷性和速度,并且减少了公共服务器的压力,且任意两个开发者之间的冲突更容易得到解决. g

  • Linux网络设置之基础操作命令详解

    目录 查看网络配置 查看网络接口信息---ifconfig 查看路由表---route 查看网络连接情况---netstat 获取 socket 统计信息---ss 测试网络连接 测试网络连通性------ping 测试DNS域名解析------nslookup 设置网络地址参数 使用命令修改(临时配置) 修改网卡的地址.状态------ifconfig 添加.删除静态路由记录---route 修改配置文件(固定设置) 网络接口配置文件 路由配置文件 域名解析配置文件 本地主机映射文件 host

  • Git基础学习之文件删除操作命令详解

    目录 1.删除文件说明 2.删除文件操作 (1)仅删除暂存区的文件 (2)完全删除文件 3.本文用到的命令总结 1.删除文件说明 在Git工作目录中要删除某个文件,首先要清楚该文件所处的状态. 若要是该文件未被Git管理,在工作区直接进行删除即可.(不演示) 但是,若该文件已经经过多次git add与git commit操作后,就必须要从已跟踪文件清单中删除(确切地说,是在暂存区中删除),然后提交. 可以用git rm命令完成此项工作,并连带从工作目录中删除指定的文件,这样文件之后就不会出现在未

  • Cisco路由技术基础知识详解之一

    Cisco路由技术基础知识详解 路由器 <一> 最简单的网络可以想象成单线的总线,各个计算机可以通过向总线发送分组以互相通信.但随着网络中的计算机数目增长,这就很不可行了,会产 生许多问题: 1.带宽资源耗尽.     2.每台计算机都浪费许多时间处理无关的广播数据.     3.网络变得无法管理,任何错误都可能导致整个网络瘫痪.     4.每台计算机都可以监听到其他计算机的通信. 把网络分段可以解决这些问题,但同时你必须提供一种机制使不同网段的计算机可以互相通信,这通常涉及到在一些ISO网

  • Cisco路由技术基础知识详解

    Cisco路由技术基础知识详解 路由器 <一> 最简单的网络可以想象成单线的总线,各个计算机可以通过向总线发送分组以互相通信.但随着网络中的计算机数目增长,这就很不可行了,会产 生许多问题: 1.带宽资源耗尽.     2.每台计算机都浪费许多时间处理无关的广播数据.     3.网络变得无法管理,任何错误都可能导致整个网络瘫痪.     4.每台计算机都可以监听到其他计算机的通信. 把网络分段可以解决这些问题,但同时你必须提供一种机制使不同网段的计算机可以互相通信,这通常涉及到在一些ISO网

  • Linux系统诊断之内存基础深入详解

    1.背景 谈及linux内存,很多时候,我们会关注free,top等基础命令.当系统遇到异常情况时,内存问题的根因追溯,现场诊断时,缺乏深层次的debug能力.本篇幅不做深层讨论,能把当前系统的问题描述清楚,是每个SRE应该具备的最基础能力. 2. free 2.1 free命令原理 free是通过查看 /proc/meminfo 来获取内存的使用情况.但是 /proc/meminfo 这个文件又是怎么来的?我们先了解下 /proc 目录: /proc 是一个虚拟文件系统,该目录下的所有文件都是

  • Python写脚本常用模块OS基础用法详解

    收集了一些关于OS库的用法,整理归纳一下,方便使用 import os # 系统操作 print(os.sep) # 获取当前系统的路径分隔符 print(os.name) # 获取当前使用的工作平台 print(os.getenv('PATH')) # 获取名为 PATH 的环境变量 print(os.getcwd()) # 获取当前的路径 print(os.environ['PATH']) # 可以返回环境相关的信息 不传参时,以字典的方式返回所有环境变量 # 调用系统命令 os.syste

  • react.js框架Redux基础案例详解

    react.js框架Redux https://github.com/reactjs/redux 安装: npm install redux react-redux #基于react,我们在前面已经安装过了 Redux参考文档: http://redux.js.org/ Redux核心概念:Store 我们可以简单的理解为就是用来存储 各个组件的State或你自己定义的独立的state,对state进行统一读取.更新.监听等操作. http://redux.js.org/docs/basics/

  • 计算机网络编程MQTT协议基础原理详解

    目录 什么是 MQTT 协议 MQTT 基础 发布 - 订阅模式 可拓展性 消息过滤 基于主题的过滤 基于内容的过滤 基于类型的过滤 MQTT 与消息队列的区别 MQTT 重要概念 MQTT client MQTT broker MQTT Connection 消息报文 CONNECT CONNACK 消息类型 发布 订阅 确认消息 退订 确认退订 聊聊 Topic 通配符 单级通配符 多级通配符 之前有位读者给我留言说想要了解一下什么是 MQTT 协议,顺便还把我夸了一把,有点不好意思啦. 那

  • vue-router 路由基础的详解

    vue-router 路由基础的详解 今天我总结了一下vue-route基础,vue官方推荐的路由. 一.起步 HTML <div id="myDiv"> <h1>简单路由</h1> <router-link to="/foo">Go to foo</router-link> <router-link to="/bar">Go to bar</router-link&g

随机推荐