Git使用笔记

2023-10-31


在这里插入图片描述

前言

Git是一个免费的、开源的分布式版本控制系统,旨在以快速高效的方式处理从小型到大型的所有项目。

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

Git用了有些年了,但用到的功能不多,而且大多数时候都是在各种图形界面中进行操作的,总的来说虽然一直在用但对Git算不上了解,打算从头好好梳理下。

Git官网提供了丰富的教程: https://git-scm.com/book/zh/v2 。官网的教程比较全面,内容比较多,平时使用时当作字典查询来说并不方便。这边文章将对相关内容做个摘录或补充,方便自己查询使用。

使用笔记

软件安装

Windows
Windows上直接在下面地址下载安装包安装就行:
https://git-scm.com/downloads
安装时可以选择勾选在资源管理器集成(windows explorer integration)git bashgit gui,这样就可以在文件夹右击打开相应工具。

Debian/Ubuntu
Debian或Ubuntu中使用 sudo apt install git 命令来安装,安装完成后可以先设置下用户名和邮箱地址:

sudo apt install git-all

基础设置

安装完成后可以先设置下用户名和邮箱地址(可能需要以管理员身份运行):
在这里插入图片描述

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

上面带有 --global 的是全局设置,也可以在每个项目中不带该参数来对这个项目单独设置。

可以使用 git config --list 来查看当前的配置,也可以使用 git config 配置项 来查看单项的配置情况。

本地使用

在本地目录中可以 使用 git init 来初始化仓库 ,初始化完成后就会生成一个 .git 的隐藏目录。

本地使用来说git分为三个区域:
在这里插入图片描述
三区划分只是管理上一个抽象的概念,通常项目文件夹中除 .git 目录外的都属于工作区,剩下两区实际存储都是在 .git 目录中的。

本地使用中对三个区的基础操作如下:
在这里插入图片描述

使用 commit 提交到本地仓库中就是开发各个过程的归档了,每次提交时会生成一份快照并对此校验生成一串40位的字符串作为本次校验的编号。除了初次提交外每次提交时还会包含它的父提交的指针。

Git中有一个HEAD指针表示只向当前工作所在的某次提交。如果有需要就可以从仓库中 checkout 检出将工作区恢复成某次提交时的版本。检出操作会移动HEAD指针,然后恢复工作区。
在这里插入图片描述
Git中一次次的提交串成一条线,这被称为分支,分支有自己的名称和指向最后一次提交的指针,并且通常的时候HEAD指针其实是指向某条分支的。通常使用 git init 初始化仓库时就会有默认的分支master。

可以使用 git branch <branch-name> 来创建分支,然后使用 git checkout <branch-name> 来切换分支;或者也可以使用 git checkout -b <branch-name> 直接创建并切换到新分支。HEAD在哪里,提交时就只会从那里开始增长。
在这里插入图片描述
可以使用 git merge <branch-name> 将指定分支合并到当前分支,合并完成后没用的分支可以使用 git branch -d <branch-name> 进行删除。
在这里插入图片描述

远程交互

Git是一个分布式版本控制系统,项目仓库可以托管在一个公共的服务器上,方便团队合作开发或是异地开发。

远程交互使用时各个区的基本交互如下:
在这里插入图片描述
相比新项目使用 git init 来初始化仓库而言,很多时候基于已有的项目进行开发的情况可能更常见点,所以 使用 git clone <url> 方式克隆远程仓库到本地 是更加常用的方式。

使用 git clone <url> 通常情况下克隆的只有master分支,不包含远程仓库中其它分支。可以使用 git branch -a 来查看远程分支,然后可以使用命名检出该分支。当然更加常用的是使用 git clone -b <branch-name> <url> 直接克隆某个分支。

忽略文件

项目目录下的 .gitignore 文件用于描述不需要版本控制的文件的匹配规则。下面是个基本规则的示例:

# 忽略所有的 .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

对于很多项目该文件也有模板可供参考:
https://github.com/github/gitignore

提交信息格式参考

提交信息最常见的格式是 Angular Git Commit Guidelines 。简单点表示就是下面这样:

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
  • type 本次 commit 的类型;
    • feat 添加新特性;
    • fix 修复 bug;
    • docs 仅仅修改了文档;
    • style 仅仅修改了空格、格式缩进、typo 等等,不改变代码逻辑;
    • refactor 代码重构,没有加新功能或者修复 bug;
    • perf 增加代码进行性能测试;
    • test 增加测试用例;
    • chore 改变构建流程、或者增加依赖库、工具等;
  • scope 本次 commit 波及的范围;
  • subject 本次 commit 的主旨(标题);
  • body 本次 commit 的详细描述;
  • footer 本次 commit 相关的链接;

更多内容可以参考下面:
https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#commits

实际使用中这个格式只是参考,可以根据实际情况选择。一般来说标题不能少,因为在单行模式查看日志的时候会显示第一行信息。

Git常用命令速查表

在这里插入图片描述

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

Git使用笔记 的相关文章

  • 具有私有 git 存储库的 Cocoapods

    我想添加到podfile私有git存储库 例如 pod MyLibrary git gt email protected cdn cgi l email protection perfect top library git branch g
  • 使用 Git 部署时压缩 JS/CSS 文件

    我对 git 有点陌生 另外 这是我第一个自动化部署过程的项目 到目前为止 能够做到这一点真是太幸福了git push dev并上传文件 复制配置文件等 现在 当我推送到我的开发服务器时 我想缩小 JS CSS 文件 我正在考虑在服务器上安
  • 无法从 Git 扩展向 GitHub 进行身份验证?

    我只是在 Visual Studio 2010 中设置 Git 扩展 但无法真正使其工作 我无法进行身份验证 在 Git Extensions 中 如果我选择 Plugins gt GitHub 我可以添加用户 密码 API 令牌并选择 S
  • Git Push 远程:致命:包超出允许的最大大小

    我接到了一个大项目 客户想将其添加到github 我是一点一点添加的 然后发生的事情是我太贪心了 一次添加了太多文件 现在 无论我尝试什么 我都会不断收到此错误 我怎样才能解决这个问题 我试图回滚 但也许我做错了 git push Ente
  • 为什么 git 无法识别我的本地存储库?

    我刚刚回到一个我已经使用 Git 大约 6 个月的项目 看到了这个 cd d DEVELOP BlenderAe My repo root git status fatal not a git repository or any of th
  • 永久删除 git 提交历史记录

    我需要永久且完全删除 git 存储库的提交历史记录并继续使用文件的当前版本 旧版本 提交不得以任何方式访问 我尝试创建一个新的主分支 删除所有其他分支 但是当我在 git bash 中尝试 git show xxxx 时 旧的提交继续显示
  • git 工作目录中的更改拒绝恢复

    我的 git 工作目录中有五个文件git status显示为已修改 当我git diff他们 整个文件显示为已更改 我有core autocrlf true但似乎没有效果 当我试图从同事那里获取更改时 真正的问题出现了 修改 的文件之一会被
  • 如何将 git-svn 与 svn+ssh url 一起使用

    我喜欢在cygwin中使用git svn clone使用我们公司 svn 存储库的命令 这个的网址是svn ssh svn
  • git filter-repo:它可以在特定分支上使用吗?

    我正在读什么git filter repo可以做 因为我想用它做一个小实验 我有这个存储库 我只想从中获取一个目录的历史记录 比如说 master 但我不想为主人工作 我想创建一个新分支 例如filter repo test然后让git f
  • 如何在 github 复合操作步骤中动态设置环境变量?

    我确实需要它作为一个环境变量 这是为了复合动作具体来说 在复合操作中 我尝试了许多不同的设置环境变量的方法 我发现做到这一点的唯一方法是使用env在步骤本身内 runs using composite steps name A step e
  • 每个分支的 Git 磁盘使用情况

    你知道是否有办法列出每个分支的 git 存储库的空间使用情况 喜欢df or du would 分支的 空间使用情况 是指 尚未在存储库的其他分支之间共享的提交所使用的空间 这没有正确的答案 如果您查看仅包含在特定分支中的提交 您将获得 b
  • 如何与其他用户共享 bitbucket 存储库?

    我正在使用 Bit 存储桶 并且我想与一位朋友分享我的存储库 我用的是免费的个人账户 似乎有一个选项可以在位桶中创建团队 但它说它将把我的帐户从个人帐户转换为团队帐户 我不要那个 我如何授予其他用户访问此存储库的权限 有一个共享链接选项 如
  • 警告:引用名称“xxx”不明确

    我想知道为什么我收到 refname is ambigeous 的警告 这是否意味着名称以该字符串开头的分支不超过两个 但这里没有 Thanks git checkout B03799 warning refname B03799 is a
  • 在 git 中记录前 10 个

    两个问题 如何从头到尾显示 git 中的前 10 个提交 无分行 如何指定提交索引并记录它 显示第二个或第三个 我知道 git 使用父级来链接提交 很容易从头到尾记录提交 喜欢 git log HEAD 10 但我需要从头到尾查询 可以吗
  • 如何防止克隆我的 github 存储库?

    我正在尝试找到一种方法来防止从 github 存储库克隆 例如 我有一个私有存储库 有些人在该存储库中工作 在公司计算机中 团队中的每个人都设置了授权级别 当我在 github 上为某个用户设置授权时 该存储库可在他 她自己的 github
  • Git rebase --继续而不打开编辑器

    调用时git rebase continue在正常的变基冲突之后 编辑器 GIT EDITOR 打开并要求修改提交消息 因为提交消息可能包含前导 所以这可能会失败 export GIT EDITOR true git rebase cont
  • 如何摆脱 gerrit 中的错误依赖关系

    看起来 当使用 gerrit 时 默认情况下所有更改都依赖于前一个更改 我不会分支进行新的更改 我只是在主分支上工作 然后将提交的更改推送到远程源 主分支 即使两次提交彼此无关 每次都会创建依赖关系 我遇到了一些问题 这让我认为我没有正确地
  • 如何在Git中手动合并所有文件?

    我想合并所有文件manually有了 meld 或任何其他 diff 工具 我如何使用 Git 来做到这一点 当我跑步时git mergetool它说no files need merging 所以我想只有当我有冲突时我才能做到这一点 有更
  • 设置单独的遥控器以仅推送和拉动子文件夹

    假设我有两个存储库 repo A and repo B 其中包含一个文件夹 其中的代码与存储库 A 中的代码类似 这实际上如何发生并不重要 但是好吧 让我们假设我刚刚从 A 复制了内容 现在我想要以下内容 就像我在 repo A 中习惯的那
  • 将代码从没有权限的存储库推送到私有存储库?

    我有一个来自外部存储库 我们称之为 ExRepo 的文件夹 我没有任何推送权限 我有一个名为 MyOwnRepo 的个人存储库 如何获取 ExRepo 并将其合并到 MyOwnRepo 中 我已经尝试过这个 C Users

随机推荐

  • Google Protobuf详解

    首先要知道几个清楚的概念 RPC Remote Procedure Call 远程过程调用 很多RPC框架都是跨语言的 使用步骤 定义一个接口说明文件 描述了对象 结构体 对象成员 接口方法等一系列信息 通过RPC框架所提供的编译器将接口说
  • idea crack

    Xms1128m Xmx1750m XX ReservedCodeCacheSize 240m XX UseConcMarkSweepGC XX SoftRefLRUPolicyMSPerMB 50 ea Dsun io useCanonC
  • IoT技术架构与安全威胁

    引言 物联网IoT的英文全称是 The Internet of Things 即物联网就是物物相连的互联网 也就是人们常说的万物互联 万物互联是一把双刃剑 它既能会给生活带来巨大的生活便利 同时也会带来巨大的安全风险 本文选自 智能硬件安全
  • mysql存储过程逻辑与_MYSQL存储过程即常用逻辑知识点总结

    Mysql存储过程 1 创建存储过程语法 格式 DELIMITER CREATE PROCEDURE 存储过程名A IN 传入参数名a INT IN 传入参数名b VARCHAR 20 OUT 返回参数名c INT BEGIN 内容 END
  • 【c++源码】瑞佳飞飞彩虹端分享老飞飞源码

    里面功能包含 离线摆摊 内挂 宠物系统 宠物进阶 任意商店 回收装备 模型查看 个人排行榜 物品分解 全物品升级 钥匙开箱子 外观变更 每日签到 对于学习c 的同学有很大的帮助 md5加密 kikugalanet 源码完整 是一份不错的学习
  • 2021手机CIS技术趋势总结

    手机摄像头CIS CMOS图像传感器 自从突破1亿像素以后 再谈像素数量增大 似乎已经很难让市场产生激烈反应了 这两年电子工程专辑对于手机摄像头CIS 以及更多领域不同类型的图像 视觉传感器 如ToF 基于事件的视觉传感器 都在做技术上的追
  • 错误-maven工程,程序包org.apache.commons.xxx不存在,Java:不支持发行版本5

    文章目录 前言 Java 不支持发行版本5 程序包org apache commons xxx不存在 前言 因为最新的idea界面中文支持较好 就更新了idea 但是发现在导入以前的项目时报了两个错误 程序包org apache commo
  • Pixhawk VTOL SITL仿真

    Pixhawk VTOL 和 SITL Simulation 需求的软件 MAVProxy 下载地址 http firmware ardupilot org Tools MAVProxy MAVProxySetup latest exe C
  • Nvidia Xavier Nx平台PCIE速率调整调试记录

    1 前言 如何增加最大速度的pcie上的jetson xavier 因为被限制在2 5 GT s Xavier似乎可以增加到8 GT s 使用Jetpack 4 5 0004 00 00 0 PCI bridge NVIDIA Corpor
  • Bi-LSTM学习

    什么是LSTM与Bi LSTM LSTM的全称是Long Short Term Memory 它是RNN Recurrent Neural Network 的一种 LSTM由于其设计的特点 非常适合用于对时序数据的建模 如文本数据 BiLS
  • 迷宫城堡【图之强连通】【tarjan模板】

    为了训练小希的方向感 Gardon建立了一座大城堡 里面有N个房间 N lt 10000 和M条通道 M lt 100000 每个通道都是单向的 就是说若称某通道连通了A房间和B房间 只说明可以通过这个通道由A房间到达B房间 但并不说明通过
  • Edge浏览器无法访问本地项目

    管理员身份启动cmd 并输入以下命令 CheckNetIsolation LoopbackExempt a n Microsoft MicrosoftEdge 8wekyb3d8bbwe
  • SpringBoot 优雅停止服务的几种方法

    一 准备工作 1 1 准备一个项目 随便创建一个Spring Boot项目 这里使用的是截止到2020年5月 最新的版本 2 2 7 RELEASE 1 2 创建一个bean 我们创建一个Bean 有一个销毁的方法 Componentpub
  • Mysql存储过程

    目录 什么是存储过程 有哪些特性 创建一个简单的存储过程 存储过程中的控制语句 存储过程弊端 转载于http www cnblogs com chenpi 什么是存储过程 简单的说 就是一组SQL语句集 功能强大 可以实现一些比较复杂的逻辑
  • windows环境java加载dll出错原因记录

    Exception in thread main java lang UnsatisfiedLinkError dll 1 不是有效的 Win32 应用程序 记录一次windows10环境下java调用test dll文件出现下边的错误的原
  • PD3.1详解 第一章EPR

    PD3 1详解 第一章EPR 各大厂商逐渐在推广PD3 1的方案 从苹果的第一款PD3 1的适配器开始 目前慢慢的各种应用场合应用 比如一些电动工具 大功率储能产品等等 首先PD3 1增加了一个重要的概念 那就是TypeC接口功率部分最大可
  • cmake混合编译cuda和c++代码

    cmake混合编译cpp和cuda代码 实际背景 在cpp项目中需要调用一些 cu代码 但是两个代码的编译是不同的 cpp代码使用g 编译 cuda代码使用nvvc编译 因此需要分别编译 再链接 同时需要在cuda侧进行一些简单的封装 简单
  • 更高级的测试

    软件测试的艺术 1 功能测试 功能测试是一个试图发现程序与其外部规格说明之间存在不一致的过程 外部规格说明是一份从最终用户的角度对程序行为的精确描述 功能测试通常是一项黑盒操作 要依赖于早期模块测试的过程来实现理想的白盒逻辑覆盖准则 2 系
  • detectron2入门学习二:实现FruitsNut水果坚果分割任务数据集Mask与coco格式转换处理

    学习目标 将数据集进行Mask掩膜 coco标注等不同格式的转换 工程文件地址 https github com fenglingbai FruitsNutsHandle 一 单实例的coco标注与Mask掩膜相互转换 掩膜转换的方式有多种
  • Git使用笔记

    文章目录 前言 使用笔记 软件安装 基础设置 本地使用 远程交互 忽略文件 提交信息格式参考 Git常用命令速查表 前言 Git是一个免费的 开源的分布式版本控制系统 旨在以快速高效的方式处理从小型到大型的所有项目 Git is a fre