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

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

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

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

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

aardio 自动识别验证码输入

技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”&#xff0c;于是尝试整合图像识别与网页自动化技术&#xff0c;完成了这套模拟登录流程。核心思路是&#xff1a;截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...