这,是你的捍卫者! 《Apex Legends》

想要个性鲜明的英雄机制?想要紧张刺激的大逃杀模式?更要酣畅淋漓的射击体验?《Apex Legends》会让你爱不释手!

微信图片\_20220911095513.jpg

近日,EA旗下重生工作室出品的《Apex Legends》(下文简称《Apex》)迎来了三周岁生日,回顾这风风雨雨的三年,当年的一众竞品可谓是死的死,伤的伤。依靠“英雄射击”元素在当年大火的《守望先锋》在暴雪的摆烂下流失了大量的玩家,早已不复当年的话题热度。国服遥遥无期的绝地求生也在外挂太多的抱怨中由收费制转为了免费游玩+豪华版的模式,虽然恢复了一些玩家活跃,但目前的数据和峰值的三百余万在线人数仍相去甚远…… 而《Apex》却在过去的一年中如鱼得水,官方证实2021年新增活跃玩家超30%,年营收入正稳步迈向十亿美金大关。

《Apex》的英雄组队机制给予了玩家在大地图中战斗的多样性和趣味性。诸如拥有透视能力的寻血猎犬、能够快速转移小队的瓦尔基里、可以在混战中提供强力掩体的直布罗陀等等,合理的小队英雄选择与配合会让玩家在各种交火地形中逆转劣势,占领先机。每一局游戏都有二十只小队共六十人参与唯一捍卫者的角逐。

微信图片\_20220911095519.png

同时,为了更好地塑造英雄形象,《Apex》为每个英雄都创作了丰富且立体背景故事与主题曲,各个英雄之间都或多或少有交集。关于新英雄的资料会在新赛季更新前逐步放出以提起玩家兴趣。在《泰坦陨落》宇宙的加持下,《Apex》的枪械、投掷物也都拥有了自己的历史细节。游戏中,每一个地图板块都讲述着英雄间的纠葛与冲突,这些精致的内容给游戏带来了独特的厚度与史诗感,让玩家在游戏时获得了在其他写实战场大逃杀中无法获得的沉浸感与使命感。想象一下,在自己的主场旋律中将敌人击败是一种怎样的体验?

微信图片\_20220911095523.png

《Apex》节奏快,容错率高。与绝地求生许多玩家从跳伞到捡枪到“苟”的节奏不同,由于透视英雄的引入,《Apex》中敌人的位置可以比较容易地锁定,“苟”在对局中获得胜算的很小。此外,玩家造成伤害进而升级护甲的机制、悦耳的子弹命中反馈和粉碎护甲提示音效也在鼓励玩家多多参与对枪。只要玩家不是刻意规避交火,玩家便会经常处于战斗之中。

同时,游戏的枪械TTK(完成一次击杀所需要的时间)被设计得相当长。在同水平一对一较量时,一两个弹夹的交锋往往难分胜负,这就要求玩家的小队能够协调各个英雄的技能,尽量多地创造集火、奇袭的机会,探索不一样的战术玩法。即使队友阵亡变成盒子也并不意味着小队一整局的减员,如果可以在限定时间内拾取队友的信标并且带到复活点复活,此队友即可重生而东山再起。

微信图片\_20220911095527.jpg

可以说,EA与重生的押宝是成功的。《Apex》与EA所发行的大多数游戏不同,三年前,在没有相当时间的预热和曝光下,没有预售,没有折扣,以免费游玩的形式给了玩家们一个惊喜。其售卖皮肤与具有争议的类似抽卡的盈利方式对其拥有的核心玩家数量和社区活跃度提出了相当高的要求。好在《Apex》的基本游戏质量过硬,官方发布后也一直以季度为单位持续修复与更新游戏,保证了玩家的愉悦游玩体验。所谓厚积薄发,在尝鲜的热度退去后,经历了一年的萧条与沉淀,《Apex》终于在2021年从外挂泛滥、主流英雄单调的泥潭中一步步稳步上升,一转“凉了”的颓势。

在《Apex》的中远距离交火中,玩家需要根据敌人的运动趋势和所用枪械的弹速弹道下坠量来打预判枪,这给游戏增添了许多乐趣与复杂性。在一些其他射击游戏中,如《CS:GO》则并没有将弹速和下坠纳入玩法中,讲究快速反应与弹道控制。这两种射击方式各有特点,在基础实现方法上也有不同。

微信图片\_20220911095530.png

一般地,当游戏中的子弹具有不同属性,并且其物理效果对游戏影响显著时,子弹会以预制体的形式在游戏中产生,启用,弃用与销毁。玩家的枪械会一发发地打出“子弹”,当“子弹”命中物体时,进行伤害、效果的计算。这种方式的“子弹”有很强的拟真性,也更耗费性能。当游戏可能的交火距离不长,更注重即时的打击反馈时,会采用射线检测的方式。简单来说,就是以屏幕中央作为射线原点,向“屏幕内”方向发射射线,当此射线命中敌人时,进行相关计算。这种方式的“子弹”性能较好,但难以体现物理特征。

在实际开发中,子弹预制体与射线检测会结合使用以取长补短,给玩家带来更酣畅的射击体验。

微信图片\_20220911095536.jpg

最后,《Apex》的新赛季 DEFIANCE 即将在后天到来,祝派派玩家们新赛季都能玩得开心,有不一样的收获!

无限惊喜,无限治愈!《双人成行》

微信图片\_20220911092940.jpg

祝所有游戏爱好者新年快乐,虎年顺利!

“不好玩给你1000美金!”《双人成行》的开发成员 Joshua Henry 如是说到。

这款游戏真有他说的这么好玩吗?答案是肯定的,《双人成行》不出媒体的预料,在TGA2021六款年度游戏提名游戏中脱颖而出,获得了年度最佳游戏的殊荣。其在短短六个月时间内卖出三百万份的惊人销售战绩,也足见游戏制作的精良和玩家对游戏的支持与喜爱。

微信图片\_20220911095223.jpg

在《双人成行》中,两位玩家将分别扮演一对感情破碎,关系即将走到终点的夫妻双方——科迪与小梅。他们的女孩知道父母要离婚的决定后,回到自己的房间向哈金博士——一本有魔力的童书求助,希望能够修复父母的感情裂痕。

微信图片\_20220911095227.jpg

随后,神奇的事情发生了,科迪与小梅化为了两只迷你布偶玩具,进入了由家中各色物品构成的童话世界。在这个世界中,闲置多年的旧家电、来不及整理的小物件、庭院里的动物们都成为了一个个有情感的能交流的角色,和科迪和小梅发生了无数的惊喜与故事。为了能够恢复原样,科迪和小梅必须相互协作闯过难关。一路上,他们一同修理了报废的吸尘器,战胜了强大的黄蜂群,击败了暴戾的发条人…

旅途中,有困顿,有欢笑,没有的是科迪和小梅之间的隔阂与猜疑,哈金博士,或者说游戏的关卡设计者是智慧的,用生活中点点滴滴的元素创造了各种关卡,给玩家以多感官的美的感受。玩家可以像自己童年时想象的那样和鼹鼠对话,帮助他们从大黄蜂手中夺回领地,也可以驾驶飞机模型,顶着在草坪的低空惊险地飞略…… 结束了一关紧张刺激的冒险,和玩伴留念一下吧!精巧设计的游戏场景甚至为玩家准备了合影的景点——这才称得上完整的旅程。难怪魂系游戏的主要制作人宫崎英高对《双人成行》给予好评:“我很享受那段时间!该游戏确实给我留下了特别的印象,至少我努力完成了它!”

微信图片\_20220911095233.jpg

玩家完全不用担心自己的游戏水平不足以完成冒险,《双人成行》提供了详细而友好的引导机制来帮助新手快速上手。关卡的难度并不在于操作,而在于玩家对游戏环境的理解和想象力。如果玩家脑洞足够大,一命通关并不是什么难事。在与伙伴共度难关之外,游戏还设置了大量双人对抗的经典小游戏,诸如坦克大战、打地鼠等等供玩家们娱乐,大大增加了玩家间的互动性与整体游戏的趣味性。《双人成行》融汇了射击、动作、解密、合作等等主流游戏要素,各个要素安排得紧凑有趣,切换得自如顺畅,玩家很容易就沉浸到童话世界中,流连忘返,从某种意义上来说,此作堪称新玩家进入游戏世界的指导教程。

微信图片\_20220911095237.jpg

随着游戏的深入,科迪与小梅触碰到了许多尘封已久的物件,捡拾起许多平日里遗忘的生活细节,重新发现了彼此的闪光点。一次次携手脱离险境,一次次共通领略美景,彼此的感情在不断回温,终于,科迪与小梅在属于他们的唱片机舞台上,迎着暖光徐徐上升,深深拥抱在一起,破镜重圆。

据VARIETY独家报道,鉴于《双人成行》作品的出众品质,其开发商 Hazelight Studios 正在与 dj2 Entertainment 紧密合作,寻求此游戏的电影电视剧化改造。想必届时,更多的游戏电影爱好者们能够从作品中感受到满满的趣味与温情。

微信图片\_20220911095241.jpg

当然,电影电视版的《双人成行》必然会失去一部分交互的乐趣。区别于没有交互的电影与动画,游戏的一大乐趣便是“活”,便是玩家能体会到的即使变化。那么,现代游戏是如何处理玩家与游戏的交互,让游戏活起来的呢?

微信图片\_20220911095244.png

从视觉上来说,游戏是画面的“活”,玩家可以操纵角色以各个角度观察同一物体的不同表面,获得最大程度上的探索的乐趣。在游戏开发中,引擎常常用Tick或者帧的概念来管理动态的交互与画面。开发者们给游戏的每一个刻度(或是时间,或是帧,或是Tick)安排了一些任务。以射击游戏中的子弹为例,在一些游戏中,开发者们在游戏的每一帧检查子弹是否命中了目标,如果命中,则执行后续计算,完成造成伤害、击杀等等流程,如果未命中,则继续飞行。游戏中刻度的概念简化了许多交互与运动方面的问题,让大量的复杂互动成为了可能。

打僵尸的战术与节奏?《彩虹六号:异种》

在两次跳票和一次改名后,拆迁六号的干员们终于在灾变后的美国本土重新集结,由维护世界和平的反恐小组化身为保护地球的REACT精英小队。

1月20日凌晨,育碧的《彩虹六号:围攻》(下文简称《围攻》)衍生作《彩虹六号:异种》(下文简称《异种》)正式推出。同时,游戏也首发登陆了Xbox Game Pass订阅服务。微信图片\_20220911095033.jpg

尽管在中文网络上《异种》的宣发有所欠缺,但其凭借独特的合作潜行射击玩法、出众的灾变氛围感、精心设计的Roguelike机制和彩虹六号的战术硬核IP等要素,在玩家间赢得了不错的口碑。据官方推文报道,游戏上线第一周就拥有逾三百万玩家。从1月28日起,好友通行证机制的加入也许会带来更多的玩家流量。

在《异种》中,玩家需要选择并操作配备有先进科技装备的REACT精英干员组成三人小队来完成一个个针对外星入侵生物古菌的研究、打击任务。每个REACT干员都有独特的技能和配枪,可以在任务中为队友和自己提供各具特色的支援和帮助,合理的小队配置可以让整个游戏过程充满趣味与内涵。

略显不足的是,《异种》的新手教程和游戏中的任务引导说不上详尽,如果玩家是第一次接触此类游戏,可能会在刚开始的游玩中有一些迷失。但瑕不掩瑜,在基本上手游戏后玩家所获得沉浸的游戏体验,是相当有魅力的。

微信图片\_20220911095045.jpg

在《异种》中,每局游戏都由随机的三个任务组成,每完成一个任务,干员都会收到经验奖励。获得的经验将用于提升干员等级,以帮助干员获得更强大的火力装备支持。如果玩家的干员不幸在完成任务的过程中倒地,玩家也可以呼唤同伴将其干员送到撤离点。

玩家们可以在任意时刻前往撤离点呼叫直升飞机中止任务。最终撤离时,干员当前的状态会被保留。如果干员不幸倒地且并未被带到撤离点,干员将会被标记为MIA(在执行任务过程中失踪),在玩家的下一局游戏中,将会包括一个营救MIA干员的任务。一旦营救任务失败,该干员会损失大量经验值后归队。员。

微信图片\_20220911095050.jpg

区别于其他合作射击游戏,《异种》似乎并不打算让玩家以一种射爆的姿态通关。本作中连发武器有较大的后座力和较高的射速,难以保证长时间的火力输出,各色消音装备和静音潜行的移动设定让玩家得以从各种复杂的地形中穿过而不惊动古菌。一旦惊动古菌就可能意味着游戏前期无意义的损伤或减员,大大增加通关的难度。玩家可以体验从各种变异体身边潜行而过的紧张感、窒息感。

随着玩家对游戏的探索加深,游戏的难度也不断加大,一些战术手段,诸如无人机探索地形对任务的开展也变得相当重要。在一个任务开始前,释放无人机搜索任务目标,任务中期和队友紧密交流抱团,任务后期不抛弃不放弃,成为了大多数玩家的节奏选择。 资源的分配在游戏过程中也显得相当关键,如果一个队友抢占了所有探索到的医疗补充和弹药补充而不共享给队友,往往就会陷入队友双亡的局面。

微信图片\_20220911095054.jpg

可以说,虽然都是合作射击游戏,但是此作与《深岩银河》、《喋血复仇》等爽快射击不同,《异种》更强调精准击杀、整体协调、任务取舍。随着游戏时间的增长,游戏内容也会越来越丰富和具有吸引力,如果有耐心度过开始阶段,并对战术合作的内容有兴趣,玩家可以有不少欢乐和收获。

作为彩虹六号宇宙中的衍生作品,同由AnvilNext引擎加持的《异种》画面质量效果依承前作、美术风格以暗黑、亮黄为主,整体环境表现出强烈的灾变颓败感。REACT的精英干员们也都是《围攻》中备受玩家青睐的优秀干员。同时,游戏的操作逻辑也是原汁原味,虽然为了适应PVE的节奏,干员的移动速度有了些许提升,但是诸如侧身探头、无法跳跃等操作特性有很好的保留。此外,各种细节的环境音效和大量可破坏的墙体、地板,为游戏中逼仄的室内场景带来了幽怖的氛围感和无限的可能性。

微信图片\_20220911095059.png

《异种》中这些出色的表现效果都要拜现代游戏引擎所赐。玩家可能对目前的主流商用引擎并不陌生,随口就可以说出采用诸如cocos、Unity,虚幻等引擎制作的知名游戏,甚至可以依据游戏所用的引擎,来对该游戏的画面和性能有一个模糊的评价。

可是,究竟什么是游戏引擎呢?

简单来说,游戏引擎是对各种游戏资源的处理办法的整理与集合,包括但不限于算法、贴图、音频、特效、模型。不同的游戏引擎对相关资源的处理侧重点各有不同。它们为游戏制作者们提供好了易于操作的设计界面、为游戏的运行构建了基础框架,使得游戏制作不再是属于资深程序员的特有项目,而变成每个有梦想的游戏人都能够上手编辑的创作活动。

以Unity为例,其直观的工作窗口设计、强大的平台兼容性让其广受游戏制作者青睐。据统计,在中国市场,有超过一半的手游基于Unity开发。同时,Unity的社区活跃度相当高,网络教程、技术讲座数不胜数,官方也提供了很多的优质资源供游戏制作人学习和使用。

利用await/async 与 Task 关键词替换协程功能

Intro

参考视频:# Unity async / await: Coroutine’s Hot Sister [C# & Unity]

协程是Unity提供的异步解决方法,但是实际应用时有诸多不便与不优雅之处。本文将用几个例子对比参照协程与await/async关键字。当然,Unity指出,在Unity中写多线程代码应当参考Unity - Manual: C# Job System

旧例

利用协程转动三个物体,并使得这三个物体逐个停止。

给出下列协程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System.Collections;
using UnityEngine;

public class Shape: MonoBehaviour()
{
public IEnumerator RotateForSeconds(float duration)
    {
    var end = Time.time + duration;
    while(Time.time < end)
    {
    transform.Rotate(new Vector3(1,1)*Time.deltaTime*150;
    yield return null;
    }
    }
}

给出下列调用协程的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System.Collections;
using UnityEngine;

public class ShapeManager: MonoBehaviour()
{
[SerializeField] private Shape[] _shapes;

public void BeginTest()
{
for(var i = 0; i<_shapes.Length;i++)
{
StartCoroutine(_shapes[i].RotateForSeconds(1+1*i);
}
}
}

I Shot You First: Networking the Gameplay of Halo: Reach

Refer to: I Shot You First: Networking the Gameplay of Halo: Reach

Architecture

Common simplifying approaches

  1. Lockstep(deterministic, input-passing)

    对于输入和模拟及时性要求不高的游戏,例如RTS。

    通过Game Loop来控制游戏的演进

  2. Reliable transport protocols(TCP or homegrown)

    需要高带宽和可靠的环境

    TCP的延迟问题需要解决

  3. Send all networked state as a single blob(atomically)

    总是同步所有物体的情况,对于小规模的网络是非常好的

Halo has to solve the hard problem

Highly competitive multiplayer action game

对于现代的射击游戏,每个玩家都会对游戏产生关键影响,生成大量数据
75fabf2ee588209b82c06dd08ab51f57.png
显然,将一切物体网络化(需要同步)的成本是非常高的

TRIBES points the way

The TRIBES Engine Networking Model

A host/client model, resilient to cheating

Protocols for semi-reliable data delivery(不强制重传)

Terms

Replication

The communication of state or events to a remote peer

peers 之间的同步性

Authority

Permission to update the persistent sate of an object

Prediction

Extrapolating the current properties of an entitiy based on historial authoritative data and local guesses about the future

客户端在收到两个网络状态(信息)之间,本地对网络游戏物体的预测、判断

Bungie’s Networking Stack

Layer Purpose
Game Runs the game
Game Interface Extract and apply replicated data(提取游戏世界中的定量数据)
Prioritization Rate the priority of all possible replication options (选择优先发送什么数据)
Replication Protocols with various reliability guarantees
Channel Manager Flow and congestion control
Transport Send & receive on sockets

Replication Protocol

State Data

hots -> only client

Guaranteed eventual delivery of most current state, host -> client only

  • Object position

  • Object health

  • Other Key Game Info

Events(describing transitions )

Unreliable notifications of transient occurrences, telling why something happen.

Why player is dead

host -> client and client -> host

  • Fire the Weapon

  • This weapon was fired

几乎所有Event都有可能被dropped

Control data

微信开发者工具 版本管理 Azure Repo

通过ssh连接

生成ssh密钥
Windows Platform:
win+r键调出“运行”
输入cmd调出命令行
48510d187dc59f447bc4576b16cbdc40.png
输入
ssh-keygen -t rsa -C "xiaonan.pan"
-t rsa 表示采用 rsa 算法
-C “xiaonan.pan” 表示注释
93734751351e9e13ff5a9db7e727f0fb.png
键入 密钥保存的路径(一般照抄即可)

在给定的文件夹C:\Users\xiaon.ssh下,我们看到
3188872e89a0089a9e20ddb437a3db8b.png
id_rsa.pub即为公钥内容
选择记事本打开之
复制其中所有的内容,填写到GitHub的Key中
6e9553c6216f84d144054c9df2d1054a.png
a4622b799add66b0752bb413dcc9d20b.png
单击Add SSH key

Ubuntu Platform:
在终端输入
ssh-keygen -t rsa -C "xiaonan.pan"
后续步骤如上。

.ssh保存在 ~/.ssh/下
65f9496157f9c72ff0fe04d1a9e44871.png
利用
vim id_rsa.pub 
打开复制公钥,上传
在使用 git 命令行时注意使用SSH连接:
git clone git@ssh.dev.azure.com:v3/CPT202-GroupA-8/Maplus/Maplus

id_rsa 即为 rsa私钥,须保密保存
id_rsa 即为 rsa公钥,上传到Azure SSH key 管理页面

cd38127dc8ece3f586c3661d26454726.png

d742570eb34beadbc1a7d23a695f2eca.png

右下角确认add

随后配置微信开发者工具的版本管理
3faa4792f246fac391c044660e27dea5.png
设置

网络和认证改为
b208d48255ed44e6210876e95ef5871a.png
密码口令是刚刚 ssh生产中 passphase 的内容,此处我并没有设置passphase,故留空。

c7172f79cbb2e37242715dd38a7bbb9c.png
配置远程代码仓库

754df68baa544e476739a2aca73b0d43.png
URL填入SSH地址
16416134d217416dec23007b84a0d82d.png
804c0715c6d2f7922fa436fbd89e5fa7.png

配置完成。

Memory Management

为什么要有逻辑地址的概念?
程序是给定的,硬件可用的地址是变化的。
所以需要引入逻辑地址的概念,做逻辑地址与物理地址的映射。

如何映射?

固定偏移量映射
缺陷:

  1. 一个进程使用的最大内存量是变化的。
  2. 分配的内存的利用效率不高,内碎片
  3. 外碎片

分页
程序逻辑内存分为多个页(page)
物理内存分为多个帧(page frame)
一个内存地址处存储的内容 为一个字节, 1B
利用页表(Page Table) 存储二者的对应关系
页号,帧号,当前这一条目是否可用,读写权限,脏….
1ef6d065ab4c851654903930af5fadc2.png
页表每个进程都需要维护

内存的一个地址里面是一个字节(Byte)的数据
32位操作系统物理地址有2^32个,因而只能使用4GB的内存。
任何一个32位的内存可操作的逻辑地址是2^32个即4GB。
上条势必会造成多个程序使用的总内存和大于物理内存,此时会借助磁盘,将不着急用的内存先放进磁盘,页表中显示的是磁盘。

内存映射的过程。

32位系统,256MB内存,页大小为4KB(有四千条地址)
32位程序
4KB = 2^12 bit

也就是说,1个页中提供12位偏移
逻辑地址 32bit = 20bit页号(32-12)bit + 12bit偏移
物理地址 28bit = 16(28-16)bit,即16bit帧号 + 12bit偏移

分页过程中,需要两次读内存时间上有待优化,页表占用空间较大空间上也有待优化(先读内存中的页表,再去拿到对应的地址)

分页中的时间与空间优化。
TLB快标,将最长访问的8-128个页表项存到访问速度更快的硬件中,一般是在MMU中(集成在CPU中)

内存管理-分段 segment 段号+页号
段仅仅保留了逻辑上的意义。
进程间通信-共享内存方式

Cpu的cache如何起作用:

CPU接收到指令后,它会最先向CPU中的一级缓存(L1 Cache)去寻找相关的数据,然一级缓存是与CPU同频运行的,但是由于容量较小,所以不可能每次都命中。这时CPU会继续向下一级的二级缓存(L2 Cache)寻找,同样的道理,当所需要的数据在二级缓存中也没有的话,会继续转向L3 Cache、内存(主存)和硬盘.

984a1ab88c7ba5734a4106cb080a49d6.png

Using Git

Intro

The git directory acts as a database for all the changes tracked in Git and the working tree acts as a sandbox where we can edit the current version of the files

Staging Area(index)

A  file maintained by Git that contains all of the information about what files and changes are going to go into your next commit

Any Git project will consist of 3 sections: Git directory, working tree, Staging area

After modifying a file, we need to stage those changes and then commit them afterwards

chmod +x all_check.py //makes the scripts excutable

A commit message is required, or the commit will be aborted

which command would we use to view pending changes?
git status 

to generate a patch to fix the current bug
diff fix_permission.py fix_permissions_modified.py > fix_permission.patch

apply the patch to the file:
patch fix_names.conf < fix_names.patch 

the wdiff commandhighlights the words that changed in a file instead of working by line

A commit is a collection of edits which has been submitted to the version control system for safe keeping

Within a VCS, project files are organized in centralized locations called repositories where they can be called upon later

Git 常见命令

git add will add a file to the staging area and mark it for tracking

git log will give us information about the author of each commit, its timestamp, and each commit message

git config -l is used to check the current user configuration

git status is used to retrieve information about changes waiting to be committed

1
2
user@ubuntu: ~$ git config --global user.email "me@example.com"
user@ubuntu: ~$ git config --global user.name "My name"

Workflow

init git:

1
2
3
4
user@ubuntu: ~$ mkdir checks
user@ubuntu: ~$ cd checks
user@ubuntu: ~/checks$ git init
Initialized empty Git repository in /home/user/checks/.git/

The area outside the git directory is the working tree. The working tree is the current version of your project.

add git

-m to pass the commit message
user@ubuntu: ~/checks$ git commit -m 'Add periods to the end of sentences.'

anatomy of a  Commit Message

  • short summary
  • detailed explaation
  • more infomation related to the message

git log :
4a214c047c5e1c49c6c1edc7b0703ee8.png
git log -p 

git commit -a 
A shortcut to stage any changes to tracked files and commit them in one step
git commit -a dosen’t work on new files

Can only write short message

user@ubuntu:~/scripts$ git commit -a -m "Call check_reboot from main, exit with 1 on error"

for truely small changes

Git uses the HEAD alias to represent the currently checked-out snapshot of your project.

This lets you know what the contents of your working directory should be.

user@ubuntu:~/scripts$ git add -p

#when using -p flag, git will show us the change being added and ask us if we want to stage it or not

1
2
3
user@ubuntu:~/scripts$ git diff #only unstaged changes by default

user@ubuntu:~/scripts$ git diff -staged #to see the changes that are staged but not committed

we can see the actual stage changes before we call git commit

You can remove files from your repository with the git rm command, which will stop the file from being tracked by git and remove it from the git directory

git checkout
followed by the name of the file you want to revert.

git reset

We’ve added something to the staging area that we didn’t actually want to commit, we can unstage our changes by using git reset.

git add
end up adding any change done in the working tree to the staing area

--amend
git commit --amend
overwirte the previous commit

Avoid amending commits that have already been made public

With git revert, a new commit is created with inverse changes. This cancels previous changes instead of making it as though the original commit never happened.

You can verify the data you get back out is the exact same data you put in

git show

help us easily view the log message and diff output the last commit if we don’t know the commit ID

8d7f473673c37118f4219256950412bc.png

git show hashcommitid
ca21b42d229ac74ac7320a1603bb76d4.png

git revert hashcommitid
user@ubuntu:~/scripts$ git revert 30e70