Git操作与仓库创建

2023-11-05

Git简介

首先了解一个概念:版本控制,简单来说就是如果你做文案工作,每次提交之后,你的领导会让你修改,一篇稿子可能修改十几次,但是最后定稿的很可能不是最新修改的那一稿,所以就需要有个版本控制的方法,可以回溯到你所修改的任何一版,并且可以拿出来使用。

目前来说,版本控制主要分为:集中式版本控制(Centralized Version Control Systems,简称 CVCS)和分布式版本控制,(Distributed Version Control System,简称 DVCS)。

集中式版本控制类似于中央集权,多个终端与一个服务器进行交互,缺点明显,如果服务器损毁,则所有终端都不能拿到最新版本。

分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。

下图就是分布式版本控制系统的图解:
在这里插入图片描述

想更多的了解这两者的优缺点,请点击这里

CVCS的代表主要有CVS、SVN 以及Perforce等;

DVCS主要有 Git、Mercurial、Bazaar 以及 Darcs 等。我们平时比较常用的就是SVN和Git。

Git是世界上目前最先进的版本控制系统,Git的开发者也是Linux操作系统的创始人:“林纳斯·本纳第克特·托瓦兹”,他开发这个Git只用了短短两周,而关于这个Git开发的故事,也有一段奇闻,想了解的请点击深入 git 必看:git 是如何被创造的?讲述 git 的诞生史、核心思想及其父:Linus Torvalds

如想了解SVN的简单使用,可以查看:SVN的介绍与使用流程

接下就开始介绍Git的简单操作使用。以下主要对官方文档以及其他文档的总结,会使用git作为版本控制工具来完成团队协作。因此,对基本的git操作指令进行总结是十分有必要的,本文会对基本的理论与命令做归纳总结。

git的通用操作流程如下图

在这里插入图片描述

主要涉及到四个关键点:

  • 工作区:本地电脑存放项目文件的地方,比如learnGitProject文件夹;
  • 暂存区(Index/Stage):在使用git管理项目文件的时候,其本地的项目文件会多出一个.git的文件夹,将这个.git文件夹称之为版本库。其中.git文件夹中包含了两个部分,一个是暂存区(Index或者Stage),顾名思义就是暂时存放文件的地方,通常使用add命令将工作区的文件添加到暂存区里;
  • 本地仓库:.git文件夹里还包括git自动创建的master分支,并且将HEAD指针指向master分支。使用commit命令可以将暂存区中的文件添加到本地仓库中;
  • 远程仓库:不是在本地仓库中,项目代码在远程git服务器上,比如项目放在github上,就是一个远程仓库,通常使用clone命令将远程仓库拷贝到本地仓库中,开发后推送到远程仓库中即可;

因此,经过这样的分析,git命令可以分为这样的逻辑进行理解和记忆:

1.git管理配置的命令;

2.几个核心存储区的交互命令:

3.工作区与暂存区的交互;

4.暂存区与本地仓库(分支)上的交互;

5.本地仓库与远程仓库的交互。

Git下载与环境配置

Git下载安装以及环境配置请参考Git下载、安装与环境配置,这里不再赘述。

git配置命令

Git操作需要在一个文件夹下生成,安装完成之后,在桌面或者文件夹下,点击右键,出现下图:

在这里插入图片描述

Git GUI 是图像化显示,与Git Bash功能一样
Git Bash常用此方式创建一个仓库,点击打开Git控制台

以下所有命令均在Git控制台上运行:如下图
在这里插入图片描述

$表示提示输入

查询配置信息

1.列出当前配置:git config --list;
2.列出repository配置:git config --local --list;
3.列出全局配置:git config --global --list;
4.列出系统配置:git config --system --list;

第一次使用git,配置用户信息

1.配置用户名:git config --global user.name "your name";
2.配置用户邮箱:git config --global user.email "youremail@github.com";

其他配置

1.配置解决冲突时使用哪种差异分析工具,比如要使用vimdiff:git config --global merge.tool vimdiff;
2.配置git命令输出为彩色的:git config --global color.ui auto;
3.配置git使用的文本编辑器:git config --global core.editor vi;

工作区上的操作命令

新建仓库

1.将工作区中的项目文件使用git进行管理,即创建一个新的本地仓库:git init;(初始化)
2.从远程git仓库复制项目:git clone <url>,如:git clone git://github.com/wasd/example.git;、
3.克隆项目时如果想定义新的项目名,可以在clone命令后指定新的项目名:git clone git://github.com/wasd/example.git mygit;

查看文件状态

$ git status

显示工作目录的状态,不带参数执行,输出内容很详细。并且根据文件是否暂存,会预示下一步的指令操作。

如果想简洁一点,那么加个--short (-s)参数:git status -s

移除文件

$ git rm 

从git中将已跟踪的文件从工作目录、暂存区移除,注意是已跟踪的。如果该文件又是已修改的,可以使用参数 -f 强制删除。

如果移除未跟踪的文件,或者只在工作目录移除,在暂存区继续保留,那么可以执行:

提交

1.提交工作区所有文件到暂存区:git add .('.'的前面还有个空格!)
2.提交工作区中指定文件到暂存区:git add <file1> <file2> ...;
3.提交工作区中某个文件夹中所有文件到暂存区:git add [dir];

暂存区上的操作命令

提交文件到版本库

1.将暂存区中的文件提交到本地仓库中,即打上新版本:git commit -m "commit_info";
2.将所有已经使用git管理过的文件暂存后一并提交,跳过add到暂存区的过程:git commit -a -m "commit_info";
3.提交文件时,发现漏掉几个文件,或者注释写错了,可以撤销上一次提交:git commit --amend;
4.修改commit信息git commit --ammend,修改,保存;

删除git远程仓库地址

git remote -v //查看
git remote rm origin

分支管理

1.创建分支:git branch <branch-name>,如git branch testing;
2.从当前所处的分支切换到其他分支:git checkout <branch-name>,如git checkout testing;
3.新建并切换到新建分支上:git checkout -b <branch-name>;
4.删除分支:git branch -d <branch-name>;
5.将当前分支与指定分支进行合并:git merge <branch-name>;
6.显示本地仓库的所有分支:git branch;
7.查看各个分支最后一个提交对象的信息:git branch -v;
8.查看哪些分支已经合并到当前分支:git branch --merged;
9.查看当前哪些分支还没有合并到当前分支:git branch --no-merged;
10.把远程分支合并到当前分支:git merge <remote-name>/<branch-name>,如git merge origin/serverfix;如果是单线的历史分支不存在任何需要解决的分歧,只是简单的将HEAD指针前移,所以这种合并过程可以称为快进(Fast forward),而如果是历史分支是分叉的,会以当前分叉的两个分支作为两个祖先,创建新的提交对象;如果在合并分支时,遇到合并冲突需要人工解决后,再才能提交;
11.在远程分支的基础上创建新的本地分支:git checkout -b <branch-name> <remote-name>/<branch-name>,如git checkout -b serverfix origin/serverfix;
12.从远程分支checkout出来的本地分支,称之为跟踪分支。在跟踪分支上向远程分支上推送内容:git push。该命令会自动判断应该向远程仓库中的哪个分支推送数据;在跟踪分支上合并远程分支:git pull;
13.将一个分支里提交的改变移到基底分支上重放一遍:git rebase <rebase-branch> <branch-name>,如git rebase master server,将特性分支server提交的改变在基底分支master上重演一遍;使用rebase操作最大的好处是像在单个分支上操作的,提交的修改历史也是一根线;如果想把基于一个特性分支上的另一个特性分支变基到其他分支上,可以使用--onto操作:git rebase --onto <rebase-branch> <feature branch> <sub-feature-branch>,如git rebase --onto master server client;使用rebase操作应该遵循的原则是:一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行rebase操作;

忽略文件.gitignore

一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。如下例:

# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为 txt 的文件
doc/**/*.txt

查看历史命令

$ histroy
该命令可以按顺序查看你之前输入过的所有的git命令

完整创建一个仓库的流程

cd mall-client
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/onewj830/mall-client.git
git push -u origin master

最常用的Git命令

git init        \\初始化
git add .       \\添加到缓存区
git commit      \\提交到本地仓库
git push        \\复制到远端仓库
git clone <url> \\克隆库
git status      \\查看当前状态
history         \\查看历史命令
git branch <branch-name>    \\创建分支
git branch -d <branch-name> \\删除分支

结语

在学习中总结,也有很多不足的地方,总结不是很到位,望指出。

记得很早开始开始接触的时候,也是很懵,看着一堆英文的界面啥也不懂,虽然我看的懂部分英文解释说明,但是对这个系统的工作流程与工作方式是一知半解的,分布式版本控制系统我觉得有时候也像是区块链的思想,我感觉我很有动力去学这些东西,特别是写自己的博客,我觉得很开心,甚至再探索的时候时间不知不觉就来到了凌晨,我非要解决了眼下这个问题才肯休息……从入门到现在,一点心得就是,初学不需明白那些非常高深的理论知识,只要知道git是个版本控制器就行,知道怎么创建仓库,怎么利用别人的仓库的开源项目提升自己,和SVN的区别也不需特别的去理会,一边学习一边应用,效率才是最高的。使用过,才知道他是个什么,以前那些原理也就恍然大悟了,可以举一反三!即初学少研究,多实践,最后事倍功半!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git操作与仓库创建 的相关文章

随机推荐

  • linux-目录相关作用

    文章来自狂神老师的笔记 同时会有自己的体会 狂神老师课程的链接 https www bilibili com video BV187411y7hF from search seid 10463862828616102628 注意 linux
  • 基于SpringBoot的实习管理系统

    末尾获取源码 开发语言 Java Java开发工具 JDK1 8 后端框架 SpringBoot 前端 Vue HTML 数据库 MySQL5 7和Navicat管理工具结合 服务器 Tomcat8 5 开发软件 IDEA Eclipse
  • 一位技术主管的十年编程经验总结 .

    一位技术主管的十年编程经验总结 有天和朋友聊天 朋友是国内一家大型互联网企业的一位技术主管 朋友把他将近十年研发工作积累的心血总结成两点 这两点朋友刚一提出来我并没有马上明白 只是大约有这么一个概念 我还没达到朋友在技术领域的那种高度 不能
  • PAT乙级1041 考试座位号 (15 分)

    1041 考试座位号 15 分 一 问题描述 每个 PAT 考生在参加考试时都会被分配两个座位号 一个是试机座位 一个是考试座位 正常情况下 考生在入场时先得到试机座位号码 入座进入试机状态后 系统会显示该考生的考试座位号码 考试时考生需要
  • 机器学习:Jupyter Notebook中numpy的使用

    一 Jupyter Notebook的魔法命令 模块 方法 或者help 模块 方法 查看模块 方法的解释文档 1 run 机械学习中主要应用两个魔法命令 run timeit 魔法命令格式 命令 run 将模块引用并在Jupyter No
  • Java设计模式——备忘录模式

    文章目录 备忘录模式 备忘录模式 主要目的是保存一个对象的某个状态 以便在适当的时候恢复对象 个人觉得叫备份模式更形象些 通俗的讲下 假设有原始类A A中有各种属性 A可以决定需要备份的属性 备忘录类B是用来存储A的一些内部状态 类C呢 就
  • PyQt5 pyqtSignal: 自定义信号传入的参数方法

    PyQt5 pyqtSignal 自定义信号传入的参数方法 在PyQt5当中 用户是可以自定义信号与槽函数的 这里想讲的是如何在pyqtSignal中传入任何的参数 一般来说 我们会在pyqtSignal 中传入不同的参数 以便完成不同类之
  • 我去公司面试,人事经理面试没有过,我却把责任链模式学会了

    设计模式在开发当中是运用特别多的 设计模式就是参照我们日常生活特性 抽象出特性 从而某种实现达到具体要求 当然这当中一定是灵活转变 责任链正式拉开序幕 我去某某互联网公司去面试 好的方向的流程大致应该是 你上招聘软件投递简历 简历筛选通过
  • 查看电脑是否开启虚拟化

    第一步 win R快捷键输入cmd 第二步 输入systeminfo命令 即可查看电脑配置信息
  • 5.1 数组

    C 为基本的数据类型 整数 浮点数 字符型和布尔型 提供了内置的支持 就像在上一章我们为复数类定义了重载的运算符那样 内置的支持也称为协助函数 helper function 支持这些数据类型完成各种允许的运算 也就是说基本数据类型也可以说
  • 【华为OD机试真题2023B卷 JAVA&JS】计算最接近的数

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 计算最接近的数 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 给定一个数组X和正整数K 请找出使表达式X i X i 1 X i K 1 结果最接近于数组中位数的下标
  • Modbus协议详解2:通信方式、地址规则、主从机通信状态

    首先我们要清楚 Modbus是一种串行链路上的主从协议 在通信线路上只能有一个主机存在 不会有多主机存在的情况 虽然主机只有一个 但是从机是可以有多个的 Modbus的通信过程都是由主机发起的 从机在接收到主机的请求后再进行响应 从机不会主
  • 30个 BeageBone 嵌入式项目

    特点 展示了如何使用 BeagleBone Black 编程和构建有趣且引人入胜的项目 学习如何将 BeagleBone Black 连接到您的计算机并对其进行编程 快速掌握 BoneScript 和其他编程工具 30 个 BeagleBo
  • 2023网站seo过时了吗?

    不完全是 虽然SEO过去的一些策略可能已经不再有效 但SEO本身并没有过时 实际上 随着搜索引擎算法的不断发展和用户对搜索结果质量的不断提高 合法 道德以及有效的SEO策略依然能够帮助网站获得搜索引擎排名并吸引大量有针对性的流量 尽管SEO
  • 接收I/O请求完成通知

    那片土在蓝天上 燃烧的翅膀 Windows via C C 学习笔记 设备I O之 接收I O请求完成通知 上一篇 讨论了如何发送I O请求 在异步的设备I O请求方式下 要考虑的问题就是当I O请求完成之后 驱动程序如何通知你的应用程序
  • Docker入门——简单记录

    Docker Docker是一个虚拟环境 某种意义上说它就是一个带有终端命令行的虚拟机 狭义上解释 Docker是一个容器 在这个容器里 Docker中的镜像不再是静态不可操作的 可以对安装的系统镜像进行软件下载 比如gcc g 之类 只不
  • 【自然语言处理

    Transformer由论文 Attention is All You Need 提出 论文地址为 https arxiv org pdf 1706 03762 pdf 文章目录 一 Transformer 整体结构 二 Transform
  • win32原生API实现OpenGL例子(无glew,glut等第三方依赖库)

    正文 话不多说 直接上代码 include
  • 【java面试常见4】

    文章目录 1 面向对象的特征有哪些方面 2 作用域public private protected 以及不写时的区别 3 String 是最基本的数据类型吗 4 float 型float f 3 4是否正确 5 short s1 1 s1
  • Git操作与仓库创建

    Git简介 首先了解一个概念 版本控制 简单来说就是如果你做文案工作 每次提交之后 你的领导会让你修改 一篇稿子可能修改十几次 但是最后定稿的很可能不是最新修改的那一稿 所以就需要有个版本控制的方法 可以回溯到你所修改的任何一版 并且可以拿