git的简单理解及基础操作命令
前端小白一枚,最近开始使用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的简单理解及基础操作命令的更多相关文章
- Git的常见基础操作命令
Git的常见基础操作命令 1安装初始化 1.1安装git本地安装Windows版本 下载地址: https://git-scm.com/downloads/ 1.2初始化Git用户信息配置 配置git ...
- Deep learning:四十二(Denoise Autoencoder简单理解)
前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Be ...
- linux下git的简单运用
linux下git的简单运用 windows下也有git,是git公司出的bash,基本上模拟了linux下命令行.许多常用的命令和linux下操作一样.也就是说,windows下的git命令操作和l ...
- 我们为之奋斗过的C#-----C#的一个简单理解
我们首先来简单叙述一下什么是.NET,以及C#的一个简单理解和他们俩的一个区别. 1 .NET概述 .NET是Microsoft.NET的简称,是基于Windows平台的一种技术.它包含了能在.NET ...
- 简单理解 OAuth 2.0 及资料收集,IdentityServer4 部分源码解析
简单理解 OAuth 2.0 及资料收集,IdentityServer4 部分源码解析 虽然经常用 OAuth 2.0,但是原理却不曾了解,印象里觉得很简单,请求跳来跳去,今天看完相关介绍,就来捋一捋 ...
- 沉淀,再出发:VUE的简单理解
沉淀,再出发:VUE的简单理解 一.前言 Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架.Vue 只关注视图层,采用自底向上增量开发的设计.Vue 的目标是通过 ...
- 初始github——git的简单使用
初学者~ 有两篇吧,一篇在github上 https://github.com/DefaultYuan/Git-Pro/wiki/Introduction 文章来源:<git的简单使用> ...
- Git 的简单测试
Git 简介 Git(读音为/gɪt/.)是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开 ...
- Git II: 操作远程Repository基础
很久之前写过一篇Git: Setup a remote Git repository,留意到有前同事谈论到Git的一些操作,就把Git值得留意的操作补补全吧.这次,主要讲述Git远程Repositor ...
随机推荐
- 全网络最正确的让 Linux 开机进入字符界面的方法及设置 FrameBuffer 分辨率的方法
引言 这个标题有点长,是为了在标题中就把问题说清楚,以便搜索引擎能够把有需要的朋友准确地带到我这里来.目前在网络上,很多关于 Linux 方面的知识是过时的和错误的.我标题中指出的两个知识点就是其中的 ...
- 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 ...
- 谈一谈Http Request 与 Http Response
写在前面的话:今天来总结一下http相关的request和response,就从以下几个问题入手吧. ======正文开始======== 1.什么是HTTP Request 与HTTP Respon ...
- SQL Server 服务器磁盘测试之SQLIO篇(一)
数据库调优工作中,有一部分是需要排查IO问题的,例如IO的速度或者RAID级别无法响应高并发下的快速请求.最常见的就是查看磁盘每次读写的响应速度,通过性能计数器Avg.Disk sec/Read(Wr ...
- Linux Nano命令
Nano命令指南 今天在输命令时,无意中输入了nano,对这个命令不太熟悉,结果不知道如何才能退出,保存,赶快查了一下资料,原来是这样的啊. 打开文件与新建文件 使用nano打开或新建文件,只需键入: ...
- iOS 开发不可缺少的工具
1.截屏利器:Snip 强大的滚动截屏功能,你值得拥有! Snip.png 传送门:http://www.snip.qq.com/ 2.Mac上最好的终端模拟器:iTerm2 iTeam.png 传送 ...
- 基于Cat的分布式调用追踪
Cat是美团点评出的一款APM工具,同类的产品也有不少,知名的开源产品如zipkin和pinpoint:国内收费的产品如oneapm.考虑到Cat在互联网公司的应用比较广,因此被纳入选型队列,我也有幸 ...
- SQL Server-聚焦INNER JOIN AND IN性能分析(十四)
前言 本节我们来讲讲联接综合知识,我们在大多教程或理论书上都在讲用哪好,哪个性能不如哪个的性能,但是真正讲到问题的实质却不是太多,所以才有了本系列每一篇的篇幅不是太多,但是肯定是我用心去查找许多资料而 ...
- Ubuntu 安装 CLI 并运行 ASP.NET Core 1.0
Ubuntu 下载地址:http://www.ubuntu.org.cn/download/desktop 注:目前 CLI 的安装命令只支持 Ubuntu 14.04,暂不支持 Ubuntu 14. ...
- AngularJS 脏检查深入分析
写在开头 关于Angular脏检查,之前没有仔细学习,只是旁听道说,Angular 会定时的进行周期性数据检查,将前台和后台数据进行比较,所以非常损耗性能. 这是大错而特错的.我甚至在新浪前端面试的时 ...