当前位置: 首页 > 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;创建了一个计算机管理大创管理系统的方案。…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...