git游戏杂谈

  git作为一个知名小游戏,在被Linus开发出来后就广受好评,在程序员圈子内迅速传播,以至于现在很多程序员可以一日无饭,却不能一日无git。是什么能让各路程序员如此着迷?今天,让我们走进git,看一看领略下这款传奇游戏的精彩。

基本概况

  虽然是一款面向程序员的游戏,但git的操作其实并不复杂。总的来说,这是一款有关同步与发展的游戏,游戏模式分为团队在线,个人在线,个人本地等多种,其中又以团队在线最受欢迎,我们今天的讲解就以团队在线为主。

  在团队在线游戏中,参与者一方面需要贡献自己的成就与进展,另一方面又要同步团队中其他人的成果,整个团队的游戏成果以一个树形进行展现,树上每一条分叉称为一个“分支”。在游戏中,你可以提交成果来推进分支,也可以创建新的分支与他人分道扬镳,甚至可以通过合并分支来获取特性。在经过无数次的分裂合并的演变过后,游戏也会演变地千奇百怪,这也是该游戏的魅力所在。

资源介绍

  在git游戏中,每个玩家都拥有3个区域可供操作,线上游戏中还会有一个远程仓库提供同步存储等操作。玩家手中的游戏区域分别为:工作区,暂存区和版本库。

  工作区是玩家日常产出成果的区域,是玩家工作的地点,工作区的内容在git中没有记录,若玩家不进行添加提交,该区域的内容就不会被保存至git。

  暂存区可以理解为工作区和版本库中间的一个缓冲,它存储的是玩家工作区目录的索引,用来保存玩家的工作进度。玩家可以使用add操作将工作区的内容添加进暂存区。

  版本库是最终进行成果保存以及同步的地点,玩家可以使用commit操作将暂存区的内容提交至版本库,这一操作会推进你的本地分支,并在记录上增加你所做的一切。

  最后,远程仓库是存储所有人进展的地方,人们可以通过push操作将自己的成果推送到远程仓库,也可以用pull拉取远程仓库的信息同步到本地。

基本技能

  在游戏中提供了多种技能供玩家使用,如用于同步的add,commit, fetch, push,pull;用于查询的status, log, reflog, diff, show;用于分支操作的branch, merge,remote, reset,checkout,rebase;以及我也不知道怎么分类的balabala。下面我们来详细讲解这些技能

(此处省略一万字)

常见操作

讲解完基本操作,我们来了解一下游戏中常见的一些操作。需要注意的是,当你执行切换分支,同步分支等操作之前,最好确认你的工作区和暂存区是干净的

查看状态

执行任何其他操作之前看一看工作区和暂存区的内容总是好的

git status

储藏加恢复

工作区不干净的时候执行一些操作比如切换分支、同步是十分危险的,如果你不想放弃你的修改,又不想提交他们,将他们储藏起来是一个不错的选择。

git stash           #储藏未提交修改

其他操作          #爱干啥干啥

git stash pop          #把修改应用到所在的分支上

注意:stash是一个栈结构可以保存你的未同步修改,但执行pop时它会将保存的修改放入你当前所在分支,而不是你压栈的分支(如果两个分支不同的话)。另外,因为这是一个栈结构,你pop出的永远是你最后压进去的那个修改(拿到指定修改看下一条)

多次储藏花式恢复大法

上一个连招的缺陷是不能乱压乱恢复,想要恢复指定修改可以使用如下操作

git stash              #储藏(可以有多个)
git stash list               #查看所有储藏
git stash show -p [email protected]{0}      #查看指定储藏
git stash apply [email protected]{0}        #应用指定储藏

本地提交

此套操作用于将工作目录内容提交至本地版本库

git status          #看有啥需要提交

git add dir/file_name     #添加到暂存区

git commit -m "xxx"     #提交到版本库,xxx为提交描述(必须写)

合并分支

将B分支的修改合并到A上,保证A的工作区和暂存区是干净的。

合并完成后可以理解为A和B在内容上是两个“相同”的分支

git checkout A        #切换到A分支

git merge B         #把B的修改合并到A上

注意:可能会有冲突,需要合并冲突。

合并冲突

merge可能有冲突,步骤:

解决冲突          #按git提示挨个打开冲突文件编辑

git add file_name      #把修改添加进去(有几个填几个)

git commit         #添加完提交给git

另一种合并分支(推荐本地)

将B的修改在A上复现一次。rebase和merge不同,rebase相当于将B从和A分叉开始的所有修改都在A上重新提交一次,然后合并完成后B分支会被删除。

为了你的安全考虑,不要对已经在远程仓库的分支执行rebase

git checkout A            #切换到A分支

git rebase B            #将B分支的内容rebase到当前分支

(如果有冲突)

解决冲突              #修改冲突文件

git add              #添加修改

git rebase --continue         #继续rebase

注意:rebase的冲突解决是遇到一个冲突解决一个冲突,然后继续rebase。rebase会造成B分支的删除,不要将其用在远程操作中

远程同步到本地

用于同步远程分支到你的工作区。操作前保证本地目录是干净的

git fetch                #拉取所有远程分支,保存到本地origin/xxx分支(xxx为远程分支名)

git merge origin/branch_name      #将指定远程分支修改同步到本地

如果可以保证没有冲突,并且本地分支没有新修改,可以使用

git pull

本地版本回退大法

脑抽写了一堆奇怪的代码?需求写到一半PM说这个需求又改了?没有理由劳资就是想回到以前的版本并且扔掉所有修改?

只要你的提交没push,这一切都不是问题。如果你已经push了你的修改,不要用reset,因为你的队友可能会弄死你

git log              #查看commit记录,找到想回到的点

git reset --hard <commit>     #尖括号内为指定commit的commit id

注意:以上操作可以让你回到过去的某一次commit的状态,操作方式是将版本库HEAD指针移到你指定的commit,这会造成版本历史中被回退的部分消失,在远程操作中这很反逻辑。

--hard选项会改变你的工作区、暂存区和版本库。如果你想保留你的代码,可以使用--mix选项,这样只会改变暂存区和版本库。还有一个--soft选项,加它只会改变你的版本库。

本地版本回退大法PLUS

手贱reset了以后想恢复?

git reflog            #查看修改历史,里面有你所有的操作(包括reset)

git reset --hard <commit>     #“恢复”

不用想了,你没add和commit的肯定是回不来了,且行且珍惜吧

远程版本回退大法

reset是一个很方便的回退版本的办法,但是不适用于远程。如果你的修改已经push了,这里有一个适用于远程的回退方法

git log            #查看commit记录

git revert <commit>      #撤销选中的更改

git push           #如果你想的话

注意:和reset不同,revert是通过提交一次撤销来进行修改,他不会导致分支回退,而是使分支向前推进一步。和reset的另一个区别是,reset是回到指定的提交,而revert只是撤销指定的那一个提交,其他提交不受影响。

待续

原文地址:https://www.cnblogs.com/Dumblidor/p/9310674.html

时间: 2024-11-14 10:57:39

git游戏杂谈的相关文章

「Githug」Git 游戏通关流程

Githug 他喵的这是个啥!?难道不是 GitHub 拼错了么,和 Git 什么关系? 和游戏又有什么关系? 其实,他的元身在这里:https://github.com/Gazler/githug ,这个命令行工具被设计来练习你的 Git 技能,它把平常可能遇到的一些场景都实例化,变成一个一个的关卡,一共有 55 个关卡,所以将他形象的形容为 Git 游戏. 既然是游戏,作为一个专业的游戏玩家,通关自然是我的最终目标了!!! 安装游戏 没什么好说的,终端运行如下命令即可,如果碰到了墙,自行搬梯

Java开发冒险(AVG)游戏杂谈

之前用过Android,Python的pygame,c#编程语言开发过游戏,一般来说,Java开发的游戏通常是AVG(英文adwenture game的简称)冒险游戏. 就技术角度而言,使用Java AVG 开发可以算得所有游戏类型中最容易的.一款简单 AVG 游戏的制作难度甚至在贪食蛇.俄罗斯方块之下.由于实现的简易性,导致 AVG 的开发重心往往着重于策划及美工,程序员的作用则微乎其微.同时也正因 AVG 开发的门坎约等于 0 ,所以此类型的同人游戏之多即可堪称世界之冠.另外, AVG 开发

游戏杂谈

游戏测试-功能测试

你所想的游戏测试是什么 整天捧个手机玩游戏? 整天几个人联机玩游戏? 加班也是玩游戏? NO NO NO 真实的游戏测试要做哪些 游戏测试是软件测试的一种分支,具备所有软件测试的特性. 游戏测试的产业相关及工作划分,可查看:游戏杂谈 游戏研发迭代 与传统软件行业基本一致,下面为一个简单迭代中对应人员及需要做的事情   策划(BA) 程序 测试 需求阶段 编写策划文档 技术预研 测试计划.环境准备 实现阶段 脚本配制 功能实现 测试用例编写 测试阶段 需求验收 缺陷修复 用例执行.缺陷回归.报告产

游戏测试(2)-游戏测试做什么?

前面已经把什么是游戏测试介绍过,本文主要介绍下游戏测试做什么?以及具体在工作会中有什么问题? 游戏杂谈 游戏测试(1)-什么是游戏测试 成员结构 以常规的测试团队人员来划分(仅功能测试层面):1个Leader+N个功能测试人员(一个比较好听的名字:游戏测试工程师,N可能会等于0)+1个配制管理(此角色有的团队Leader负责,或者程序负责),这是一个常规的标准配制.依据项目的规模人数上有可能会有变动. 一般项目的人员数配制参考 端游项目:1Leader+4~5功能测试人员+1配制管理 页游项目:

学Git,用Git ②

之前介绍了git的最核心功能游戏存档式的本地版本管理.这会我们介绍git剩下的两个核心功能:分支和远程仓库. 1.Git游戏存档进化版--Git分支 git分支的思想很有意思,git允许我们可以随时从现有游戏存档菜单(还记得这个比喻吗)中复制出一个或多个新的游戏菜单,这些新的游戏菜单都会继承以往的存档和文件,并且在每个游戏菜单上都可以接着进行存读档的操作,更厉害的是,在新建立的游戏存档上继续游戏(继续工作),存存取取后,还可以直接丢弃这个游戏存档或者瞬间与原始的游戏存档进行“合并”!.想想有什么

游戏测试(3)-游戏测试的发展

游戏杂谈 游戏测试(1)-什么是游戏测试 游戏测试(2)-游戏测试做什么? 之前已经谈过游戏测试的基本工作,下面再跟大家谈下游戏测试的职业发展. 如果你已经在游戏测试的道路上前进半年或者更久的时候,你会感觉到游戏测试中的工作重复性太高,没有任何技术含量.此时,你可能会想我要去哪里??下面给大家列举几个常见的发展路线及需要具备的技能. 游戏测试技能 继续走测试路线 转向管理:这是一般的测试都会向往的路线(测试主管或者测试组长),当然转向这个岗位,你必须要具备:对整修项目的测试计划的安排.测试策略的

git使用相关资源

git官方文档(git基础,英文版): https://git-scm.com/docs pro git(中文版): https://git-scm.com/book/zh/v2 廖雪峰的Git教程(简单易懂): https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 git-cheat-sheet(常用git命令): http://www.cheat-sheets.org/saved

ANDROID开发技术周报 ISSUE#90

新闻 [图]谷歌把电子宠物做成了Android 7.0的彩蛋:90后的回忆 Android 7.0新功能:官方或第三方应用一目了然 教程 理解Android存储系统架构 本文主要介绍跟存储相关的模块MountService和Vold的整体流程与架构设计.MountService:Android Binder服务,运行在system_server进程,用于跟Vold进行消息通信,比如MountService向Vold发送挂载SD卡的命令,或者接收到来自Vold的外设热插拔事件.Vold:全称为Vo