Git基础命令实践

文章目录

  • 简介
  • git的安装配置
    • git的安装
    • git的配置
  • git使用的基本流程
    • 创建版本库
    • 时光机穿梭
      • 版本回退
      • 工作区和暂存区
      • 管理修改
      • 撤销修改
      • 删除文件
  • 远程仓库
    • 添加远程库
    • 从远程库克隆
  • 总结

简介

本文主要记录了我在学习git操作的过程,以及如何使用GitHub。建议先参考廖雪峰的git教程实操练习一遍,再利用Learning Git Branching进行巩固。下文内容是对廖雪峰git教程的实践

git的安装配置

git的安装

我们可以直接下载GitHub Desktop:https://desktop.github.com/,下载自带了git bash,我们无需重复安装git,GitHub Desktop提供了详细的新手指引,我们根据指引提交我们的项目。
在这里插入图片描述

也可以下载git:https://git-scm.com/
在这里插入图片描述

git的配置

注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

git使用的基本流程

创建版本库

mkdir learngit
cd learngit

通过git init命令把这个目录变成Git可以管理的仓库:

git init

window里面可能无法显示.git文件,我们可以设置显示隐藏的项目。
在这里插入图片描述
现在我们编写一个readme.txt文件,内容如下:

Git is a version control system.
Git is free software.

在这里插入图片描述
第一步,用命令git add告诉Git,把文件添加到仓库:

git add readme.txt

第二步,用命令git commit告诉Git,把文件提交到仓库:

git commit -m "wrote a readme file"

git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容)。
在这里插入图片描述

为什么Git添加文件需要addcommit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:
在这里插入图片描述
在这里插入图片描述
添加某个文件时,该文件必须在当前目录下存在,file4.txt文件不存在,因此报错。

时光机穿梭

版本回退

修改readme.txt文件如下

Git is a distributed version control system.
Git is free software distributed under the GPL.

然后进行提交:

git add readme.txt
git commit -m "append GPL"

在Git中,我们用git log命令查看历史记录:

git log

在这里插入图片描述

git log命令显示从最近到最远的提交日志,我们可以看到3次提交。

如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

git log --pretty=oneline

在这里插入图片描述
你看到的一大串类似59a9fdd...的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号可能发生冲突。

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交599fdd...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上1000个版本写1000个^比较容易数不过来,所以写成HEAD~1000。

可以使用git reset命令进行版本回退:

git reset --hard HEAD^^

在这里插入图片描述
我们发现回退到了未修改readme.txt的那个版本。
在这里插入图片描述
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针。

那我们如何对版本进行恢复呢?这里有两种方法:

  • 情形一:直接利用commit id指定回到未来某个版本
    在这里插入图片描述
  • 情形二:当我们不知道commit id时,Git提供了一个命令git reflog用来记录你的每一次命令,下面例子我们可以看出指针上一次指向59a9fdd
    在这里插入图片描述

工作区和暂存区

工作区(Working Directory)
就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区:
在这里插入图片描述
版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD
在这里插入图片描述
Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

下面举一个例子:

  1. 先对readme.txt做个修改,比如加上一行内容:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.

在这里插入图片描述
2. 在工作区新增一个LICENSE文本文件
在这里插入图片描述
git status查看状态
在这里插入图片描述
使用两次命令git add,把readme.txtLICENSE都添加

git add readme.txt
git add LICENSE.txt
git status

在这里插入图片描述
现在,暂存区的状态就变成这样了:
在这里插入图片描述
执行git commit就可以一次性把暂存区的所有修改提交到分支

git commit -m "understand how stage works"
git status

在这里插入图片描述
现在版本库变成了这样,暂存区就没有任何内容了:
在这里插入图片描述

管理修改

Git跟踪并管理的是修改,而非文件。

现在我们加上一行内容:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes.

在这里插入图片描述

git add readme.txt
git status

在这里插入图片描述

然后再修改readme.txt文件:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.

最后直接进行提交:

git commit -m "git tracks changes"
git status

在这里插入图片描述

我们发现第二次的修改没有被提交,这是因为第二次的修改没有通过git add放入缓存区,我们可以通过git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别:

git diff HEAD -- readme.txt 

在这里插入图片描述

可见第二次修改没有被提交,我们可以git add后进行git commit进行提交。
在这里插入图片描述

撤销修改

情形一:还未git add

Git is a distributed version control system.

Git is free software distributed under the GPL.

Git has a mutable index called stage.

Git tracks changes of files.

My stupid boss still prefers SVN.

在这里插入图片描述
使用git status查看一下,Git会告诉你,git restore可以丢弃工作区的修改:

git restore readme.txt

在这里插入图片描述

在这里插入图片描述
情形二:已经git add到暂存区

在这里插入图片描述

git restore --staged readme.txt #暂存区回退
git restore readme.txt #工作区回退

在这里插入图片描述
在这里插入图片描述
情形三:已经git commit,还没有推送到远程库中
在这里插入图片描述

git add readme.txt
git commit -m "fallback version"

在这里插入图片描述

git reflog
git reset --hard 389d734

在这里插入图片描述
在这里插入图片描述

删除文件

在这里插入图片描述
情况一:直接删除
这里删除file1.txt文件
在这里插入图片描述
情况二:删错了,利用版本库对工作区文件进行还原。
这里删除file2.txt文件
在这里插入图片描述
在这里插入图片描述
最后我们发下file1.txt文件被删除了,file2.txt文件还原了。

注意:从来没有被添加到版本库就被删除的文件,是无法恢复的!

远程仓库

添加远程库

在这里插入图片描述
在这里插入图片描述

git remote add origin https://github.com/liuxu-manifold/learngit.git

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

git push -u origin master

在这里插入图片描述

推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样:
在这里插入图片描述
删除与远程库的关联
如果添加的时候地址写错了,或者就是想删除远程库,可以用git remote rm <name>命令。使用前,建议先用git remote -v查看远程库信息:

git remote -v
git remote rm origin

在这里插入图片描述
此处的“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库。远程库本身并没有任何改动。要真正删除远程库,需要登录到GitHub,在后台页面找到删除按钮再删除。

从远程库克隆

如何解决 git@github.com permission denied (publickey). fatal could not read from remote repository
:https://zhuanlan.zhihu.com/p/454666519

git clone git@github.com:liuxu-manifold/liuxu-manifold.git

总结

本文记录了我在学习git过程中的一些常用命令,当我们对git有一个整体而全面的认识之后,我们后面可以通过查文档,或者GPT来完成任务。

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

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

相关文章

测试环境内存溢出排查过程

基本信息 客户名称&#xff1a;xxx 产品名称&#xff1a; 版本号&#xff1a; 问题分类&#xff1a;编码问题 环境类型&#xff1a;实体机 问题现象 保险公司测试环境爆内存&#xff0c;机器挂掉。总共64g的内存&#xff0c;在没有开始测试tomcat部署war包前内存使用率为25%左…

提升管理文件效率:批量删除文件名中的特殊符号

在文件管理的过程中&#xff0c;我们经常会遇到文件名中包含特殊符号的情况&#xff0c;这些符号可能会干扰文件的正常运行&#xff0c;特别是在一些特定的软件或系统中。因此&#xff0c;为了提高文件管理的效率和文件的可读性、可操作性&#xff0c;我们需要对这些特殊符号进…

[BUUCTF NewStarCTF 2023 公开赛道] week4 crypto/pwn

再补完这个就基本上完了. crypto RSA Variation II Schmidt-Samoa密码系统看上去很像RSA,其中Npqq, 给的eN给了d from secret import flag from Crypto.Util.number import *p getPrime(1024) q getPrime(1024)N p*p*qd inverse(N, (p-1)*(q-1)//GCD(p-1, q-1))m bytes…

Web3 治理实践探讨:如何寻找多元化发展路径?

Web3 领域变革正崭露头角&#xff0c;而社区治理开始成为行业热议话题。Web3 项目如何探寻多元化建设的解困路径&#xff0c;究竟是治理模型的精进成为首要问题&#xff0c;还是吸纳更多资金与组织教育培训&#xff0c;让开发者成为项目建设的中坚力量&#xff1f;本期 TinTinW…

Panda3d 介绍

Panda3d 介绍 文章目录 Panda3d 介绍Panda3d 的安装Panda3d 的坐标系统介绍Panda3d 的运行Panda3d 加载一个熊猫父节点和子节点之间的关系 验证Panda3d 的坐标系统X 轴的平移Y 轴的平移Z 轴的平移X 轴的旋转Y 轴的旋转Z 轴的旋转 Panda3D是一个3D引擎:一个用于3D渲染和游戏开发…

Docker Consul概述及构建

Docker Consul概述及构建 一、Consul概述1.1、什么是Consul1.2、consul 容器服务更新与发现1.3、服务注册与发现的含义1.4、consul-template概述1.5、registrator的作用 二、consul部署2.1、环境配置2.2、在主节点上部署consul2.3 、配置容器服务自动加入nginx集群2.3.1、安装G…

IDEA 使用技巧

文章目录 语言支持简化编写 有问题&#xff0c;可暂时跳过 个人常用快捷键插件主题插件功能插件 碰到过的问题 除了一些在Linux上用vim开发的大佬&#xff0c;idea算是很友好的集成开发工具了&#xff0c;功能全面&#xff0c;使用也很广泛。 记录一下我的 IDEA 使用技巧&#…

OSPF综合实验

一、实验拓扑 二、实验需求 1、R4为ISP&#xff0c;其上只配置IP地址&#xff1b;R4与其他所直连设备间均使用公有IP&#xff1b; 2、R3-R5、R6、R7为MGRE环境&#xff0c;R3为中心站点&#xff1b; 3、整个OSPF环境IP基于172.16.0.0/16划分&#xff1b;除了R12有两个环回&a…

分类预测 | Matlab实现KOA-CNN-BiLSTM-selfAttention多特征分类预测(自注意力机制)

分类预测 | Matlab实现KOA-CNN-BiLSTM-selfAttention多特征分类预测&#xff08;自注意力机制&#xff09; 目录 分类预测 | Matlab实现KOA-CNN-BiLSTM-selfAttention多特征分类预测&#xff08;自注意力机制&#xff09;分类效果基本描述程序设计参考资料 分类效果 基本描述 1…

DVWA-SQL Injection SQL注入

概念 SQL注入&#xff0c;是指将特殊构造的恶意SQL语句插入Web表单的输入或页面请求的查询字符串中&#xff0c;从而欺骗后端Web服务器以执行该恶意SQL语句。 成功的 SQL 注入漏洞可以从数据库中读取敏感数据、修改数据库数据&#xff08;插入/更新/删除&#xff09;、对数据…

使用Gateway解决跨域问题时配置文件不生效的情况之一

首先html文件只有一个发送ajax请求 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&q…

21.12 Python 实现网站服务器

Web服务器本质上是一个提供Web服务的应用程序&#xff0c;运行在服务器上&#xff0c;用于处理HTTP请求和响应。它接收来自客户端&#xff08;通常是浏览器&#xff09;的HTTP请求&#xff0c;根据请求的URL、参数等信息生成HTTP响应&#xff0c;并将响应返回给客户端&#xff…

基于SpringBoot的在线笔记系统

技术介绍 &#x1f525;采用技术&#xff1a;SpringSpringMVCMyBatisJSPMaven &#x1f525;开发语言&#xff1a;Java &#x1f525;JDK版本&#xff1a;JDK1.8 &#x1f525;服务器&#xff1a;tomcat &#x1f525;数据库&#xff1a;mysql &#x1f525;数据库开发工具&…

C#开发DLL,CAPL调用(CAPL>> .NET DLL)

文章目录 展示说明新建类库工程C# 代码生成dllCAPL脚本调用dll,输出结果展示 ret为dll里函数返回的值。 说明 新建类库工程 在visual studio中建立。 C# 代码 using

合肥中科深谷嵌入式项目实战——人工智能与机械臂(三)

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 作者&#xff1a;爱吃饼干的小白鼠。Python领域优质创作者&#xff0c;2022年度博客新星top100入围&#xff0c;荣获多家平台专家称号。…

时序预测 | Matlab实现ARIMA-LSTM差分自回归移动差分自回归移动平均模型模型结合长短期记忆神经网络时间序列预测

时序预测 | Matlab实现ARIMA-LSTM差分自回归移动差分自回归移动平均模型模型结合长短期记忆神经网络时间序列预测 目录 时序预测 | Matlab实现ARIMA-LSTM差分自回归移动差分自回归移动平均模型模型结合长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果…

Ansible中常用模块

目录 一、Ansible实现管理的方式 二、Ad-Hoc执行方式中如何获得帮助 三、Ansible命令运行方式及常用参数 四、Ansible的基本颜色代表信 五、Ansible中的常用模块 1、command模块 2、shell模块、script模块 3、copy模块、fetch模块 4、file模块 5、archive模块、unarc…

springboot整合postgresql

使用docker安装postgres 简单起见&#xff0c;这里用docker来安装postgresql docker pull postgresdocker run --name postgres \-e POSTGRES_PASSWORD123456 \-p 5432:5432 \-v /usr/local/docker/postgresql/data:/var/lib/postgresql/data \-d postgrespostgres客户端 pg…

ARL灯塔安装与使用

ARL灯塔安装与使用 1. 系统要求2. ARL灯塔安装2.1. docker环境安装2.1.1. 更新yum包2.1.2. 卸载老版docker2.1.3. 安装docker所需要的依赖包2.1.4. 设置yum源2.1.5. 查看仓库中docker版本2.1.6. 安装docker最新版2.1.7. docker设置2.1.8. docker其它命令 2.2. 安装docker-compo…

处理大数据的基础架构,OLTP和OLAP的区别,数据库与Hadoop、Spark、Hive和Flink大数据技术

处理大数据的基础架构&#xff0c;OLTP和OLAP的区别&#xff0c;数据库与Hadoop、Spark、Hive和Flink大数据技术 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&am…