当前位置: 首页 > news >正文

Git常用命令详解:掌握版本控制的核心操作

Git作为世界上最流行的分布式版本控制系统,以其强大的分支管理、高效的协同工作能力和完善的版本追溯功能,深受广大开发者喜爱。熟练掌握Git的常用命令是每一位程序员必备的技能。本文将深入解析Git中那些最为基础且实用的命令,助您在日常开发工作中游刃有余。

一、初始化与配置

1. git init

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

git init

执行此命令后,Git会在当前目录下生成一个隐藏的.git目录,其中包含了管理仓库所需的必要文件和数据结构。至此,该目录便成为了Git仓库的根目录,您可以开始在此处进行版本控制。

2. git config

用途: 设置Git的全局或局部配置选项。

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

使用git config可以设置Git的用户信息、编辑器偏好、代理设置等。上述命令设置了全局的用户名和电子邮件地址,它们将随您的每一次提交一同记录。如果您需要为特定仓库设置不同的配置,去掉--global即可。

二、工作区与暂存区操作

3. git add

用途: 将工作区的文件添加到暂存区(Staging Area)。

git add <file>
git add .

git add <file>将指定文件的当前状态添加到暂存区,准备纳入下一次提交。使用git add .可将所有修改、新添加或删除的文件一次性添加到暂存区。

4. git rm

用途: 从工作区和暂存区移除文件,并跟踪其删除状态。

git rm <file>

此命令会从工作目录中删除指定文件,并将其从暂存区移除,以便在下一次提交时记录该文件的删除操作。

5. git restore

用途: 撤销工作区的改动或恢复暂存区的文件到HEAD版本。

git restore <file>           # 恢复工作区文件到最近提交状态
git restore --staged <file>  # 取消对文件的暂存,恢复到HEAD状态

git restore命令可以用来撤销对工作区文件的改动,或者将已暂存的文件恢复到最近提交的状态,不保留本地更改。

三、提交与版本回溯

6. git commit

用途: 将暂存区的改动提交到本地仓库,形成一个新的提交点。

git commit -m "Commit message describing changes"

通过-m参数后跟提交说明,将暂存区的所有改动保存为一个提交对象,并附带提供的说明文字。提交是Git版本控制的基本单元,每个提交都包含一个指向父提交的指针和一组改动。

7. git commit --amend

用途: 修改最近一次提交的信息或合并未暂存的改动。

git commit --amend -m "New commit message"

此命令允许您修改最近一次提交的说明,或者将当前未暂存的改动合并到最近那次提交中,从而保持提交历史的整洁。

8. git log

用途: 显示提交历史,包括作者、日期、提交信息等。

git log
git log --oneline --graph --decorate

git log默认显示详细的提交历史。加上--oneline--graph--decorate参数,可以得到简洁、图形化且带有分支标记的提交历史视图。

9. git reset

用途: 重置当前分支的HEAD指向,撤销提交或回滚暂存区和工作区的改动。

git reset HEAD <file>         # 从暂存区移除文件,保留工作区改动
git reset --hard HEAD~1       # 回退至上一个提交,丢弃所有未提交的改动
git reset --hard <commit-id>  # 强制回退到指定提交,丢弃所有后续提交和未提交的改动

git reset提供了不同级别的重置操作,可以根据需要撤销暂存、回滚提交或彻底回到过去的某个提交状态。

四、分支与合并

10. git branch

用途: 列出、创建或删除分支。

git branch                  # 列出所有本地分支
git branch new-branch       # 创建名为new-branch的新分支
git branch -d old-branch    # 删除已合并的old-branch分支
git branch -D stubborn-branch # 强制删除未合并的stubborn-branch分支

通过git branch命令,您可以查看、创建和删除分支,便于在不同开发线程间切换和管理代码版本。

11. git checkout / git switch

用途: 切换到指定分支或恢复工作区文件。

git checkout <branch>
git switch <branch>git checkout <file>           # 从HEAD恢复单个文件到工作区
git switch --discard-changes <file> # 类似效果,适用于较新版本Git

git checkout(或git switch,推荐在较新版本Git中使用)用于切换分支或恢复工作区文件到指定提交或分支的状态。注意,对于文件恢复操作,git switch在较新版本中提供了更明确的选项。

12. git merge

用途: 合并指定分支到当前分支。

git merge <branch>

执行此命令后,Git将尝试将指定分支的改动合并到当前分支,如果合并过程中遇到冲突,需要手动解决冲突并再次提交。

13. git rebase

用途: 将当前分支的提交历史“重放”到另一分支顶部,实现线性化的提交历史。

git rebase <branch>

git rebase用于在保持提交内容不变的前提下,改变提交的历史顺序,使其看起来像是直接基于目标分支进行的开发。这有助于保持分支历史的清晰和整洁,但需要注意可能会引入冲突,且不应在已推送至公共仓库的分支上执行。

五、远程操作

14. git fetch

用途: 从远程仓库获取最新的分支和提交信息,但不自动合并。

git fetch origin

git fetch从指定的远程仓库(如origin)拉取所有分支的最新提交信息,但不会自动合并到本地对应分支,而是将远程分支更新保存为远程跟踪分支(如origin/main)。

15. git pull

用途: 获取远程分支的最新改动并自动合并到当前分支。

git pull origin main

git pull相当于git fetch后紧跟git merge,它会从远程仓库拉取指定分支的最新提交,并尝试将其合并到当前分支。

16. git push

用途: 将本地分支的提交推送到远程仓库。

git push origin <local-branch>:<remote-branch>

此命令将本地指定分支的提交历史推送至远程仓库的相应分支。若省略远程分支名,默认推送到同名分支。如果远程分支不存在,且远程仓库允许自动创建分支,会创建新的远程分支。

六、其他实用命令

17. git status

用途: 查看当前工作目录和暂存区的状态。

git status

git status是日常开发中频繁使用的命令,它显示哪些文件被修改、新增、删除以及哪些文件处于暂存状态,帮助您了解当前工作区与最近提交之间的差异。

18. git diff

用途: 显示工作区、暂存区或提交之间的文件差异。

git diff              # 工作区与暂存区之间的差异
git diff --cached     # 暂存区与最近提交之间的差异
git diff <commit-id>  # 工作区与指定提交之间的差异

git diff命令用于比较不同版本间的文件内容差异,是定位代码变化、排查问题的重要工具。

19. git stash

用途: 暂存当前未提交的改动,清理工作区以便进行其他任务。

git stash
git stash list
git stash apply      # 恢复最近一次stash的内容
git stash drop       # 删除最近一次stash

git stash用于临时保存未提交的改动,使工作目录恢复到干净状态,便于切换分支或处理紧急任务。之后可以通过git stash applygit stash pop恢复暂存的改动。

相关文章:

Git常用命令详解:掌握版本控制的核心操作

Git作为世界上最流行的分布式版本控制系统&#xff0c;以其强大的分支管理、高效的协同工作能力和完善的版本追溯功能&#xff0c;深受广大开发者喜爱。熟练掌握Git的常用命令是每一位程序员必备的技能。本文将深入解析Git中那些最为基础且实用的命令&#xff0c;助您在日常开发…...

Vue链接跳转地址 href 中有参数带有#

Vue链接跳转地址 href 中有参数带有# A跳转B 带参数backURL 转码一次会被浏览器解码 xxxx?backurlencodeURIComponent(url) 到B页面拿到的query 值取不到 需要对地址转码两次才能取值成功 xxxx?backurlencodeURIComponent(encodeURIComponent(url))...

python 会员信息管理系统2.0

问题介绍 综合案例实现&#xff1a;会员管理系统设计与实现-V3 利用所学习的知识点 ,结合会员管理系统的分析与实现&#xff0c; 了解面向对象开发过程中类内部功能的分析方法&#xff0c;系统讲解 Python语法、控制结构、四种典型序列 ,函数定义以及面向对象语法和模块的应用…...

HTTP的强制缓存和协商缓存

HTTP的强制缓存和协商缓存 HTTP的缓存技术强制缓存ExpiresCache-Control 协商缓存If-Modified-Since和Last-ModifiedIf-None-Match和ETag优先级 可被缓存的请求方法总结 HTTP的缓存技术 当我们进行HTTP请求时&#xff0c;需要将请求报文发送给对端&#xff0c;当服务端收到请求…...

Prometheus-Grafana基础篇安装绘图

首先Prometheus安装 1、下载 https://prometheus.io/download/ 官网路径可以去这儿下载 2、如图&#xff1a; 3.解压&#xff1a; tar -xf prometheus-2.6.1.linux-amd64 cd prometheus-2.6.1.linux-amd64 4.配置文件说明&#xff1a; vim prometheus.yml 5.启动Promethe…...

探索艺术的新领域——3D线上艺术馆如何改变艺术作品的传播方式

在数字化时代的浪潮下&#xff0c;3D线上艺术馆成为艺术家们展示和传播自己作品的新平台。不仅突破了地域和物理空间的限制&#xff0c;还提供了全新的互动体验。 一、无界限的展示空间&#xff1a;艺术家的新展示平台 3D线上艺术馆通过数字化技术&#xff0c;为艺术家提供了一…...

[dvwa] file upload

file upload 0x01 low 直接上传.php 内容写<? eval($_POST[jj]);?> 用antsword连 路径跳两层 0x02 medium 添加了两种验证&#xff0c;格式为图片&#xff0c;大小限制小于1000 上传 POST /learndvwa/vulnerabilities/upload/ HTTP/1.1 Host: dvt.dv Content-Le…...

pygame发射子弹后绘制射线

import pygame import sys import mathpygame.init()screen pygame.display.set_mode((800, 600)) pygame.display.set_caption("Rotate and Shoot Bullets")# 定义子弹类 class Bullet:def __init__(self, x, y, angle):self.x xself.y yself.angle angleself.s…...

逻辑回归都有什么类型

逻辑回归是一种用于解决分类问题的统计学习方法&#xff0c;它基于概率理论&#xff0c;将输入特征与输出类别之间的关系建模为一个概率分布。逻辑回归模型可以用不同的方法来表示&#xff0c;其中包括&#xff1a; 1. **基本逻辑回归模型**&#xff1a;最简单的逻辑回归模型假…...

基于springboot+vue实现的高校宿舍管理系统(界面优美,十分推荐)

一、项目简介 本项目是一套基于springbootvue实现的高校宿舍管理系统设计与实现 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观…...

C语言学习笔记day18

1. 指针基本概念 1.地址:用来区分内存中不同字节的编号 2.指针:地址就是指针,指针就是地址 3.指针变量:存储指针的变量,有时去掉变量,称为指针 2. 指针运算符 1.&: 1.获得一个变量在内存空间中的首地址 2.让表达式类型升级 2.*: 1.取…...

JSP内置对象session

1.session对象&#xff0c;为会话对象&#xff0c;封装当前用户会话中的有关信息。 网页数据传递是单向传递的&#xff0c;session能够将数据进行多个数据互相传递&#xff0c;使用的是同一个东西 实例1&#xff1a; 利用session对象String getId() 方法获取当前session对象…...

BM96 主持人调度(二)(贪心算法)

一开始写的时候忘了给start、end数组赋值了 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** 计算成功举办活动需要多少名主持人* param n int整型 有n个活动* param start…...

【TB作品】MSP430单片机读取大气压强传感器BMP180

文章目录 实物main所有代码 实物 main #include <msp430.h> #include "stdio.h" #include "OLED.h"#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h>// P2.2 oled scl // P2.3 oled sda// p…...

Github第一Star数的国产免费开源防火墙--雷池社区版初步体验

前言 近期准备搭建一个博客网站&#xff0c;用来存储工作室同学们的学习笔记。服务器准备直接放在公网上&#xff0c;方便大家随时随地的上传和浏览&#xff0c;为了防止网站被人日穿成为肉鸡&#xff0c;一些防御措施还是要部署的。 首先明确自己的需求&#xff1a; 零成本…...

自动驾驶涉及相关的技术

自动驾驶涉及多种技术&#xff0c;包括传感器、数据处理、决策制定和执行控制等方面。以下是一些关键技术的详细说明&#xff1a; 传感器技术&#xff1a; 激光雷达&#xff08;LiDAR&#xff09;&#xff1a;激光雷达通过发射激光束并测量其反射时间来获取周围环境的高精度三维…...

简单高效的GO发票识别+发票查验接口

在这个瞬息万变的商业世界里&#xff0c;商业欺诈如影随形&#xff0c;虚假发票成为企业难以忽视的风险。而发票作为每笔交易的重要凭证&#xff0c;对其进行入账前的真伪查验显得尤为重要。但面对海量的发票查验与发票录入工作&#xff0c;人工手动查验的方式&#xff0c;速度…...

c++和python基本数据类型比较

以下是 C 和 Python 中一些基本数据类型的比较&#xff1a; 1. 整数类型&#xff1a; C&#xff1a; C 中的整数类型包括 int, short, long, long long 等&#xff0c;它们的大小和范围取决于编译器和操作系统。 Python&#xff1a; Python 中只有一个整数类型 int&#xff0…...

运维工具如此割裂,九招帮你统一纳管

背景 在运维工具这个江湖中&#xff0c;出现了众多独行侠客&#xff0c;各怀绝技&#xff0c;各自为战。这些开源监控软件如同武林中的各派门派&#xff1a;SkyWalking 以精湛的追踪功夫独步武林&#xff1b;Prometheus 以灵活的告警机制纵横江湖&#xff1b;ELK 则如同黯然销…...

基于springboot的大创管理系统源码数据库

基于springboot的大创管理系统源码数据库 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了大创管理系统的开发全过程。通过分析大创管理系统管理的不足&#xff0c;创建了一个计算机管理大创管理系统的方案。…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...