Git基础知识教程整理(Git基本操作)

Git简介

Git是目前世界上最先进的分布式版本控制系统(没有之一)。
Linux之父Linux用C语言写了Git分布式版本控制系统。

分布式版本控制系统与集中式版本控制系统的区别

区别分布式集中式
中央服务器有,版本库集中存放在中央服务器,工作时需从中央服务器获取最新版本代码,工作完成后在将代码推送到中央服务器。中央服务器出了问题,开发者几乎无法工作无,开发人员本地都有本地存储库(Local Repository)
联网必须,必须要联网才能工作,而且对网络的依赖性较强,网络较差或者文件较大,文件提交的速度会受很大的限制不是必要的,在没有网络的情况下也可以执行commit、查看版本提交记录、以及分支操作,在有网络的情况下执行 push 将代码从本地仓库推送到远程仓库(Remote Repository)。
存储格式原始文件,体积大元数据,体积小
分支操作创建新的分支则所有的人都会拥有和你一样的分支分支操作不会影响其他开发人员
提交方式直接提交到中央版本库先commit到本地仓库,再push到远程仓库
优点方便管理,逻辑明确,上手快;更能保证代码的安全性;代码一致性非常高;有良好的目录级权限控制系统速度快、灵活,分支之间可以任意切换;单机合并分支,开发者之间容易解决冲突;可离线工作,不影响本地代码编写;公共服务器压力小,数据传输量少
缺点服务器性能要求高,数据体量大;必须联网;不适合开源;分支管理不灵活不符合常规思维,学习周期相对较长;代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

创建版本库

  1. 创建一个项目目录(mkdir Git)
  2. 进入到这个目录(cd Git)
  3. 初始化版本库(git init)

在当前目录下会有.git的目录,它是git进行跟踪和管理版本库,禁止删改此文件(如果没看到可能是您的电脑不显示隐藏文件,在命令行工具运行 ls -ah可查看)。

$ mkdir Git
$ cd Git
$ git init
// Initialized empty Git repository in /Users/zhengdahua/Documents/Project/Private/Git/.git/ 初始化空的版本库
  1. 编写一个README.md文件
  2. 将README.md添加到暂存区(git add README.md)
  3. 确认提交文件到仓库(git commit -m 'add example file')

我们当前的项目目录是工作区,git初始化之后会生成一个.git文件,即我们所说的版本库(respository),.git中有一个index文件就是暂存区(stage),git还为我们自动生成了一个分支master以及指向该分支的指针head。想了解更多,请移步git工作区、暂存区、版本库之间的关系。

$ type nul>README.md
$ git add README.md
$ git commit -m 'add example file'

版本回退

  • 查看版本库的状态(git status)。下面的命令输出告诉我们,document.md被修改过了,但还没有提交。
➜  Git git:(master) git status 
On branch master
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified:   docs/document.mdno changes added to commit (use "git add" and/or "git commit -a")
➜  Git git:(master) ✗ 
  • 比较两次修改的差异(git diff)。“-”后面跟的是删除的内容,“+”后面跟的是新增的内容
-### 4. 编写一个README.md文件
-### 5. 将README.md添加到暂存区(git add README.md)
-### 6. 确认提交文件到仓库(git commit -m 'add example file')
++ 4. 编写一个README.md文件
++ 5. 将README.md添加到暂存区(git add README.md)
  • 查看提交日志(git log)。显示从最近到最远的提交日志
commit 241f77158c2d59b0b10e482b74a24150a0bebeb4 (HEAD -> master)
Author: kevin <kenvin.zheng@drigle.com>
Date:   Sun Feb 24 22:24:51 2019 +0800update document.mdcommit f953ccc298a430939e5e64eeedd49cc2db5a3fdb
Author: kevin <kenvin.zheng@drigle.com>
Date:   Sun Feb 24 21:43:08 2019 +0800
  • 回退版本(git reset --hard HEAD^)。用HEAD表示当前版本,则HEAD^就是上个版本,HEAD^表示上上个版本,HEAD~100表示上一百个版本,“241f77158c2d59b0b10e482b74a24150a0bebeb4”指的是版本的id,我们要回退到指定版本是只需要id的前几位就行,但最好5位以上。回退指定版本(git reset --hard f953c)。
  • 查看所有分支的版本操作记录(git reflog)。当你用$ git reset --hard HEAD^回退到以前版本时,再想恢复到append GPL,就必须找到append GPL的commit id,通过git reflog就可以append GPL的commit id了。
241f771 (HEAD -> master) HEAD@{0}: reset: moving to 241f771
f953ccc HEAD@{1}: reset: moving to HEAD^
241f771 (HEAD -> master) HEAD@{2}: commit: update document.md
f953ccc HEAD@{3}: commit (amend): add first file
bd07a32 HEAD@{4}: commit (amend): add first file
98f7467 HEAD@{5}: commit (initial): add first file

修改管理

Git 并不跟踪与文件相关的文件名和目录名,而是跟踪的是文件的内容,查看Git 追踪内容详解。因此文件的每一次修改,都需要git add添加到暂存区,然后在commit到版本库。

  • 修改撤销(git checkout -- README.md)。这里有两种情况:一种是README.md自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。总之,就是让这个文件回到最近一次git commit或git add时的状态。
  • 删除文件。工作区直接删除文件,提交到版本库。

远程仓库

为了能在任意 Git 项目上协作,你需要知道如何管理自己的远程仓库。 远程仓库是指托管在因特网或其他网络中的你的项目的版本库,例如github、gitlab、码云或者你自己用服务器搭建的远程仓库。 你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以读写。 与他人协作涉及管理远程仓库以及根据需要推送或拉取数据。 管理远程仓库包括了解如何添加远程仓库、移除无效的远程仓库、管理不同的远程分支并定义它们是否被跟踪等等。

创建SSH Key 。

在用户目录下查看有没有.ssh文件目录(电脑需要显示隐藏文件),如果有再查看有没有id_rsa(私匙)和id_rsa.pub(公匙)。有直接跳过第一步,没有则创建SSH Key,邮箱换成你自己的邮箱,一路回车即可。

$ ssh-keygen -t rsa -C "youremail@example.com"

上传公钥

登陆GitHub,打开“Account settings”,“SSH Keys”页面;然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。

注:Github通过公钥识别你的身份,确认只有你自己才能推送。GitHub允许你添加多个Key,如果有多台电脑,把电脑的公钥都添加到Github上,这样不管用哪台电脑都可以向Github推送代码了。

添加远程库。

在github上创建一个project,在Repository name填入项目名(Git),其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库。

目前,在GitHub上的这个Git仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。

现在,我们根据GitHub的提示,在本地的Git仓库下运行命令:

$ git remote add origin git@github.com:dahuazheng/Git.git

注:dahuazheng为你github的账户名

添加远程仓库后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库,接下来把本地库的所有内容推送到远程库上:

$ git push -u origin master

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

克隆远程仓库(git clone)

Git支持多种协议,默认使用ssh,也可以使用https等其他协议。通过ssh支持的原生git协议速度最快。使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。

  • 使用ssh示例
$ git clone git@github.com:dahuazheng/vue-note.git
  • 使用https示例
$ git clone https://github.com/dahuazheng...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536863.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python plot map_使用matplotlibbasemap在边界打印

我在绘制多边形时遇到了困难&#xff0c;例如&#xff0c;在使用matplotlib basemap生成的地图边界上绘制多边形。在下面的示例中&#xff0c;地图边界由日期线指定。我试图通过指定三角形顶点的坐标来绘制一个跨越日期线的三角形。当所有的坐标都在地图内时&#xff0c;这种方…

SQL查询语句 group by后, 字符串合并

合并列值 --******************************************************************************************* 表结构&#xff0c;数据如下&#xff1a; id value ----- ------ aa bb aaa bbb ccc 需要得到结果&#xff1a; id values ------ ----------- aa,bb aaa…

Git 基础 —— 常用命令

Git 基础学习系列 Git 基础 —— 安装 配置 别名 对象Git 基础 —— 常用命令Git 基础 —— 常见使用场景Git基础 —— Github 的使用git init 创建 Git 本地仓库 远端无仓库&#xff0c;本地无仓库&#xff0c;本地新建一个仓库 git init git_learning 远端有仓库&#xff0c;…

linux 访问Windows 共享文件的方法

2019独角兽企业重金招聘Python工程师标准>>> 1 安装Samba服务 2 启动 samba服务 /etc/init.d/smb restart 3 安装插件 cifs解决只读挂载&#xff1a;yum install cifs-utils.x86_64 4 在windows下共享一个可以用的文件夹 5 将 windows 共享文件夹挂载到linux上 命令…

基于Blink构建亲听项目以及全链路debug项目实时响应能力

案例与解决方案汇总页&#xff1a;阿里云实时计算产品案例&解决方案汇总 本文全面总结了大数据项目组在亲听项目以及全链路debug项目上进行的实时流处理需求梳理&#xff0c;架构选型&#xff0c;以及达成效果 一、背景介绍 1.1亲听项目 亲听项目专注于帮助用户收集、展示、…

在既有系统中打通Apache Ignite、MySQL和Node.js

为什么80%的码农都做不了架构师&#xff1f;>>> 介绍 在本系列的第一篇文章中&#xff0c;安装了Node.js、Ignite的Node.js瘦客户端包&#xff0c;并且测试了一个示例应用。在本文中&#xff0c;可以看一下Ignite在处理其它数据源&#xff08;比如关系数据库&#…

java hashmap 的api_JAVA基础--JAVA API集合框架(ArrayList、HashSet、HashMap使用)

一、集合Collection1. 集合介绍变量&#xff1a;表示的内存中的一个空间&#xff0c;只能保存确定类型的单个数据数组&#xff1a;表示的是内存中的多个连续的空间&#xff0c;这些空间中可以存储多个同类型的数据。后期继续学习面向对象技术&#xff0c;我们在程序中开始创建对…

dbunit java_java - 错误地抛出了Java DBUnit AmbiguousTableNameException - 堆栈内存溢出

我正在尝试DBUnit(2.6.0)&#xff0c;我正在尝试导出我的完整数据库(PostgreSQL)。 但是抛出以下异常&#xff1a;线程“main”中的异常org.dbunit.database.AmbiguousTableNameException&#xff1a;FLYWAY_SCHEMA_HISTORY这是正确的行为&#xff0c;因为我有两个具有相同名称…

Idea项目中常见错误及笔记(Old)

1、Idea基础设置&#xff1a; File-->settings--> 1>修改字体&#xff1a;Font 2>修改编码格式&#xff1a;File Encodings(全部UTF-8,右下方复选框勾中--防止程序中的汉字转为ASCII码) 3>修改行号&#xff1a;Appearance&#xff1a;show line numbers show me…

java接口服务编排_GOKU API Gateway CE V3.1.0 发布:新增服务编排、配置版本管理等...

Goku API Gateway (中文名&#xff1a;悟空 API 网关)是一个基于 Golang 开发的微服务网关&#xff0c;能够实现高性能 HTTP API 转发、服务编排、多租户管理、API 访问权限控制等目的&#xff0c;拥有强大的自定义插件系统可以自行扩展&#xff0c;并且提供友好的图形化配置界…

maxcompute 2.0复杂数据类型之array

2019独角兽企业重金招聘Python工程师标准>>> 1. 含义 类似于Java中的array。有序、可重复。 2. 场景 什么样的数据&#xff0c;适合使用array类型来存储呢&#xff1f;这里列举了几个我在开发中实际用到的场景。 2.1 标签类的数据 为什么说标签类数据适合使用array类…

权限组件(6):权限分配的角色管理

效果图&#xff1a; 为了方便开发&#xff0c;先把中间件注释掉&#xff0c;要不还要在角色-权限表中添加对应关系。又因为二级菜单和面包屑导航需要中间件的变量&#xff0c;所以要在layout.html里面把这两个也注释掉。setting.py# rbac.middlewares.rbac.RbacMiddleware layo…

02-Django基础知识

一、内容回顾 1、web应用程序 2、HTTP协议 a、http协议特性 b、http请求格式 c、http响应格式 3、wsgiref模块 4、Django下载与简单应用 a、Django简介&#xff08;MTV&#xff09; b、下载django命令 c、创建项目命令 d、创建app应用 e、启动项目   二、今日概要 1、路由层&…

java解析上的jar包里的pom_Maven引入本地Jar包并打包进War包中的方法

1.概述在平时的开发中&#xff0c;有一些Jar包因为种种原因&#xff0c;在Maven的中央仓库中没有收录&#xff0c;所以就要使用本地引入的方式加入进来。2. 拷贝至项目根目录项目根目录即pom.xml文件所在的同级目录&#xff0c;可以在项目根目录下创建文件夹lib&#xff0c;如下…

java静态工厂方法模式_设计模式:简单工厂模式(静态工厂方法模式)

简单工厂的构成包括三个角色&#xff1a;1)抽象产品类2)具体产品类(继承抽闲产品类)3)工厂类(生产具体产品)具体代码实现1、抽象产品类/*** 抽象类*/public abstract class Car {/*** 产品抽象方法&#xff0c;将会由具体产品类实现*/public abstract void driving();}2、具体产…

Kibana中的Coordinate Map地图报索引错误的问题

今天做地图定位展示&#xff0c;展示的是ApacheWeb服务器的访问日志文件中的来源IP。但是中间出现了报错环节&#xff0c;说是索引不能匹配到geo_point类型&#xff0c;实在是不懂这是在说什么&#xff0c;后来在网站找了方法就解决了。主要报错如下&#xff1a; 报错信息&…

windows软链接的建立及删除

2019独角兽企业重金招聘Python工程师标准>>> 1.建立举例 # 建立d:develop链接目录&#xff0c;指向远程的目标服务器上的e盘的对应目录。 mklink /d d:\develop \\138.20.1.141\e$\develop# 建立d:develop链接目录&#xff0c;指向远程的目标服务器上的e盘的对应目录…

php原生类,反序列化之PHP原生类的利用

正文文章围绕着一个问题&#xff0c;如果在代码审计中有反序列化点&#xff0c;但是在原本的代码中找不到pop链该如何?N1CTF有一个无pop链的反序列化的题目&#xff0c;其中就是找到php内置类来进行反序列化。基础知识首先还是来回顾一下序列化中的魔术方法&#xff0c;下面也…

Spectral Bounds for Sparse PCA: Exact and Greedy Algorithms[贪婪算法选特征]

目录 概括Sparse PCA Formulation非常普遍的问题Optimality ConditionsEigenvalue Bounds算法代码概括 这篇论文&#xff0c;不像以往的那些论文&#xff0c;构造优化问题&#xff0c;然后再求解这个问题&#xff08;一般都是凸化&#xff09;。而是&#xff0c;直接选择某些特…

TikTok与环保:短视频如何引领可持续生活方式?

在数字时代&#xff0c;社交媒体平台扮演着塑造文化和价值观的关键角色。而TikTok&#xff0c;作为一款全球短视频平台&#xff0c;不仅塑造着用户的娱乐方式&#xff0c;还在悄然地引领着可持续生活方式的潮流。本文将深入探讨TikTok与环保之间的关系&#xff0c;分析短视频如…