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

文章目录

  • 概述
  • 一、获取仓库
    • 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 filesD:\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.txtnew file:   Test2.txtnew file:   TestAdd.txtnew 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.txtChanges 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.txtTestFile.txtD:\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.txtnew file:   Test2.txtUntracked files:(use "git add <file>..." to include in what will be committed)TestAdd.txtTestFile.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.mzph.cn/news/185044.shtml

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

相关文章

持续增长的背后,艾比森用泛微-千里聆RPA机器人为业务加速

&#xff08;艾比森全球总部&#xff09; 艾比森集团始创于2001年&#xff0c;是全球知名的至真LED显示应用与服务提供商。目前旗下设有深圳总部&#xff0c;艾比森东江智造中心&#xff0c;以及艾比森美国、德国、日本、迪拜、俄罗斯、墨西哥、巴西、中国香港等18家海内外公司…

Web应用渗透测试完全指南(二)

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

leetcode刷题详解十四

39. 组合总和 vector<vector<int>> res; vector<int> temp; vector<vector<int>> combinationSum(vector<int>& candidates, int target) {back_tracing(candidates, 0, 0, target);return res; }void back_tracing(vector<int>…

如何使用Windows自带的IIS服务搭建本地站点并远程访问

文章目录 1.前言2.Windows网页设置2.1 Windows IIS功能设置2.2 IIS网页访问测试 3. Cpolar内网穿透3.1 下载安装Cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5.结语 1.前言 在网上各种教程和介绍中&#xff0c;搭建网页都会借助各种软件的帮助&#xf…

5款最佳替代Sketch软件,第一款简直令人叹为观止!

Sketch是Mac平台上专门为用户界面设计的矢量图形绘制工具。Sketch简单的界面背后有优秀的矢量绘图能力和丰富的插件库。但遗憾的是&#xff0c;Sketch只能在Mac平台上使用和浏览&#xff0c;是本地化工具&#xff0c;云共享功能并不完善。本文盘点了5个Sketch替代软件&#xff…

MAVEN冲突解决

MAVEN冲突解决 1.安装下面这个插件 2.安装成功点击pom文件 dependency analyzer标志&#xff0c;说明maven helper插件就安装成功 3.点击dependency analyzer之后就会进入到下面的页面 4.标记红色就是版本冲突&#xff0c;右击complie&#xff0c;排除不是使用的 5.POM 文件…

基于深度学习的表情动作单元识别综述

论文标题&#xff1a;基于深度学习的表情动作单元识别综述 作者&#xff1a;邵志文1&#xff0c;2&#xff0c;周 勇1&#xff0c;2&#xff0c;谭 鑫3&#xff0c;马利庄3&#xff0c;4&#xff0c;刘 兵1&#xff0c;2&#xff0c;姚 睿1&#xff0c;2 发表日期&#xff1a…

RabbitMQ的Web管理页面

访问页面 http://IP:15672/账号密码默认都是&#xff1a;guest 主页概览 Overview 显示当前RabbitMQ Broker的运行信息、连接信息、集群信息以及配置信息等。 连接 Connections 无论生产者还是消费者&#xff0c;都需要与RabbitMQ建立连接后才可以完成消息的生产和消费&#…

【正点原子STM32连载】 第六十一章 USB读卡器(Slave)实验摘自【正点原子】APM32F407最小系统板使用指南

1&#xff09;实验平台&#xff1a;正点原子APM32F407最小系统板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html## 第六十…

Electronica慕尼黑电子展 Samtec团队与21ic分享虎家产品与方案

【摘要/前言】 “希望但凡是能够使用到连接器的场合都有Samtec的身影” 在慕尼黑上海电子展现场&#xff0c;Samtec华东区销售经理章桢彦先生在与21ic副主编刘岩轩老师的采访中&#xff0c;如是说道。这是一种愿景&#xff0c;更是Samtec的努力方向。短短一句话&#xff0c;…

notepad++ 插件JSONView安装

1&#xff0c;前提 开发过程中经常需要处理json格式语句&#xff0c;需要对json数据格式化处理&#xff0c;因为使用的是虚拟机内开发&#xff0c;所以没法连接外网&#xff0c;只能在本地电脑下载插件后&#xff0c;然后上传到虚拟机中&#xff0c;进行安装使用。 2&#xf…

1+x中级网络运维实验题

任务 1&#xff1a; 设备命名 为了方便后期维护和故障定位及网络的规范性&#xff0c;需要对网络设备进行规范化命名。请根据 Figure 3-1 实验考试拓扑对设备进行命名。命名规则为&#xff1a;城市-设备的设置地点-设备的功能属性和序号-设备型号。例如&#xff1a;处于杭州校…

@Autowired注解获取对象为null

问题再现 兄弟们&#xff0c;看见了吗&#xff1f;这里我Autowired进来的forkliftService 居然为null 且我SysForkliftServiceImpl上面是加了Service注解的 分析原因 主要原因就是因为该类继承了一个第三方框架SimpleChannelInboundHandler&#xff0c;在执行的过程中&#…

2023年【P气瓶充装】找解析及P气瓶充装复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 P气瓶充装找解析参考答案及P气瓶充装考试试题解析是安全生产模拟考试一点通题库老师及P气瓶充装操作证已考过的学员汇总&#xff0c;相对有效帮助P气瓶充装复审模拟考试学员顺利通过考试。 1、【多选题】CNG双燃料汽车…

【IEEE独立出版】2024第四届神经网络、信息与通信工程国际学术会议(NNICE 2024)

2024第四届神经网络、信息与通信工程国际学术会议&#xff08;NNICE 2024&#xff09; 2024 4th International Conference on Neural Networks, Information and Communication Engineering 2024第四神经网络、信息与通信工程国际学术会议&#xff08;NNICE 2024&#xff0…

电商API接口对于实现电商系统平台的搭建有哪些作用?

电商API接口用于实现电商平台的数据交互和功能调用。具体来说&#xff0c;电商API接口可以用于以下几个方面&#xff1a; 1. 商品管理&#xff1a;通过API接口&#xff0c;可以实现商品的添加、修改、删除、查询等操作。商家可以通过API接口将自己的商品信息上传到电商平台&…

三、Linux高级命令

目录 1、重定向命令 1.1 重定向 > 1.2 重定向 >> 该章节的所有操作都在/export/data/shell目录进行&#xff0c;请提前创建该目录。 mkdir -p /export/data/ 1、重定向命令 1.1 重定向 > Linux 允许将命令执行结果重定向到一个文件&#xff0c;本应显示在…

群晖NAS:docker(Container Manager)、npm安装Verdaccio并常见命令集合

群晖NAS&#xff1a;docker&#xff08;Container Manager&#xff09;、npm安装Verdaccio并常见命令集合 自建 npm 资源库&#xff0c;使用Verdaccio。如果觉得麻烦&#xff0c;直接可以在外网注册 https://www.npmjs.com/ 网站。大同小异&#xff0c;自己搭建搭建方便局域网…

虾皮、Lazada稳定的测评系统需要哪些技术要求

测评作为一项高效运营手段&#xff0c;具有显著的重要性。然而&#xff0c;对于卖家而言&#xff0c;自行建立一套测评系统所需的技术条件并非易事。 在构建系统之前&#xff0c;必须深入理解每个平台的控制风险机制&#xff0c;而后才能开展下一步的建设工作。 1.首先&#…

代币化:2024年的金融浪潮预示着什么?

自“TradFi”领袖到加密专家&#xff0c;各方预测代币化机会高达数十万亿。虽然已有引人注目的用例&#xff0c;但与未来几年可能在链上转移的大量数字化资产相比&#xff0c;这些仅是冰山一角。 代币化何时会变为洪流&#xff1f;什么阻碍了其发展&#xff1f; 今年10月&…