Git开发实战

        本文对开发中git的常用概念和操作做一个总结。参考@绿毛鸭子的部分内容。

git分布式的体现

1.本地完整的版本库: 

每个克隆下来的 Git 仓库都包含了项目的所有历史记录、提交、分支等信息。这意味着每个开发者的本地仓库是一个完整的版本控制系统,包括了整个项目的历史,不仅仅是当前的工作副本。即使不连接到中央服务器,开发者依然可以执行几乎所有的 Git 操作(如提交、分支切换、查看历史等)。

2.无需依赖中央服务器

在 Git 中,每个开发者的本地仓库就是一个完整的版本控制数据库,因此不需要连接到中央服务器就能进行大多数操作(例如提交、查看历史)。

3.离线工作、分布式协作

 提交、查看历史记录、创建分支、合并等操作都可以在本地进行,直到需要同步到远程仓库时才进行网络操作。团队成员之间并不是直接依赖中心服务器进行协作,而是通过推送(push)和拉取(pull)操作,将本地仓库的更改同步到其他开发者的仓库中。开发者可以将自己的工作分享到远程仓库,其他人可以从该仓库拉取并合并更改,整个过程不需要中央服务器一直保持在线。

常用命令

git init

git init

在当前目录下创建一个新的Git仓库。

git status

git status

显示当前 Git 仓库的工作状态。

作用

  1. 显示当前分支:它会告诉你当前所在的分支名称。
  2. 显示文件更改状态
    • Untracked files:显示那些未被 Git 跟踪的新文件。
    • Changes not staged for commit:显示已经修改过但尚未添加到暂存区的文件。
    • Changes to be committed:显示已被添加到暂存区,等待提交的文件。

git add

git add <file>

git add用于将文件的更改添加到暂存区。暂存区是一个中间区域,用于准备提交(commit)之前,标记哪些文件或文件的哪些更改将被包括在下次提交中。这个命令不会直接修改 Git 仓库的历史记录,它只是告诉 Git 哪些更改是你想要在下次提交中包括的。

  1. 添加单个文件

    git add <file>

    这将把指定文件添加到暂存区,标记为已修改并准备好提交。

    示例:

    git add index.html
  2. 添加多个文件

    git add <file1> <file2> ...
    可以一次性将多个文件添加到暂存区。

    示例:

    git add file1.txt file2.txt
  3. 添加所有文件

    git add .

    这个命令会将当前目录下的所有更改(包括新增文件、修改的文件以及删除的文件)添加到暂存区。如果你想添加所有更改的文件,可以使用这个命令。

  4. 添加所有更改的文件(包括删除的文件)

    git add -A

    使用 -A 参数,Git 会将所有更改的文件(包括新添加的文件、修改的文件以及删除的文件)都添加到暂存区。(整个工作区)

  5. 添加指定模式的文件

    git add "*.txt"

    使用通配符可以添加符合特定模式的文件。例如,git add "*.txt" 会将所有 .txt 文件添加到暂存区。

  6. 添加部分文件的更改

    git add -p

    -p(patch)参数可以让你选择性地将某些修改的部分添加到暂存区,而不是整个文件。在运行 git add -p 命令后,Git 会逐个显示每个文件的修改块,并提示用户选择是否将该块添加到暂存区。

    git commit

 用于将暂存区的更改(也就是已经通过 git add 命令添加到暂存区的文件)记录到本地仓库中的命令。每次执行 git commit 时,都会生成一个新的提交对象,并为这个提交生成一个唯一的提交哈希值。每个提交还会有一个描述性的消息,通常用来描述本次更改的内容。

主要参数:

  1. -m--message

    • 用于指定提交信息。提交信息是对本次修改的简短描述,帮助其他人(或者自己)理解这次更改的目的。
    • 例如:git commit -m "Fix bug in login feature"
  2. --amend

    • 如果你想修改最近一次的提交,可以使用 --amend 参数。这会将最新的提交修改为当前暂存区的内容。
    • 如果你忘记添加文件或者提交信息有误,可以通过 git commit --amend 来修正。
    • 注意:--amend 会修改历史提交,可能会影响其他依赖该提交的工作,因此要小心使用。

    例如:git commit --amend -m "Updated commit message"

  3. --no-edit

    • 这个选项与 --amend 一起使用,表示不修改提交信息,仅修改提交的内容。
    • 例如:git commit --amend --no-edit
  4. --date="date"

    • 用于指定提交的时间戳。例如:git commit --date="2025-04-20 12:00:00" -m "Custom date for commit"
  5. -a--all

    • 在执行 git commit 时,自动将所有已跟踪文件的修改直接提交到版本库,而不需要使用 git add
    • 但是不会包括新文件(未跟踪的文件)。例如:git commit -a -m "Commit all tracked changes"
  6. --author="name <email>"

    • 用于指定提交的作者。如果你希望指定不同于当前配置的作者,可以使用此选项。
    • 例如:git commit --author="John Doe <john@example.com>" -m "Custom author commit"

git三大区域

Workspace:工作区,就是你平时存放项目代码的地方;

Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息,一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index);

Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本;

Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换; 

git 回滚

git HEAD

1.HEAD 是指向当前所在分支的最新提交的指针。当你切换分支时,HEAD 会随之移动,指向新分支的最新提交。
2.分离 HEAD(Detached HEAD):

  • 当 HEAD 不指向任何分支,而是指向某个具体的提交时,称为“分离的 HEAD”状态。这通常发生在你使用 git checkout <commit> 或 git checkout <commit_hash> 时。
  • 在这种状态下,如果你进行提交,Git 不会将新的提交与任何分支关联,而是创建一个孤立的提交。你可以在这种状态下进行实验性的修改,但如果不创建新的分支来保存这些提交,它们最终可能会丢失。

git log

  1. 查看提交历史
    git log 
    这个命令会显示从最近的提交开始,按时间倒序列出所有提交记录,包括提交的哈希值、作者、提交日期和提交信息。
  2. 简洁输出: 如果只想看到提交的简洁信息(如提交哈希和提交信息),可以使用 --oneline 选项:

    git log --oneline

    这会显示每个提交的一行简洁信息,通常会看到提交的简短哈希值和提交信息。

  3. 显示具体的文件变更: 如果你想查看每次提交时修改了哪些文件,可以使用 --stat 选项:

    git log --stat
    这个命令会显示每个提交的文件变更统计信息(例如,修改了多少行代码等)。

git reflog 

git reflog记录了 HEAD 和分支引用的历史变动。

  • git log:记录的是 Git 仓库的提交历史,即所有的 commit 对象。它显示的是你仓库的版本历史(从当前 HEAD 开始),包括所有的提交、作者、日期、提交信息等。
  • git reflog:记录的是 Git 仓库中引用的变动历史,即 HEAD 或分支引用(例如 master 或 develop)的移动。它不仅记录提交,还记录如 git checkoutgit resetgit merge 等操作如何影响引用的位置。git reflog 能帮助你追踪本地分支的变动历史,包括那些不再出现在提交历史中的变动。

回滚

回滚至之前版本

git log
git reset --hard 版本号

回滚至之后版本

git reflog
git reset --hard 版本号

 

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

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

相关文章

ingress-nginx 开启 Prometheus 监控 + Grafana 查看指标

环境已经部署了 ingress-nginx&#xff08;DaemonSet 方式&#xff09;&#xff0c;并且 Prometheus Grafana 也已经运行。但之前 /metrics 端点没有暴露 Nginx 核心指标&#xff08;如 nginx_ingress_controller_requests_total&#xff09;&#xff0c;经过调整后现在可以正…

ThinkPHP 5.1 中的 error 和 success 方法详解

1、success() 方法 public function someAction() {// 操作成功逻辑...return $this->success(操作成功, 跳转地址, 额外数据); } 参数说明 参数类型说明默认值msgstring成功提示信息空字符串urlstring跳转URLnull (不跳转)datamixed返回的额外数据nullwaitinteger跳转等…

抗辐照MCU在卫星载荷电机控制器中的实践探索

摘要:在航天领域&#xff0c;卫星系统的可靠运行对电子元件的抗辐照性能提出了严苛要求。微控制单元&#xff08;MCU&#xff09;作为卫星载荷电机控制器的核心部件&#xff0c;其稳定性与可靠性直接关系到卫星任务的成败。本文聚焦抗辐照MCU在卫星载荷电机控制器中的应用实践&…

计算机视觉——相机标定

计算机视觉——相机标定 一、像素坐标系、图像坐标系、相机坐标系、世界坐标系二、坐标系变换图像坐标系 → 像素坐标系相机坐标系 → 图像坐标系世界坐标系 → 相机坐标系 ⋆ \star ⋆ 世界坐标系 → 像素坐标系 三、相机标定 一、像素坐标系、图像坐标系、相机坐标系、世界坐…

好未来0520上机考试题1:括号的最大嵌入深度

题目 &#xff08;LeetCode 1614.括号的最大嵌入深度&#xff09; 给定 有效括号字符串 s&#xff0c;返回 s 的嵌套深度。嵌套深度是嵌套括号的最大数量。 示例 1&#xff1a; 输入&#xff1a;s "(1(2*3)((8)/4))1" 输出&#xff1a;3 解释&#xff1a;数字…

MySQL复杂SQL(多表联查/子查询)详细讲解

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 MySQL复杂SQL&#xff08;多表联查/子查询&a…

Spring中循环依赖问题的解决机制总结

一、解决机制 1. 什么是循环依赖 循环依赖是指两个或多个Bean之间相互依赖对方&#xff0c;形成一个闭环的依赖关系。最常见的情况是当Bean A依赖Bean B&#xff0c;而Bean B又依赖Bean A时&#xff0c;就形成了循环依赖。在Spring容器初始化过程中&#xff0c;如果不加以特殊…

集运维_安装linux,麒麟等系统_步骤

u盘工具选择Ventoy,Rufus 在选择Ventoy和Rufus这两款U盘启动盘制作工具时,需根据具体需求权衡其优缺点: ‌核心差异‌ ‌多系统支持‌: ‌Ventoy‌:支持将多个ISO、WIM、IMG等类型的镜像文件直接复制到U盘,实现‌一盘多用‌(例如同时存放Windows、Linux等镜像),无需…

第4章:Cypher查询语言基础

Cypher是Neo4j的声明式图查询语言&#xff0c;专为处理图数据而设计。它允许用户以直观、高效的方式查询和修改图数据库中的数据。本章将介绍Cypher的基本概念和语法&#xff0c;帮助读者掌握使用Cypher进行基础图数据操作的能力。 4.1 Cypher语言概述 Cypher是Neo4j的主要查…

上位机知识篇---Flask框架实现Web服务

本文将简单介绍Web 服务与前端显示部分,它们基于Flask 框架和HTML/CSS/JavaScript实现,主要负责将实时视频流和检测结果通过网页展示,并提供交互式状态监控。以下是详细技术解析: 一、Flask Web 服务架构 1. 核心路由设计 @app.route(/) def index():"""…

Neovim - 打造一款属于自己的编辑器(一)

文章目录 前言&#xff08;劝退&#xff09;neovim 安装neovim 配置配置文件位置第一个 hello world 代码拆分 neovim 配置正式配置 neovim基础配置自定义键位Lazy 插件管理器配置tokyonight 插件配置BufferLine 插件配置自动补全括号 / 引号 插件配置 前言&#xff08;劝退&am…

按字典序排列最小的等效字符串

文章目录 题目思路解题过程Python代码C代码复杂度 题目 给出长度相同的两个字符串s1 和 s2 &#xff0c;还有一个字符串 baseStr 。 其中 s1[i] 和 s2[i] 是一组等价字符。 举个例子&#xff0c;如果 s1 “abc” 且 s2 “cde”&#xff0c;那么就有 ‘a’ ‘c’, ‘b’ ‘…

Ubuntu2404 下搭建 Zephyr 开发环境

1. 系统要求 操作系统&#xff1a;Ubuntu2404&#xff08;64位&#xff09;磁盘空间&#xff1a;至少 8GB 可用空间&#xff08;Zephyr 及其工具链较大&#xff09; 2. 安装必要工具 Tool Min. Version CMake 3.20.5 Python 3.10 Devicetree compiler 1.4.6 2.1 安装系…

2025年06月07日Github流行趋势

项目名称&#xff1a;netbird 项目地址url&#xff1a;https://github.com/netbirdio/netbird项目语言&#xff1a;Go历史star数&#xff1a;14824今日star数&#xff1a;320项目维护者&#xff1a;mlsmaycon, braginini, pascal-fischer, lixmal, pappz项目简介&#xff1a;使…

fast-reid部署

配置设置&#xff1a; 官方库链接&#xff1a; https://github.com/JDAI-CV/fast-reid# git clone https://github.com/JDAI-CV/fast-reid.git 安装依赖&#xff1a; pip install -r docs/requirements.txt 编译&#xff1a;切换到fastreid/evaluation/rank_cylib目录下&a…

clickhouse 和 influxdb 选型

以下是 ClickHouse、InfluxDB 和 HBase 在体系架构、存储引擎、数据类型、性能及场景的详细对比分析: 🏗️ ‌一、体系架构对比‌ ‌维度‌‌ClickHouse‌‌InfluxDB‌‌HBase‌‌设计目标‌大规模OLAP分析,高吞吐复杂查询 时序数据采集与监控,优化时间线管理高吞吐随机…

ros创建工作空间配置运行状态机

ROS 一、创建工作空间目录 /home/wict/workspace/hudahua/ros/catkin_ws #初始化工作空间&#xff08;仅需一次&#xff09; catkin_init_workspace二&#xff1a;回到根目录编译 #创建正确的工作空间结构&#xff08;如果尚未创建&#xff09; mkdir -p ~/workspace/hudahua…

【看到哪里写到哪里】C的“数组指针”

C里面&#xff0c;数组指针&#xff0c;不是基本类型。顾名思义&#xff0c;数组指针&#xff0c;是指针&#xff0c;是指向数组的指针&#xff1b; 1.它的基本定义样子是 type (*ptr)[size]; 这个指针&#xff0c;指向的数组的&#xff1b;这里要注意&#xff0c;要定义数组…

深度相机的日常学习

文章目录 一、深度相机的概念二、深度相机的工作原理三、深度相机的应用领域 一、深度相机的概念 深度相机&#xff08;Depth Camera&#xff09;是一种能够捕捉场景中物体距离信息的设备&#xff0c;与传统的 RGB 相机不同&#xff0c;深度相机不仅可以获取场景的二维图像信息…

elasticsearch基本操作笔记

1.通过kibana查看elasticsearch版本信息 a.左上角三道横->Management->Dev Tools b.GET / 执行 c.执行结果 { “name” : “xxxx”, “cluster_name” : “xxxxxxx”, “cluster_uuid” : “vl1UudAoQp-aHWAzyPoMyw”, “version” : { “number” : “7.15.1”, “build…