前端小白一枚,最近开始使用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 pull 是到工作区还是暂存区_每天一Git之简单理解工作区和暂存区

    每天一Git之简单理解工作区和暂存区 1. 工作区与暂存区命令初体验 1.1. 暂存区文件与文件夹管理 [root@number ~]# cd GitDir/git_learning/ [root@n ...

  2. (通过简单直观的推导理解卡尔曼基础)Understanding the Basis of the Kalman Filter Via a Simple and Intuitive Derivation

    通过简单直观的推导理解卡尔曼基础 RELEVANCE PREREQUISITES PROBLEM STATEMENT SOLUTIONS REFERENCE 本文提供了卡尔曼滤波器的简单直观的推导,目 ...

  3. 【深度学习入门基础】二、简单理解 Transformer

    [深度学习入门基础]二.简单理解 Transformer 文章目录 [深度学习入门基础]二.简单理解 Transformer 自注意力层 多头注意力 Transformer 输入(输出)嵌入 位置编码 ...

  4. linux下git的简单运用

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

  5. Deep Reinforcement Learning: Pong from Pixels翻译和简单理解

    原文链接: http://karpathy.github.io/2016/05/31/rl/ 文章目录 原文链接: 前言 Policy-Gradient结构流程图 Deep Reinforcement ...

  6. git的详细用法和基础教程

    Git 是当前最流行的版本控制程序之一,文本包含了 Git 的一些基本用法 创建 git 仓库 初始化 git 仓库 mkdir project  # 创建项目目录  cd project  # 进入 ...

  7. git 使用简单总结

    git 使用简介 Git的简明 我试着写一下git的简单使用说明,如有错误的地方,欢迎斧正. 首先,下载并安装git.(废话) git 下载地址 生成公钥秘钥,并绑定到gogs 代码管理中心上. 在初 ...

  8. 入门启发:音视频的简单理解

    算机技术领域中,『音视频技术』应该说算是较复杂的小门类.较复杂的东西有个简单的入门指引,或者有前辈带路是很重要的. 前阵子,因为项目中急需音视频技术,虽然网上资料看似很丰富,但对初学者来说,很多资料都 ...

  9. mysql 删除时间一个星期_15天快速学习 数据库Mysql 基础操作命令(第一章)

    简言 你还在为不了解不会操作MySQL数据库而苦恼吗? 还为面对冗繁的数据不知怎么提取而愤懑吗? 分享快速学习MySQL及基础操作命令 那就利用闲暇时间和我一起掌握一门MySQL数据库语言操作吧! 入 ...

最新文章

  1. Nat. Ecol. Evol.:不想当化学家的物理学家不是好的生物学家
  2. qt5中字符串转字符串数组_Qt中的对象类型转换(Qstring 转换char*有三种方法)
  3. window.print 固定表头不影响_Excel中的表头,你会处理吗
  4. Android init.rc文件解析过程详解(一)
  5. mysql 5.3 build4.234_mysql版本3.23跟4.1区别
  6. woocommerce产品选项卡描述_适合WooCommerce卖家的7款Dropshipping插件+功能介绍
  7. ATS连接 https
  8. react-native 学习
  9. WCF技术内幕之面向服务
  10. 【自己看的笔记】Unity基础操作认识
  11. phpdesigner 7 key注册码
  12. 路由模式和桥接模式的区别
  13. Emacs+Muse 使用
  14. 为什么mac Safari提示:打不开该网页,因为无法与服务器建立安全的链接?
  15. VMware Linux虚拟机CPU占用过高
  16. C++跨平台技术 - 线程Thread
  17. MOV AX,BX 与 MOV AX,[BX] 区别
  18. 转:陈永康谈物联网测试
  19. 基于SSM教务管理系统
  20. mysql同步详解_MYSQL 主从同步详解

热门文章

  1. uva 1613——K-Graph Oddity
  2. C语言模拟实现标准库函数之strcat()
  3. 1.c++中初始化列表和构造函数初始化的区别是什么?2.类的成员变量的初始化顺序是按照声明顺序吗?
  4. linux fstab解读
  5. 【jenkins】jenkins按分支build和email
  6. 【Java图文趣味版】快速搞定数组的声明、开辟空间和初始化赋值
  7. java面试核心知识点,详解系列文章
  8. java小游戏毕业论文,你不懂还不学?
  9. HTML列表标签,讲的明明白白!
  10. redis的源码编译安装+发布订阅+RDB持久化