前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看《git版本控制管理》这本书(偏理论,内容完善,很不错),针对所学内容建了git仓库测试,且写了不少git操作命令的笔记,做个分享,有错误的地方各位大大也给提出,好做修改~

Git是一款免费、开源的、用Linux内核开发的分布式版本控制系统。

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用法,之后整理出来的笔记如果可以的话也会分享哦~

git的简单理解及基础操作命令的更多相关文章

  1. Git的常见基础操作命令

    Git的常见基础操作命令 1安装初始化 1.1安装git本地安装Windows版本 下载地址: https://git-scm.com/downloads/ 1.2初始化Git用户信息配置 配置git ...

  2. Deep learning:四十二(Denoise Autoencoder简单理解)

    前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Be ...

  3. linux下git的简单运用

    linux下git的简单运用 windows下也有git,是git公司出的bash,基本上模拟了linux下命令行.许多常用的命令和linux下操作一样.也就是说,windows下的git命令操作和l ...

  4. 我们为之奋斗过的C#-----C#的一个简单理解

    我们首先来简单叙述一下什么是.NET,以及C#的一个简单理解和他们俩的一个区别. 1 .NET概述 .NET是Microsoft.NET的简称,是基于Windows平台的一种技术.它包含了能在.NET ...

  5. 简单理解 OAuth 2.0 及资料收集,IdentityServer4 部分源码解析

    简单理解 OAuth 2.0 及资料收集,IdentityServer4 部分源码解析 虽然经常用 OAuth 2.0,但是原理却不曾了解,印象里觉得很简单,请求跳来跳去,今天看完相关介绍,就来捋一捋 ...

  6. 沉淀,再出发:VUE的简单理解

    沉淀,再出发:VUE的简单理解 一.前言 Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架.Vue 只关注视图层,采用自底向上增量开发的设计.Vue 的目标是通过 ...

  7. 初始github——git的简单使用

    初学者~ 有两篇吧,一篇在github上  https://github.com/DefaultYuan/Git-Pro/wiki/Introduction 文章来源:<git的简单使用> ...

  8. Git 的简单测试

    Git 简介 Git(读音为/gɪt/.)是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开 ...

  9. Git II: 操作远程Repository基础

    很久之前写过一篇Git: Setup a remote Git repository,留意到有前同事谈论到Git的一些操作,就把Git值得留意的操作补补全吧.这次,主要讲述Git远程Repositor ...

随机推荐

  1. 全网络最正确的让 Linux 开机进入字符界面的方法及设置 FrameBuffer 分辨率的方法

    引言 这个标题有点长,是为了在标题中就把问题说清楚,以便搜索引擎能够把有需要的朋友准确地带到我这里来.目前在网络上,很多关于 Linux 方面的知识是过时的和错误的.我标题中指出的两个知识点就是其中的 ...

  2. useful commands for docker beginner

    You may want to add my wechat public account or add my technical blog's RSS feed This list is meant ...

  3. 谈一谈Http Request 与 Http Response

    写在前面的话:今天来总结一下http相关的request和response,就从以下几个问题入手吧. ======正文开始======== 1.什么是HTTP Request 与HTTP Respon ...

  4. SQL Server 服务器磁盘测试之SQLIO篇(一)

    数据库调优工作中,有一部分是需要排查IO问题的,例如IO的速度或者RAID级别无法响应高并发下的快速请求.最常见的就是查看磁盘每次读写的响应速度,通过性能计数器Avg.Disk sec/Read(Wr ...

  5. Linux Nano命令

    Nano命令指南 今天在输命令时,无意中输入了nano,对这个命令不太熟悉,结果不知道如何才能退出,保存,赶快查了一下资料,原来是这样的啊. 打开文件与新建文件 使用nano打开或新建文件,只需键入: ...

  6. iOS 开发不可缺少的工具

    1.截屏利器:Snip 强大的滚动截屏功能,你值得拥有! Snip.png 传送门:http://www.snip.qq.com/ 2.Mac上最好的终端模拟器:iTerm2 iTeam.png 传送 ...

  7. 基于Cat的分布式调用追踪

    Cat是美团点评出的一款APM工具,同类的产品也有不少,知名的开源产品如zipkin和pinpoint:国内收费的产品如oneapm.考虑到Cat在互联网公司的应用比较广,因此被纳入选型队列,我也有幸 ...

  8. SQL Server-聚焦INNER JOIN AND IN性能分析(十四)

    前言 本节我们来讲讲联接综合知识,我们在大多教程或理论书上都在讲用哪好,哪个性能不如哪个的性能,但是真正讲到问题的实质却不是太多,所以才有了本系列每一篇的篇幅不是太多,但是肯定是我用心去查找许多资料而 ...

  9. Ubuntu 安装 CLI 并运行 ASP.NET Core 1.0

    Ubuntu 下载地址:http://www.ubuntu.org.cn/download/desktop 注:目前 CLI 的安装命令只支持 Ubuntu 14.04,暂不支持 Ubuntu 14. ...

  10. AngularJS 脏检查深入分析

    写在开头 关于Angular脏检查,之前没有仔细学习,只是旁听道说,Angular 会定时的进行周期性数据检查,将前台和后台数据进行比较,所以非常损耗性能. 这是大错而特错的.我甚至在新浪前端面试的时 ...