版本控制系统Git学习笔记-Git基础操作

news2024/12/30 2:26:08

文章目录

  • 概述
  • 一、获取仓库
    • 1.1 初始化仓库
    • 1.2 克隆仓库
  • 二、文件状态及更新操作
    • 2.1 文件状态变化周期
    • 2.2 检查文件状态
      • 2.2.1 完整查看状态
      • 2.2.2 简要查看状态
    • 2.3 跟踪新文件
    • 2.4 暂存已修改的文件
    • 2.5 忽略文件
      • 2.5.1 文件 .gitignore 的格式规范如下:
      • 2.5.2 glob模式格式
    • 2.6 查看已暂存和未暂存的修改
    • 2.7 提交更新
    • 2.8 移除文件
    • 2.9 移动文件
  • 三、查看提交历史
  • 四、撤销操作
    • 4.1 使用amend重新提交
    • 4.2 取消暂存
    • 4.3 撤销对文件的修改
  • 五、远程仓库的使用
    • 5.1 查看远程仓库
    • 5.2 添加远程仓库
    • 5.3 从远程仓库中抓取与拉取
    • 5.4 推送到远程仓库
    • 5.5 远程仓库的重命名与移除
      • 5.5.1 重命名
      • 5.5.2 移除
  • 六、打标签
    • 6.1 列出标签
    • 6.2 创建标签
      • 6.2.1 附注标签
      • 6.2.2 轻量标签
      • 6.2.3 后期补打标签
    • 6.3 共享标签
      • 6.3.1 共享单个标签
      • 6.3.2 共享所有标签
    • 6.4 删除标签
      • 6.4.1 删除本地标签
      • 6.4.2 删除远程标签
    • 6.5 Git别名

清香白莲素还真
半神半圣亦半仙,全儒全道是全贤,脑中真书藏万卷,掌握文武半边天。
网图,侵删!

概述

本文记录Git 完成各种工作时将会用到的各种基本命令。
包括配置并初始化一个仓库(repository)、开始或停止跟踪(track)文件、暂存(stage)或提交(commit)更改、忽略指定的文件和文件模式、撤销错误操作、浏览项目的历史版本以及不同提交(commits)之间的差异、如何向远程仓库推送(push)以及如何从你的远程仓库拉取(pull)文件等操作。

**注:**本次学习过程使用的是Windows系统。

一、获取仓库

Git有两种获取仓库的方法:

  1. 直接初始化一个尚未及逆行版本控制的本地目录文件夹作为Git仓库;
  2. 克隆一个已存在的Git仓库;

1.1 初始化仓库

初始化仓库需要保证文件夹是文件夹,然后进入文件夹之后执行“git init”指令。

git init

可以通过cd指令切换到指定文件夹之中。
初始化之后会创建.git的子目录。

示例:

C:\Users\LJM>cd D:\Desktops\Test
# 注意,跨磁盘的路径切换,需要先切换到指定的磁盘,才能正确切换到指定目录,这没有先切换磁盘,所以目录没有切换成功。
C:\Users\LJM>

C:\Users\LJM>D:		#切换磁盘,也可使用“cd D:”指令进行切换。
D:\Desktops\Test>

# 初始化仓库,若是要做远程仓库一般添加参数“--bare”创建空仓库,避免后续提交报错。
D:\Desktops\Test>git init
Initialized empty Git repository in D:/Desktops/Test/.git/

在这里插入图片描述

1.2 克隆仓库

Git可以使用git clone指令克隆整个远程项目库,每次拉去都是完整的拉去Git仓库中的所有文件。

git clone <url>		# 直接克隆仓库
git clone <url> NewName		# 克隆的时候之地那个本地仓库名字

示例1,直接克隆:

D:\Desktops>cd TestClone			# 进入要存放Git仓库的文件夹中

D:\Desktops\TestClone>git clone D:/Desktops/Test/.git/		# 这是1.1初始化的仓库,本地文件路径也是一个URL
Cloning into 'Test'...
warning: You appear to have cloned an empty repository.
done.

D:\Desktops\TestClone>

仓库直接克隆到新目录下:
在这里插入图片描述

示例2,克隆时自定义本地仓库名字:

D:\Desktops\TestClone>git clone D:/Desktops/Test/.git/ Test_New
Cloning into 'Test_New'...
warning: You appear to have cloned an empty repository.
done.

D:\Desktops\TestClone>

克隆下来的仓库以新的名字保存。
在这里插入图片描述

二、文件状态及更新操作

2.1 文件状态变化周期

Git工作目录下的文件有已跟踪未跟踪两种状态。已跟踪的文件有未修改,已修改,暂存三种状态。
在这里插入图片描述

  • 可以通过添加文件,将未跟踪的文件进行跟踪,刚添加的文件会保存再缓存区;
  • 通过提交将添加的文件提交到数据库,此时文件状态变为未修改;
  • 通过移除文件将文件从已跟踪状态改为未跟踪;
  • 通过编辑,未修改的文件将会变为已修改状态;
  • 将已修改的的文件暂存后会将状态改为暂存状态;
  • 将已修改的文件提交后,会直接将状态改为未修改;

2.2 检查文件状态

2.2.1 完整查看状态

使用status指令可以查看具体的文件状态,会将文件具体状态打印出来。
注: 使用指令时要先切换到Git仓库文件夹中才能正确识别;

示例1,非Git仓库提示错误:
提示当前目录不是一个git仓库。

C:\Users\LJM>git status
fatal: not a git repository (or any of the parent directories): .git

示例2, Git空仓库下查看状态:
提示当前是一个空仓库。

D:\Desktops\Test>git status
On branch master	# 当前分支

No commits yet		# 尚未由提交内容

nothing to commit (create/copy files and use "git add" to track)

示例3, Git空仓库下添加文件后查看状态:

D:\Desktops\Test>git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   TestAdd.txt		# 待提交的文件

Untracked files:		# 未跟踪的文件
  (use "git add <file>..." to include in what will be committed)
        TestFile.txt

2.2.2 简要查看状态

git status -s 
git status --short
  • ?? 标记:未跟踪文件;
  • A标记:新添加到暂存区中的文件;
  • M标记:修改过的文件;

示例:

D:\Desktops\Test>git status -s
AM Test1.txt	# 文件添加后又修改了,尚未提交到暂存区。
A  Test2.txt
?? TestAdd.txt
?? TestFile.txt

2.3 跟踪新文件

git add filename1 filename2 ...		# 添加新的文件进行跟踪
D:\Desktops\Test>git add Test1 Test2
fatal: pathspec 'Test1' did not match any files

D:\Desktops\Test>git add Test1.txt Test2.txt	# 同时添加多个文件

D:\Desktops\Test>git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   Test1.txt
        new file:   Test2.txt
        new file:   TestAdd.txt
        new file:   TestFile.txt

2.4 暂存已修改的文件

git add filename1 filename2 ...		# 重新添加已跟踪的文件可以将修改的内容重新添加到暂存区,后续提交的时候一起提交。

示例:

D:\Desktops\Test>git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   Test1.txt		# 这是add之后暂存的版本
        new file:   Test2.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   Test1.txt	# 修改之后重新查看状态,多了一个修改的状态,此时尚未暂存。

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        TestAdd.txt
        TestFile.txt

D:\Desktops\Test>git add Test1.txt		# 重新暂存

D:\Desktops\Test>git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   Test1.txt
        new file:   Test2.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        TestAdd.txt
        TestFile.txt

2.5 忽略文件

通过添加“.gitignore”,可以列出忽略的文件列表。

2.5.1 文件 .gitignore 的格式规范如下:

  • 所有空行或者以 # 开头的行都会被 Git 忽略。
  • 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
  • 匹配模式可以以(/)开头防止递归。
  • 匹配模式可以以(/)结尾指定目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。

2.5.2 glob模式格式

glob 模式是指 shell 所使用的简化了的正则表达式:

  • 星号(*)匹配零个或多个任意字符;
  • [abc] 匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
  • 问号(?)只匹配一个任意字符;
  • 如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
  • 使用两个星号(**)表示匹配任意中间目录,比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等。

示例:

# 忽略所有的 .a 文件
*.a

# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a

# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO

# 忽略任何目录下名为 build 的文件夹
build/

# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt

# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf

2.6 查看已暂存和未暂存的修改

git diff	# 是工作目录中当前文件和暂存区域快照之间的差异。 也就是修改之后还没有暂存起来的变化内容。
git diff --staged	# 比对已暂存文件与最后一次提交的文件差异。
git diff --cached 	# 查看已经暂存起来的变化

2.7 提交更新

使用commit指令进行提交。

git commit	# 直接提交,会弹出编辑器输入备注
git commit -m "message"		# 使用-m参数,可以将命令和提交信息放在同一行提交。
git commit -a -m "message"	# 使用-a参数,可以不用将文件添加到暂存区,直接将所有已跟踪的文件暂存起来一起提交。

2.8 移除文件

使用rm指令进行移除。

git rm filename 		# 移除指定文件,后续不再跟踪。
git rm --cached filename	# 不再跟踪,但是保留本地文件。

注:

  • –cached指令用于移除跟踪,但是保存本地文件,这个指令对误添加的文件要移除的操作非常有用;
  • 命令后面可以列出文件或者目录的名字,也可以使用 glob 模式。

示例:

git rm log/\*.log		# 删除 log/ 目录下扩展名为 .log 的所有文件
git rm \*~				# 删除所有名字以 ~ 结尾的文件

2.9 移动文件

使用mv指令移动文件

git mv file_from file_to

三、查看提交历史

git log			# 查看更新日志
git log -p -n	# -p或者--patch 显示每次提交引入的差异(以补丁格式输出),-n 只显示最近的n次提交
git log --stat	# 每次提交的简略统计信息

git log 的常用选项:

选项说明
-p按补丁格式显示每个提交引入的差异。
–stat显示每次提交的文件修改统计信息。
–shortstat只显示 --stat 中最后的行数修改添加移除统计。
–name-only仅在提交信息后显示已修改的文件清单。
–name-status显示新增、修改、删除的文件清单。
–abbrev-commit仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。
–relative-date使用较短的相对时间而不是完整格式显示日期(比如“2 weeks ago”)。
–graph在日志旁以 ASCII 图形显示分支与合并历史。
–pretty使用其他格式显示历史提交信息。可用的选项包括 oneline、short、full、fuller 和 format(用来定义自己的格式)。
–oneline–pretty=oneline --abbrev-commit 合用的简写。
-<n>仅显示最近的 n 条提交。
–since, --after仅显示指定时间之后的提交。
–until, --before仅显示指定时间之前的提交。
–author仅显示作者匹配指定字符串的提交。
–committer仅显示提交者匹配指定字符串的提交。
–grep仅显示提交说明中包含指定字符串的提交。
-S仅显示添加或删除内容匹配指定字符串的提交。

四、撤销操作

4.1 使用amend重新提交

git commit --amend

有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。可以运行带有 --amend 选项的提交命令来重新提交。

4.2 取消暂存

此操作会将取消文件的暂存,可能存在将已修改的文件撤销掉的风险。

git reset HEAD <file>		# 取消暂存

4.3 撤销对文件的修改

使用checkout – 指令可以撤销文件的修改。

git checkout -- <file>

五、远程仓库的使用

远程仓库是指托管在因特网或其他网络中的你的项目的版本库。 你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以读写。
通俗的说远程仓库就是不在当前仓库位置,而在其他位置的仓库。

5.1 查看远程仓库

git remote			# 列出远程服务器的简写名称
git remote -v		# 显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL
git remote show <remote>  		# 查看某一个指定的仓库的信息。

5.2 添加远程仓库

添加一个新的远程 Git 仓库,同时指定一个简写名称:

git remote add <shortname> <url> 

5.3 从远程仓库中抓取与拉取

git fetch <remote>		# 拉取已更新的内容,但是不会主动合并
git pull <remote>		# 自动抓取后合并该远程分支到当前分支

5.4 推送到远程仓库

git push <remote> <branch>
  • remote:远程仓库服务器;
  • branch:分支名字

示例:

git push origin master		# 将 master 分支推送到 origin 服务器

5.5 远程仓库的重命名与移除

5.5.1 重命名

git remote rename old new

此操作会修改所有远程跟踪的分支名字,如过去引用 old/master 的现在会引用 new/master。

5.5.2 移除

git remote remove
git remote rm

注: 使用这种方式删除了一个远程仓库,所有和这个远程仓库相关的远程跟踪分支以及配置信息也会一起被删除。

六、打标签

6.1 列出标签

git tag
git tag -l "v1.0.0*" 	# 使用-l和--list匹配满足V1.8.5相关的标签。

注: 默认使用的是列出所有标签,但是当使用-l或者–list 匹配过一次之后,就会默认使用-l和–list匹配。

6.2 创建标签

6.2.1 附注标签

git tag -a v1.4 -m "version 1.4"

可以使用git show v1.4查看具体的标签和对应的提交信息。

6.2.2 轻量标签

轻量标签不需要参数,直接添加即可。

git tag tagname

轻量标签,使用show查看时只会显示出提交信息,没有额外的标签信息。

6.2.3 后期补打标签

git tag -a v1.1(标签) 9fceb02(要打标签版本的校验和)

6.3 共享标签

6.3.1 共享单个标签

git push origin <tagname>		# 推送标签到远程仓库

6.3.2 共享所有标签

使用–tags参数推送时直接推送标签。

git push origin(服务器名字) --tags

推送标签时,两种标签都会推送。

6.4 删除标签

6.4.1 删除本地标签

使用-d直接删除本地标签。

git tag -d <tagname>

6.4.2 删除远程标签

git push <remote> :refs/tags/<tagname> 		# 使用:前的空值替换远程仓库的标签明,进行删除
git push <remote> --delete <tagname>		# 直接删除标签名

6.5 Git别名

通过config可以设置git指令的别名,操作比较多之后,可以提高操作的简便性。

git config --global alias.<shortname> command	
  • : 指令简写
  • command:具体的指令

示例

git config --global alias.unstage 'reset HEAD --'

# 设置之后以下两条指令一致,都是取消暂存。
git unstage fileA
git reset HEAD -- fileA

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

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

相关文章

ethtool工具添加并验证网口

Filesystem Packages->console->network->ethtool 命令描述&#xff1a; ethtool 是用于查询及设置网卡参数的命令。 使用命令&#xff1a; ethtool ethx //查询ethx网口基本设置&#xff0c;其中 x 是对应网卡的编号&#xff0c;如eth0、eth1等等 ethtool –…

docker 学习总结

docker 概念 -云计算的基石 docker的一个软件&#xff1a; 开源 docker基本组成 docker主机(Host)&#xff1a;安装了Docker程序的机器&#xff08;Docker直接安装在操作系统之上&#xff09;&#xff1b; docker仓库(Registry)&#xff1a;用来保存各种打包好的软件镜像&a…

玩转大数据:3-Hadoop家族的力量与挑战

引言 Hadoop作为一个强大的大数据处理框架&#xff0c;以其分布式计算和存储能力在业界备受关注。然而&#xff0c;Hadoop在应用场景、适用范围、社区支持以及后续持续发展等方面也面临着一些挑战。本文将围绕Hadoop的生态应用&#xff0c;以及来自其他生态的挑战&#xff0c;…

银河麒麟v10——植物大战僵尸原版——2023教程

1、原版安装包如下&#xff1a; 阿里云盘分享https://www.alipan.com/s/Qn5DpDKs2YT 2、麒麟信息&#xff1a; 3、安装命令&#xff1a; 注意&#xff1a;最后一步&#xff0c;需要先解压tar包&#xff0c;再切到PlantsVsZombies.exe所在目录下&#xff0c;再执行启动命令&a…

软件测试jmeter基本使用

1安装与配置 1.jdk下载 下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#jdk18-windows&#xff08;压缩包中会给&#xff09; 2.jmeter下载 Apache JMeter - Download Apache JMeter&#xff08;压缩包中有&#xff09; 3.操作教学 打开软件后新…

前端:实现div的隐藏与显示

效果 完整代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-widt…

快速排序算法的代码及算法思想

快速排序&#xff08;Quick Sort&#xff09;是一种常用的排序算法&#xff0c;他的时间复杂度为O(nlogn) 算法思想: 通过一趟排序将待排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据都比另一部分的所有数据小&#xff0c;然后再对这两部分数据分别进行快速排…

juniper EX系列交换机 CLI命令行操作模式

JUNOS有两种模式&#xff1a;操作模式和配置模式。 1&#xff0c;操作模式 监控和排错 软件&#xff0c;网络连接、路由器硬件。 2&#xff0c;配置模式 testlab2> 配置路由器包括&#xff1a;interface、路由信息、路由协议、用户访问、系统硬件参数。 testlab2> …

音视频开发:音频fdk-aac编码

编码的大概流程见下图 1.获取编码器: avcodec_find_encoder_by_name("libfdk_aac") 2.检查PCM格式是否被编码器支持 3.创建编码上下文: AVCodecContext *ctx avcodec_alloc_context3(codec) 4.给上下文设置参数 5.打开编码器: avcodec_open2 6.创建AVFrame: a…

NoSQL 数据建模错误会降低性能

数据建模错误是破坏性能的最简单方法之一。当您使用 NoSQL 时&#xff0c;特别容易搞砸&#xff0c;&#xff08;讽刺的是&#xff09;NoSQL 往往用于对性能最敏感的工作负载。NoSQL 数据建模最初可能看起来非常简单&#xff1a;只需对数据进行建模以适应应用程序的访问模式。但…

SAP 如何检查已安装的SAP UI5 版本

第一个方法是直接从FLP中查看 但是部分高版本的FLP中没有这个about&#xff0c; 那么在当前界面可以使用&#xff1a;CTRL ALT SHIFT S 查看当前版本 根据此版本&#xff0c;去进行你的UI5的开发吧

字符串函数-C语言

介绍 字符串函数&#xff0c;简单说&#xff0c;就是处理字符串的函数&#xff0c;头文件是string.h&#xff0c;以下是今天的讲解中会讲到的一系列字符串函数 头文件&#xff1a;#include<string.h>strlen&#xff1a;求字符串长度strcpy&#xff1a;拷贝字符串strcat&…

物联网实训室虚拟仿真软件建设方案

一、概述 物联网实训室虚拟仿真软件旨在紧密围绕立德树人的根本任务&#xff0c;充分依托先进的数字技术&#xff0c;并对接物联网行业的发展趋势和人才需求。通过对比真实企业工作环境&#xff0c;融合创新创业教育基因&#xff0c;秉承虚拟仿真技术与教育教学深度融合的理念&…

艺海泛舟——尹星从艺六十年作品展暨学术交流首展作品(二)

简历&#xff1a; 1944年1月25日出生于山西省阳高县&#xff0c;内蒙古师范学院艺术系美术专业&#xff0c;师从水彩之父李剑晨&#xff0c;北京京华美术学院创立者邱石冥&#xff0c;徐坚。与吴冠中&#xff0c;朱德群&#xff0c;赵无极&#xff0c;杨飞云是同门。擅长&…

解决CentOS下PHP system命令unoconv转PDF提示“Unable to connect or start own listener“

centos系统下&#xff0c;用php的system命令unoconv把word转pdf时提示Unable to connect or start own listene的解决办法 unoconv -o /foo/bar/public_html/upload/ -f pdf /foo/bar/public_html/upload/test.docx 2>&1 上面这个命令在shell 终端能执行成功&#xff0c…

优测云服务平台- 探索性测试策略分享

版权声明&#xff1a;本文作者 优测团队测试专家 郑凯泽 南明玮。 探索性测试是对常规的系统测试、新需求测试及专项测试的重要补充&#xff0c;往往能在短时间内发现更多的问题&#xff0c;一起来看看优测测试专家的分享吧~ 一、背景 优测团队长期承接腾讯社交产品、办公产…

​在做接口测试的时候,如果接口还没有开发好,你这边应该怎么去介入测试?

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

机械臂仿真之vrep如添加视觉传感器

基于视觉的机械臂作业任务&#xff0c;如何在vrep中加入视觉传感器&#xff0c;并获取画面&#xff1f;

【elementUI】el-tab相关问题

Tabs 标签页 分隔内容上有关联但属于不同类别的数据集合。 <template><el-tabs v-model"activeName" tab-click"handleClick"><el-tab-pane label"用户管理" name"first">用户管理</el-tab-pane><el-tab-p…

什么是云安全?如何制定云安全战略

云计算允许组织通过互联网按需向其客户、合作伙伴或员工提供关键业务应用程序、服务和资源&#xff0c;换句话说&#xff0c;不再需要物理维护资源&#xff0c;每当通过 Internet 从计算机访问文件或服务时&#xff0c;都是在访问云。 迁移到云可以帮助企业增强安全性、简化运…