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 ls-remote”中列出的分支?

    我遇到了无法切换到仅列出的分支的情况git ls remote 这是详细信息 我分叉了一个 github repoA 作为 repoB 创建了自己的分支并将其推送到 ComputerA 中的 repoB 在 ComputerB 中 我将分叉
  • 您的分支比“origin/master”领先 3 个提交

    我在运行时收到以下信息git status Your branch is ahead of origin master by 3 commits 我读过其他一些帖子 解决这个问题的方法是运行git pull rebase但是 rebase
  • git 如何查找分支源自的提交哈希

    假设我从主分支分支到主题分支 然后在主题分支上进行了一些提交 是否有命令告诉我主题分支源自的主分支上的提交哈希 理想情况下 我不必知道我做了多少次提交 试图避免 HEAD 5 我已经用谷歌搜索过 但似乎无法找到答案 谢谢 use git m
  • Github:我的仓库登陆页面上缺少“设置”菜单

    设置 菜单应该是最后一个菜单 位于 图形 菜单之后 没有 设置 菜单会影响我设置 Webhook 的能力 是的 这是我的仓库 我拥有它 landing page of my test repo travis repo 我今天也遇到了同样的问
  • 执行 git Push 时出现“diff.renamelimit 变量”警告

    我将本地提交推送到远程 git 服务器并收到以下警告消息 remote warning only found copies from modified paths due to too many files remote warning y
  • 为什么“git描述-dirty”在描述干净结帐时添加“-dirty”后缀?

    我刚刚发现 dirty选项git describe看起来它应该做一些非常有用的事情 即在输出中附加一个后缀git describe当工作树脏时 但是在我的一些存储库上似乎并非如此 git status On branch 8 30 noth
  • git-svn 如何知道要提交到哪个分支?

    我的存储库是 SVN 我使用 git 进行所有开发 我们有一个标准布局 我用以下命令初始化了我的本地存储库git svn init s
  • 如何获取 git 存储库中所有文件的计数?

    如何获取 git 存储库中当前所有文件的计数 您可以使用以下命令获取 git 存储库中所有跟踪文件的计数 git ls files wc l 命令分解 The git ls files命令本身打印出存储库中所有跟踪文件的列表 每行一个 Th
  • 如何在同一存储库中的 github 操作之间共享代码?

    假设我想要两个工作流程build yml and release yml在我的仓库中 第一个应该构建项目 假设使用 CMake 第二个应该构建项目并使用构建的二进制文件创建 GitHub 版本 项目构建代码在两个文件之间重复 如何在它们之间
  • 为什么cherry-pick 告诉我所有行都已更改?

    Updated 考虑文件 abc 在提交 A 和 B 中都相同 begin 123 456 789 klm end 在A中 我们重构第一行123 gt AAA并在结果之上选择 B Git 告诉我们all lines in the file
  • Smartgit:自动插入提交消息

    有没有办法使用钩子脚本在 Smartgit 中自动插入提交消息 重击 如果用户提交了他的更改 我想预加载提交消息字段 我没有看到任何SmartGit配置 http www syntevo com smartgit documentation
  • 在种子项目上构建时如何组织 git 存储库

    我正在基于从 github 克隆的种子项目 MEAN io 构建一个网站 如何将这些文件与我自己的文件分开 由于该种子提供了广泛的文件框架 因此我自己的文件分布在整个项目中 我希望能够从种子中提取更新 但不能将其与我添加的文件混合 我知道我
  • 在 python 中找不到 git 可执行文件

    我试图使用访问密钥克隆 git 存储库 但是当我尝试运行它时 它抛出一个异常 说找不到 git 可执行文件 但我已经安装了 git 并且 in it py 显示了正确的路径 C Program Files Git bin 我还安装了 git
  • 有什么方法可以从提交的消息中获取提交的 SHA 值吗?

    当做一个git tag 我并不总是擅长记住 HEAD 6 例如 是包含的还是排他的 鉴于我的大多数提交都以问题号为前缀 我想知道是否有一些神奇的命令可以从其消息的一部分中搜索提交 SHA 我知道这很容易做到git log并从那里开始工作 但
  • git merge --squash 和 gitcherry-pick 有什么区别?

    如果我在标准的主功能工作流程中工作 那么将功能分支压缩到主功能分支和将其挑选到主功能分支之间有什么区别 分支示例 m1 m2 master f1 f2 feature 我认为两者都有相同的输出 即 m1 m2 m3 master f1 f2
  • Git - 使用过滤器分支删除带有空变更集的提交

    如何使用 git filter branch 删除没有变更集的提交 我使用以下方法重写了我的 git 历史记录 git filter branch tree filter rm r f my folder f HEAD 效果很好 但现在我有
  • 使用nodegit切换分支/标签

    我整个早上都在尝试打开现有的存储库并使用 nodegit 更改分支或标签 文档内容很丰富 但似乎已经过时了 关于我做错了什么有什么想法吗 var NodeGit require nodegit var open NodeGit Reposi
  • git 清除远程仓库

    如果我将错误的初始提交 或多个 推送到远程存储库 并且只想清除 销毁它 我可以通过命令来完成吗 将其从服务器中完全删除非常重要 这样它就不会占用磁盘空间 例如 今天我推送了一个完整的 Visual Studio 项目 其中包含 dll sd
  • Github 页面 - 禁用除单个站点之外的所有站点的自定义域重定向?

    I ve been using github pages since a long time and use the custom domain redirection feature to redirect my user website
  • Git 忽略本地文件更改

    我都尝试过 git update index assume unchanged config myconfig and editing git info exclude并添加config myconfig 然而 当我执行 git pull

随机推荐

  • 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