常用git命令详解

article/2025/4/8 3:06:37

常用git命令

前言:

原链接:生哥哥牛逼(破音)
不争气的生哥哥链接404了,害得我要重新整理

一、概念:

1.基本概念

  • 工作区:就是你在电脑里能看到的目录。

  • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。

  • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
    下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:
    在这里插入图片描述
    图中左侧为工作区,右侧为版本库。在版本库中标记为 “index” 的区域是暂存区(stage/index),标记为 “master” 的是 master 分支所代表的目录树。

  • 图中我们可以看出此时 “HEAD” 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。

  • 图中的 objects 标识的区域为 Git 的对象库,实际位于 “.git/objects” 目录下,里面包含了创建的各种对象及内容。

  • 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

  • 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

2.git操作示意图

在这里插入图片描述
说明:

  • workspace:工作区
  • staging area:暂存区/缓存区
  • local repository:版本库或本地仓库
  • remote repository:远程仓库

二、命令:

1.基本操作:

  1. 状态查看
    git status 查看工作区、暂存区状态
    在这里插入图片描述
    - 红色文件代表新建或者修改过的文件,仅存在于工作区,未被提交到版本库
    - 绿色文件代表已被版本库管理,即存在于工作区和版本库中,未提交到本地仓库

  2. 添加
    - git add [file-name1] [file-name2] ... 将工作区的“新建/修改”添加到暂存区
    - git add . 将工作区的被修改的文件和新增的文件提交到暂存区,不包括被删除的文件
    - git add -A A指all,将工作区被修改、被删除、新增的文件都提交到暂存区

  3. 提交
    - git commit -m [massage] 将暂存区所有文件添加到本地仓库
    - git commit [file-name-1] [file-name-2] -m [massage] 将暂存区指定文件添加到本地仓库
    - git commit --amend 用于将本次提交和上次提交合并为一次提交,执行命令之后会进入vim编辑模式,用于编辑合并提交的massage

  4. 推送
    git push 将文件添加到远程仓库
    git push -f 强制推送,当我们本地reset到旧的版本时,然后普通push会被拦截,因为回退之后本地HEAD指向比远程库还要旧,需要用强制推送才可以推送到远程仓库
    git push origin [branch-name] 推送当前本地分支到指定远程分支

  5. 查看历史记录
    git log 查看提交历史记录,显示如下图,会展示提交的详细历史记录,包括每次提交的全commit id,分支所在版本,作者,日期,提交信息
    在这里插入图片描述
    git log --pretty=onelinegit log --oneline 这两个命令都是展示简略的提交历史记录,这两个的区别在于前者是显示全commit id,后者显示局部commit id
    git reflog查看操作历史记录,显示如下图,其中会包括 HEAD@{移动到当前版本需要多少步},此命令可以查看回退所丢失提交版本的commit id,用于回退的找回
    在这里插入图片描述

  6. 切换
    git checkout -- [file-name]
    用暂存区的文件覆盖掉工作区的文件

  7. 回退
    git reset --参数 [commit id] 将代码回退到指定版本处,参数包括soft ,mixed(推荐),hard。若远程仓库中的代码版本比本地回退之后的版本新,可用git push -f命令进行强制推送。
    –soft 参数:仅仅在本地库移动 HEAD 指针
    –mixed 参数: 在本地库移动 HEAD 指针,重置暂存区,配合命令6可完成保留指定内容的保留和回退
    –hard 参数: 在本地库移动 HEAD 指针,重置暂存区,重置工作区

    使用hard参数回退所删除的代码可找回 (注:删除前,文件存在时的状态必须提交到了本地库)。具体操作见示例:
    假设我现在的版本为1111111,我进行了代码修改并提交了修改代码后的新版本为2222222,然后我使用命令git reset --hard 1111111回退到了上个版本,我现在突然不想回退了。
    当前git reflog获取的操作记录如下:
    1111111 HEAD@{0}: reset: moving to 1111111
    2222222 HEAD@{1}: commit: 因回退删除的版本
    1111111 HEAD@{2}: commit: 原版本
    找回的操作步骤:
    1. 首先使用git reflog命令获取操作记录,查找到本次回退所误删的commit id为222222
    2. 使用命令git reset --hard 222222即可找因这次回退而误删的代码

  8. 比对
    git diff [file-name] 将工作区中的文件和暂存区进行比较
    git diff [commit-id] [file-name] 将工作区中的文件和暂存区进行比较

2、分支管理

  1. git fetch更新本地仓库
  2. git checkout -b 本地新分支名 orgin/远程新分支名将远程的新分支拉到本地并创建一个新分支
  3. 存放
    git stash 将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录
    git stash list查看当前stash中的内容
    git stash pop 将当前stash中的内容弹出,并应用到当前分支对应的工作目录上
    git stash apply将堆栈中的内容应用到当前目录,不同于git stash pop,该命令不会将内容从堆栈中删除,也就说该命令能够将堆栈的内容多次应用到工作目录中,适应于多个分支的情况

    命令3一般用于
    1.当前分支正在开发,需要临时切换到其他分支进行其他操作(比如bug修复)但是又不想commit的情况,可以用git stash将内容保存起来,切到bug修复分支操作后,再次切回开发分支恢复内容即可。
    2.误在master上进行开发,需要将已开发的内容搬到dev分支上去,可以用git stash将内容保存起来,切到dev分支后,再次恢复内容即可。

  4. git merge [branch-name] 将目标分支代码合到当前分支上
  5. git rebase [branch-name] 将当前分支以目标分支代码为基础变基

    merge和rebase命令都有合并的代码的功能,区别在于merge命令合并代码时会产生新的提交,且提交记录的顺序不会发生改变,而rebase命令不会产生新的提交,且提交记录可能会发生改变,但分支树结构会变得很整洁。笔者建议如果你没有代码洁癖,尽量使用merge,因为保证分支树的最初形态方便梳理提交记录以便查找问题或者回退

  6. git switch [branch-name] 切换到目标分支
  7. git branch -f [origin-branch-name] [target-branch-name] 将原分支强制更新为目标分支版本,包括历史记录也会被修改为和目标分支一致
  8. git cherry-pick [commit-id] [commit-id] [commit-id]... 检出所选提交版本id并按顺序提交到当前分支上

三、其他学习git比较好的文章地址:

  1. 廖雪峰Git教程
  2. 菜鸟教程
  3. git小游戏

http://chatgpt.dhexx.cn/article/tNEWrQKC.shtml

相关文章

【Git】常用命令详解(循序渐进,逐步分析)

目录 一、Git常用命令 1.1、设置用户签名 1.2、初始化本地库 1.3查看本地库状态 1.3、添加文件到暂存区 1.4、将暂存区文件添加文件到本地库 1.5、查看历史版本(提交历史记录) 1.6、修改文件 1.7、版本穿梭 一、Git常用命令 1.1、设置用户签名…

windows大多数的弹窗提示内容是可以复制的(我们主要用于报错内容复制粘贴去百度)

现在以记事本保存时候的弹窗为例,用鼠标点击弹窗的任意位置,然后CtrlC,然后在新的记事本中可以粘贴这个提示内容了。如下图粘贴效果 1.大多数弹窗适用 2.主要用于把“报错内容”复制粘贴去百度 找解决方案

vscode 编辑特效 文字爆炸效果插件

1、在vscode应用扩展商店下载Power Mode插件 2、在vscode最左下角打开设置 在搜索框输入settings.json {"files.autoSave": "off","workbench.colorTheme": "Visual Studio Light","[json]": {"editor.quickSuggestio…

初始C语言——完数问题

问题描述: 描述:一个数如果恰好等于它的因子之和(除本身以外),这个数就成为“完数”。例:6的因子为1,2,3,而6123,因此6是完数。找出1000以内的所有完数。 代…

C语言_求完数

2020年9月5日 11:11:31 /*一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如 61+2+3, 编程找出 1000 以内的所有完数。 */ 两种方法: 方法一的年代比较久远,而且算法思维比较复杂和抽象&#x…

1000以内完数c语言程序_C语言完数编程题目详解

首先看一下完数的概念:完数,即完美数,一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如61+2+3.(6的因子是1,2,3) 题目概要:请写一个C语言程序,要求输入一个数字n输出…

C语言完数计算

完数定义&#xff1a;如果一个数等于它的因子之和 例如:6123 编程工具&#xff1a;codeblocks #include<stdio.h> #include<stdlib.h> #include<math.h> void main() {int sum;//所有因子的的和int arr[20] { 0 };//声明一个数组用来存储所有的因子int n;…

C语言入门——1000以内的完数

完数定义 如果一个数恰好等于它的真因子之和&#xff0c;则称该数为“完全数” [2] 。各个小于它的约数&#xff08;真约数,列出某数的约数&#xff0c;去掉该数本身&#xff0c;剩下的就是它的真约数&#xff09;的和等于它本身的自然数叫做完全数&#xff08;Perfect numbe…

C语言———求”完数“

一个数如果恰好等于它的因子之和&#xff0c;这个数就称为 "完数 "。例如61&#xff0b;2&#xff0b;3&#xff0c;编程找出1000以内的所有完数。 分析过程 所谓完数&#xff0c;就是其因子之和&#xff08;不包括自己本身&#xff09;等于其本身&#xff0c;称其…

[C语言] [试题详解] 求1000之内的所有 完数

题目>>> 一个数如果恰好等于它的因子之和&#xff0c;这个数就称为“完数”。 例如&#xff0c;6的因子为1、2、3&#xff0c;而6&#xff1d;1&#xff0b;2&#xff0b;3&#xff0c;因此6是“完数”。 编程序找出1000之内的所有完数&#xff0c;并…

车载行车记录仪EMC浪涌防护方案图

客户向东沃技术寻求帮助&#xff0c;具体事情是这样的&#xff1a;客户公司自己生产的车载行车记录仪&#xff0c;在DC电源端口测试时&#xff0c;有故障&#xff0c;发生了小概率DC芯片损坏的。具体如下图所示&#xff1a; 案例分析 客户原理图如下&#xff1a; 根据客户原…

出门在外,你需要一个行车记录仪

5月3日下午&#xff0c;一段行车记录仪视频在网上疯传。在这段仅有35秒钟的视频里&#xff0c;一名身穿黑色上衣、白色短裤的男子&#xff0c;开车将一名长发女子逼停&#xff0c;当街殴打。女司机被暴打至骨折脑震荡&#xff0c;身上多处淤青。这段视频曝光后&#xff0c;引起…

锐动SDK应用于行车记录仪

方案架构 手机端直播与录播功能忠实记录旅途中各种突发事件&#xff0c;还原事实真相&#xff0c;与家人和朋友分享沿途美景&#xff0c;一同感受美妙之旅。 强大的视频编辑功能&#xff0c;像编辑图片一样给视频添加各种滤镜&#xff0c;配音&#xff0c;配乐&#xff0c;标题…

行车记录仪数据删除如何恢复?

10月&#xff0c;公安部交通管理局权威发布&#xff0c;截至2018年9月&#xff0c;全国机动车保有量达3.22亿辆&#xff1b;机动车驾驶人达4.03亿人。随着机动车和驾驶人数量的增加&#xff0c;交通事故和机动车交通事故责任纠纷案件也在逐年上涨。 部分案件常常因没有目击证人…

行车记录仪的21条问答

行车安全越来越受到人们的重视&#xff0c;许多车主开始打算为自己的座驾配备一款高清行车记录仪&#xff0c;但大家在购买的过程中有各种疑问&#xff0c;下面就行车记录仪的21个问题从技术角度进行分析&#xff0c;希望对大家有所帮助! 1. 问&#xff1a;选择1296p还是1080p?…

凌度记录仪mov视频恢复修复方法

凌度记录仪听名字应该也是个小厂的产品&#xff0c;不过让人感到惊奇的是对于音频编码其采用了高清格式&#xff0c;这个和目前常见的aac压缩编码形成了对比&#xff0c;因为高清音频虽然效果好&#xff0c;但是占用的空间更大。由于这个案例存在部分覆盖的情况&#xff0c;所以…

android 行车记录仪分析,基于Android架构行车记录仪的异常掉电可播放视频方法与流程...

本发明涉及摄录像视频技术领域&#xff0c;特别涉及一种基于Android架构行车记录仪的异常掉电可播放视频方法。 背景技术&#xff1a; 随着车联网概念的兴起和技术的积累&#xff0c;越来越多的智能设备被接入到车辆上。行车记录仪作为非常重要的一种车载设备形态&#xff0c;越…

行车记录仪android,车叮咚:一款搭载 Android 系统的行车记录仪是怎样的?

市面上关于行车记录仪、OBD 盒子以及车机系统的产品有很多品类&#xff0c;但是大多功能单一&#xff0c;可是如果将以上三种功能进行整合并且以后视镜形态出现的话&#xff0c;会有人感兴趣吗&#xff1f; 这款产品叫做车叮咚&#xff0c;创始人张昊告诉雷锋网(公众号&#xf…

嵌入式系统在物联网中的应用及架构

如果说其他技术涉及到的是物联网的某个特定方向&#xff0c;如感知、计算、通信等。嵌入式系统则是物联网中各种物品的表现形式。 首先要谈一下关于架构 在接触嵌入式之后&#xff0c;就出现了一系列的XX架构之类的狼虎之词&#xff0c;什么物联网架构、互联网架构、智能手机的…

【毕设项目】 基于stm32的四轴飞行器设计 - 物联网 嵌入式 单片机

1 简介 Hi&#xff0c;大家好&#xff0c;这里是丹成学长&#xff0c;今天向大家介绍一个学长做的单片机项目 基于stm32的四轴飞行器设计 大家可用于 课程设计 或 毕业设计 单片机-嵌入式毕设选题大全及项目分享: https://blog.csdn.net/m0_71572576/article/details/12540…