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.rhkb.cn/news/174436.html

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

相关文章

计算机网络_04_传输层

文章目录 1.什么是传输层2.传输层提供了什么服务3.传输层协议TCP 1.什么是传输层 传输层是OSI七层体系架构中的第四层, TCP/IP四层体系架构中的第二层, 从通信和信息处理两方面来看&#xff0c;“传输层”既是面向通信部分的最高层&#xff0c;与下面的三层一起共同构建进行网…

飞利浦双串口51单片机485网关

主要功能将PC端的数据接收下来&#xff0c;分发到不同的设备&#xff0c;也是轮询设备数据读取回来&#xff0c;打包回传到PC端&#xff0c;数据包包头包尾识别&#xff0c;数据校验&#xff0c;接收超时处理&#xff0c;将协议结构化处理&#xff0c;协议的改动不需要改动程序…

【数据结构】Map和Set

Map和Set 1. 搜索树 1.1 概念 二叉搜索树是左子树比根节点小&#xff0c;右子树比根节点大的二叉树。&#xff08;如果左右子树不为空的话是这样&#xff0c;但是左右子树也可以为空&#xff09; 1.2 操作——查找 查找的思想与二分查找类似。 如果根节点的值和所要查找的…

前端知识与基础应用

前端知识 什么是前端&#xff1a;所有和用户打交道的操作页面&#xff0c;我们都称之为前端 例如&#xff1a;pc页面&#xff0c;浏览器的主页面&#xff0c;手机页面等等&#xff0c;可以用肉眼看到的就是前端 什么是后端&#xff1a; 就是一堆代码&#xff0c;用户不能够直接…

Kitex踩坑 [Error] KITEX: processing request error,i/o timeout

报错问题 2023/010/28 17:20:10.250768 default_server_handler.go:234: [Error] KITEX: processing request error, remoteService, remoteAddr127.0.0.1:65425, errordefault codec read failed: read tcp 127.0.0.1:8888->127.0.0.1:65425: i/o timeout 分析原因 Hert…

内置视图联动查看器,实现数据关联分析

前言 在数据驱动业务发展的今天&#xff0c;数据的关联分析变得越来越重要。作为一种强大的数据挖掘工具&#xff0c;它可以帮助企业发现数据之间的关联和模式&#xff0c;从而更好地理解市场和客户的行为。通过关联分析&#xff0c;企业可以发现看似无关的数据之间的联系&…

假如我有一台服务器,我会让它提供三种服务

一、提供照片上传、存储和下载服务 随着移动互联网时代的持续快速发展&#xff0c;PC互联网日益势微&#xff0c;各大互联网门户网站的博客、空间也跟着凋零&#xff0c; 作为博客、空间的标配功能的相册也随之被关闭。 2019年3月6日网易相册发布停运公告并于当年5月8日正式停…

在线主动学习算法评估策略:prequential evaluation procedure

在线主动学习算法评估策略&#xff1a;prequential evaluation procedure 在在线主动学习领域(Online Active Learning)&#xff0c;对在线主动学习算法的评估策略有多种方法&#xff0c;而现如今常用的方法是prequential evaluation procedure(出自论文《High density-focuse…

SpringBoot 源码分析(四) 内置Tomcat分析

一、Tomcat相关知识 1. tomcat目录结构 Tomcat文件的目录结构 2.启动流程 启动一个Tomcat服务是执行的bin目录下的脚本程序&#xff0c;startup.bat和 startup.sh.一个是windows的脚本&#xff0c;一个是Linux下的脚本&#xff0c;同样还可以看到两个停止的脚本 shutdown.ba…

Java入门与实践

Java基础 Java入门 idea的使用 idea快捷键 crtlaltt 对选中的代码弹出环绕选项弹出层 问题描述&#xff1a;idea光标变小黑块 解决&#xff1a;误触Insert键&#xff0c;再次按Insert键即可 java基础语法 注释 //单行注释/* 多行注释 *//** 文档注释&#xff0c;可提取到…

车载网关产品解析(附:车载网关详细应用案例及部署流程)

5G车载网关是一款功能强大的工业级无线通讯设备。它集成了4G/5G双模网络模块、M12接口设计、强大的路由和安全功能等特性,可以为车载和移动应用提供稳定可靠的无线数据连接。 链接直达&#xff1a;https://www.key-iot.com/iotlist/sv900.html ### 产品特性 5G车载网关最大的…

【多线程】线程互斥 {多执行流并发执行的数据竞争问题,互斥锁的基本用法,pthread_mutex系列函数,互斥锁的原理;死锁;可重入函数和线程安全}

一、进程线程间通信的相关概念 临界资源&#xff1a;多线程执行流共享的资源就叫做临界资源。确切的说&#xff0c;临界资源在同一时刻只能被一个执行流访问。临界区&#xff1a;每个线程内部&#xff0c;访问临界资源的代码&#xff0c;就叫做临界区。互斥&#xff1a;通过互…

计算机网络基础三

课程目标 理解路由表的作用 能够读懂路由表信息 能够使用图形抓包工具 wireshark 进行数据包的抓取 &#xff0c;如&#xff08; TCP/IP 的三次握手四次断开&#xff09; 一、路由表 思考&#xff1a; 什么是交换,什么是路由,什么是路由表&#xff1f;1. 交换是指同网络访…

Linux C语言开发-D15一维数组

数组&#xff1a;有一定顺序关系的数据类型相同变量的变量集合 形式&#xff1a;<存储类型> <数据类型> <数组名> [<表达式>] 数组名表示内存首地址&#xff0c;是一个地址常量&#xff0c;sizeof(数组名)是数组占用的总内存空间 编译时分配连续内存…

常见的22个软件测试面试题(含答案解析)

大家好&#xff0c;我是大圣。今天大圣给大家列举了API测试的22个面试题&#xff0c;快来看看吧。 1、什么是API? API是允许两个应用程序相互通信的代码。API使开发人员能够发出特定的调用或请求来发送或接收信息。 2、什么是以API为中心的应用程序? 以API为中心的应用程…

重置 VCSA 6.7 root密码和SSO密码

原贴地址&#xff1a;https://www.cnblogs.com/airoot/p/16059033.html 问题描述 1、用root用户登录 VMware vCenter Server Appliance虚拟机失败&#xff0c;无法登录 2、vCenter Server Appliance 6.7 U1的root帐户错误尝试次数超过3次已锁定或帐户已过期 官方说明 在VC…

帆软同时查看多个tab会卡换种方式用网页跳转就会提升效率

效果如图&#xff1a; 方法&#xff1a; 首先&#xff0c;要下载个插件–网页框控件&#xff1b; 接着&#xff0c;做个frm作为首页&#xff0c; 把地址和参数输入进去 最后&#xff0c;预览首页就可以了

【软件教程】如何用C++检查TCP或UDP端口是否被占用

一、检查步骤 使用socket函数创建socket_fd套接字。使用sockaddr_in结构体配置协议和端口号。使用bind函数尝试与端口进行绑定&#xff0c;成功返回0表示未被占用&#xff0c;失败返回-1表示已被占用。 二、CODE 其中port需要修改为想要检测的端口号&#xff0c;也可以将代码…

检测和缓解SQL注入攻击

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严&#xff0c;攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句&#xff0c;在管理员不知情的情况下实现非法操作&#xff0c;以此来实现欺骗数据库服务器执行非授权的任意查询&#…

Jetpack Compose | State状态管理及界面刷新

我们知道Jetpack Compose&#xff08;以下简称Compose&#xff09;中的 UI 可组合项是通过Composable 声明的函数来描述的&#xff0c;如&#xff1a; Composable fun Greeting() {Text(text "init",color Color.Red,modifier Modifier.fillMaxWidth()) }上面的代…