没错,不是git也不是GitHub,就是githug.首先说下什么是Githug:Githug是一个在命令行通过git语句进行通关的代码游戏,可以帮助使用者进行git命令的训练,共计55关.此游戏可以重置,且有记忆存档,还有提示,是练习git命令的不二选择.
下面简单介绍下安装以及使用:
Githug分为Linux版本和Windows版本,博主电脑是Windows7,64bit,虽然也用虚拟机,但是为了方便使用还是在Windows下面安装的,不管是哪个系统,Githug的安装都是方便快捷.

Windows下面安装:Githug是基于ruby的,所以要先安装ruby.而且前提你电脑上安装了git,并且配置了环境变量到PATH.那么接下来先安装ruby,https://rubyinstaller.org/downloads/
在本页面中选取适当的版本进行下载安装,注意:安装时勾选“Add Ruby executables to your PATH”,忘了勾选的要配置Ruby安装目录下面的bin目录到环境变量的PATH中。.安装成功后CMD命令行输入ruby –version,可以看到ruby版本:

安装好ruby后再安装Githug:
在cmd下面输入ruby –version查看ruby是否安装好了,如果没有,则说明环境变量还没有生效,注销户用再登录.
开始安装Githug:
在cmd下面输入gem install githug安装Githug,由于博主事先安装过了,所以从网上找了位博友的截图.

然后输入命令:githug 就可以开始游戏了.

注意:
1.Windows下面没有vi编辑器的,在前几关有修改文件内容,可以手动在图形界面使用记事本进行修改,修改正确后保存然后Githug命令也是可以检测到改动的,成功的话就可以进行下一关.
2.不同版本的Githug,通关要求题目是有一定的差异的,看清题目再作答.
Linux下安装Githug:步骤大同小异,$ gem install githug,然后选择y就创建了个git_hug文件夹.

下面再说下Githug需要使用的基本命令,这几个命令与git无关,只是Githug的操作命令:
githug play:闯关,即验证你是否已经完成了关卡要求的任务,如果完成了,就会自动跳到下一关。因为这个命令最常用,所以可以缩写成 githug,省略后面的 play。

githug:等同githug play。

githug hint:提示,如果你对某个任务没有头绪,可以从这个提示信息得到一些启发。

githug reset:重置,执行任务的过程是用 git 命令操作文件,但是如果改来改去地把文件弄乱了想重新过这关,就要用这个命令恢复到初始状态。

githug levels:查看55关的各自名称。
当然,在玩Githug之前,了解一些git的常用命令也是极好的,下面粘上一些常见的Git命令:
详情见文章末尾…..
博主安装好后玩了40多关卡住了,命令对,但是进入不了下一关,正在寻找破解方法,委屈.JPG,从22关才想着把学习记录下来,然后就截了几张图,下面一股脑放上来啦,注意,本文不是通关教程,网上有很多的教程的,可以自行百度,毕竟: Stop Trying to Reinvent the Wheel.
下面粘图啦:
第22关:

第23关:

第24关:

第25关:

第26关:

第27关:

第28关:

第29关:

第30关:

第31关:

第32关:

第33关:

第34关:

第35关:

第36关:

第37关:

第38关:

第39关:

第40关:

第41关:

第42-55关:百度.com

git常用命令,转自https://www.cnblogs.com/my–sunshine/p/7093412.html,学习下:
git init
在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当前文件夹下创建一个.git文件夹.

git clone
获取一个url对应的远程Git repo, 创建一个local copy.
一般的格式是git clone [url].
clone下来的repo会以url最后一个斜线后面的名称命名,创建一个文件夹,如果想要指定特定的名称,可以git clone [url] newname指定.

git status
查询repo的状态.
git status -s: -s表示short, -s的输出标记会有两列,第一列是对staging区域而言,第二列是对working目录而言.

git log
show commit history of a branch.
git log –oneline –number: 每条log只显示一行,显示number条.
git log –oneline –graph:可以图形化地表示出分支合并历史.
git log branchname可以显示特定分支的log.
git log –oneline branch1 ^branch2,可以查看在分支1,却不在分支2中的提交.^表示排除这个分支(Window下可能要给^branch2加上引号).
git log –decorate会显示出tag信息.
git log –author=[author name] 可以指定作者的提交历史.
git log –since –before –until –after 根据提交时间筛选log.
–no-merges可以将merge的commits排除在外.
git log –grep 根据commit信息过滤log: git log –grep=keywords
默认情况下, git log –grep –author是OR的关系,即满足一条即被返回,如果你想让它们是AND的关系,可以加上–all-match的option.
git log -S: filter by introduced diff.
比如: git log -SmethodName (注意S和后面的词之间没有等号分隔).
git log -p: show patch introduced at each commit.
每一个提交都是一个快照(snapshot),Git会把每次提交的diff计算出来,作为一个patch显示给你看.
另一种方法是git show [SHA].
git log –stat: show diffstat of changes introduced at each commit.
同样是用来看改动的相对信息的,–stat比-p的输出更简单一些.

git add
在提交之前,Git有一个暂存区(staging area),可以放入新添加的文件或者加入新的改动. commit时提交的改动是上一次加入到staging area中的改动,而不是我们disk上的改动.
git add .
会递归地添加当前工作目录中的所有文件.

git diff
不加参数的git diff:
show diff of unstaged changes.
此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容.

 若要看已经暂存起来的文件和上次提交时的快照之间的差异,可以用:git diff --cached 命令.show diff of staged changes.(Git 1.6.1 及更高版本还允许使用 git diff --staged,效果是相同的).git diff HEADshow diff of all staged or unstated changes.也即比较woking directory和上次提交之间所有的改动.如果想看自从某个版本之后都改动了什么,可以用:git diff [version tag]跟log命令一样,diff也可以加上--stat参数来简化输出.git diff [branchA] [branchB]可以用来比较两个分支.它实际上会返回一个由A到B的patch,不是我们想要的结果.一般我们想要的结果是两个分支分开以后各自的改动都是什么,是由命令:git diff [branchA]…[branchB]给出的.实际上它是:git diff $(git merge-base [branchA] [branchB]) [branchB]的结果.

git commit
提交已经被add进来的改动.
git commit -m “the commit message”
git commit -a 会先把所有已经track的文件的改动add进来,然后提交(有点像svn的一次提交,不用先暂存). 对于没有track的文件,还是需要git add一下.
git commit –amend 增补提交. 会使用与当前提交节点相同的父节点进行一次新的提交,旧的提交将会被取消.

git reset
undo changes and commits.
这里的HEAD关键字指的是当前分支最末梢最新的一个提交.也就是版本库中该分支上的最新版本.
git reset HEAD: unstage files from index and reset pointer to HEAD
这个命令用来把不小心add进去的文件从staged状态取出来,可以单独针对某一个文件操作: git reset HEAD - - filename, 这个- - 也可以不加.
git reset –soft
move HEAD to specific commit reference, index and staging are untouched.
git reset –hard
unstage files AND undo any changes in the working directory since last commit.
使用git reset —hard HEAD进行reset,即上次提交之后,所有staged的改动和工作目录的改动都会消失,还原到上次提交的状态.
这里的HEAD可以被写成任何一次提交的SHA-1.
不带soft和hard参数的git reset,实际上带的是默认参数mixed.

 总结:git reset --mixed id,是将git的HEAD变了(也就是提交记录变了),但文件并没有改变,(也就是working tree并没有改变). 取消了commit和add的内容.git reset --soft id. 实际上,是git reset –mixed id 后,又做了一次git add.即取消了commit的内容.git reset --hard id.是将git的HEAD变了,文件也变了.按改动范围排序如下:soft (commit) < mixed (commit + add) < hard (commit + add + local working)

git revert
反转撤销提交.只要把出错的提交(commit)的名字(reference)作为参数传给命令就可以了.
git revert HEAD: 撤销最近的一个提交.
git revert会创建一个反向的新提交,可以通过参数-n来告诉Git先不要提交.

git rm
git rm file: 从staging区移除文件,同时也移除出工作目录.
git rm –cached: 从staging区移除文件,但留在工作目录中.
git rm –cached从功能上等同于git reset HEAD,清除了缓存区,但不动工作目录树.

git clean
git clean是从工作目录中移除没有track的文件.
通常的参数是git clean -df:
-d表示同时移除目录,-f表示force,因为在git的配置文件中, clean.requireForce=true,如果不加-f,clean将会拒绝执行.

git mv
git rm - - cached orig; mv orig new; git add new

git stash
把当前的改动压入一个栈.
git stash将会把当前目录和index中的所有改动(但不包括未track的文件)压入一个栈,然后留给你一个clean的工作状态,即处于上一次最新提交处.
git stash list会显示这个栈的list.
git stash apply:取出stash中的上一个项目(stash@{0}),并且应用于当前的工作目录.
也可以指定别的项目,比如git stash apply stash@{1}.
如果你在应用stash中项目的同时想要删除它,可以用git stash pop

 删除stash中的项目:git stash drop: 删除上一个,也可指定参数删除指定的一个项目.git stash clear: 删除所有项目.

git branch
git branch可以用来列出分支,创建分支和删除分支.
git branch -v可以看见每一个分支的最后一次提交.
git branch: 列出本地所有分支,当前分支会被星号标示出.
git branch (branchname): 创建一个新的分支(当你用这种方式创建分支的时候,分支是基于你的上一次提交建立的).
git branch -d (branchname): 删除一个分支.
删除remote的分支:
git push (remote-name) :(branch-name): delete a remote branch.
这个是因为完整的命令形式是:
git push remote-name local-branch:remote-branch
而这里local-branch的部分为空,就意味着删除了remote-branch

git checkout
  git checkout (branchname)

切换到一个分支.
git checkout -b (branchname): 创建并切换到新的分支.
这个命令是将git branch newbranch和git checkout newbranch合在一起的结果.
checkout还有另一个作用:替换本地改动:
git checkout –
此命令会使用HEAD中的最新内容替换掉你的工作目录中的文件.已添加到暂存区的改动以及新文件都不会受到影响.
注意:git checkout filename会删除该文件中所有没有暂存和提交的改动,这个操作是不可逆的.

git merge
把一个分支merge进当前的分支.
git merge [alias]/[branch]
把远程分支merge到当前分支.

 如果出现冲突,需要手动修改,可以用git mergetool.解决冲突的时候可以用到git diff,解决完之后用git add添加,即表示冲突已经被resolved.

git tag
tag a point in history as import.
会在一个提交上建立永久性的书签,通常是发布一个release版本或者ship了什么东西之后加tag.
比如: git tag v1.0
git tag -a v1.0, -a参数会允许你添加一些信息,即make an annotated tag.
当你运行git tag -a命令的时候,Git会打开一个编辑器让你输入tag信息.

 我们可以利用commit SHA来给一个过去的提交打tag:git tag -a v0.9 XXXXpush的时候是不包含tag的,如果想包含,可以在push时加上--tags参数.fetch的时候,branch HEAD可以reach的tags是自动被fetch下来的, tags that aren’t reachable from branch heads will be skipped.如果想确保所有的tags都被包含进来,需要加上--tags选项.

git remote
list, add and delete remote repository aliases.
因为不需要每次都用完整的url,所以Git为每一个remote repo的url都建立一个别名,然后用git remote来管理这个list.
git remote: 列出remote aliases.
如果你clone一个project,Git会自动将原来的url添加进来,别名就叫做:origin.
git remote -v:可以看见每一个别名对应的实际url.
git remote add [alias] [url]: 添加一个新的remote repo.
git remote rm [alias]: 删除一个存在的remote alias.
git remote rename [old-alias] [new-alias]: 重命名.
git remote set-url [alias] [url]:更新url. 可以加上—push和fetch参数,为同一个别名set不同的存取地址.

git fetch
download new branches and data from a remote repository.
可以git fetch [alias]取某一个远程repo,也可以git fetch –all取到全部repo
fetch将会取到所有你本地没有的数据,所有取下来的分支可以被叫做remote branches,它们和本地分支一样(可以看diff,log等,也可以merge到其他分支),但是Git不允许你checkout到它们.

git pull
fetch from a remote repo and try to merge into the current branch.
pull == fetch + merge FETCH_HEAD
git pull会首先执行git fetch,然后执行git merge,把取来的分支的head merge到当前分支.这个merge操作会产生一个新的commit.
如果使用–rebase参数,它会执行git rebase来取代原来的git merge.

git rebase
–rebase不会产生合并的提交,它会将本地的所有提交临时保存为补丁(patch),放在”.git/rebase”目录中,然后将当前分支更新到最新的分支尖端,最后把保存的补丁应用到分支上.
rebase的过程中,也许会出现冲突,Git会停止rebase并让你解决冲突,在解决完冲突之后,用git add去更新这些内容,然后无需执行commit,只需要:
git rebase –continue就会继续打余下的补丁.
git rebase –abort将会终止rebase,当前分支将会回到rebase之前的状态.

git push
push your new branches and data to a remote repository.
git push [alias] [branch]
将会把当前分支merge到alias上的[branch]分支.如果分支已经存在,将会更新,如果不存在,将会添加这个分支.
如果有多个人向同一个remote repo push代码, Git会首先在你试图push的分支上运行git log,检查它的历史中是否能看到server上的branch现在的tip,如果本地历史中不能看到server的tip,说明本地的代码不是最新的,Git会拒绝你的push,让你先fetch,merge,之后再push,这样就保证了所有人的改动都会被考虑进来.

git reflog
git reflog是对reflog进行管理的命令,reflog是git用来记录引用变化的一种机制,比如记录分支的变化或者是HEAD引用的变化.
当git reflog不指定引用的时候,默认列出HEAD的reflog.
HEAD@{0}代表HEAD当前的值,HEAD@{3}代表HEAD在3次变化之前的值.
git会将变化记录到HEAD对应的reflog文件中,其路径为.git/logs/HEAD, 分支的reflog文件都放在.git/logs/refs目录下的子目录中.

特殊符号:
^代表父提交,当一个提交有多个父提交时,可以通过在^后面跟上一个数字,表示第几个父提交: ^相当于^1.
~相当于连续的个^.

Githug And Git相关推荐

  1. 「Githug」Git 游戏通关流程

    Githug 他喵的这是个啥!?难道不是 GitHub 拼错了么,和 Git 什么关系? 和游戏又有什么关系? 其实,他的元身在这里:https://github.com/Gazler/githug  ...

  2. 【VCS】Git之无尽探索

    本文是关于Git探索的一篇文章,阐述了Git的大部分命令和使用方式,并列举了几个典型的使用场景以供参考和体会. 多host环境 clone,remote,fetch,pull,push gitigno ...

  3. iOS开源资源汇总(完整项目,三方,博客,视频)长期更新

    下边都学会就大神了: 声明:都是网上搜集的,能标明出处的都标了.别只搜集而不看,与君共勉.. 先看完整项目完整App@HackerNews-React-Native用 React Native 完成的 ...

  4. 【IOS】iOS开发常用三方库、插件、知名博客等等

    此文章转自github:https://github.com/Tim9Liu9/TimLiu-iOS 介绍 这是一个用于iOS开发的各种开源库.开源资料.开源技术等等的索引库. 具体内容 ====== ...

  5. git游戏githug

    githug是一个git游戏,旨在通过游戏熟悉git中的概念. 1. 安装 gem install githug 使用gem如果遇到网络连接的问题,把gem服务器更换为国内服务器. gem sourc ...

  6. githug通关部分黏贴(git代码练习)

    最近发现了githug一个小游戏是帮助学习git的各种命令 玩了几遍 把部分代码贴出来 ******************************************************** ...

  7. 闯过这 54 关,点亮你的 Git 技能树 (五) - 完结篇

    这是一个系列文章,介绍学习 Git 的一个小游戏 - githug,如果你是第一次看到,请先阅读: 闯过这 54 关,点亮你的 Git 技能树 闯过这 54 关,点亮你的 Git 技能树(一) 闯过这 ...

  8. Githug第42关rebase_onto通关秘籍

    Githug是一个用来了解.熟悉Git的一个非常好的游戏. 目前网站上收录的都是之前只有55关的解题方法,没有新增的rebase_onto这一关的内容.现在Githug一共有56关.现将新增的42关的 ...

  9. 2016天津软件沙龙GIT培训会议总结

    记录时间:2016年7月16日 上午9:30 地点:天津市众和茶社 先放张图,无图无真相 ! 很难得参加一次天津的技术开发人员聚会,还是技术交流的会议,非常珍惜这次机会,而且,虽然我在天士力干了两三个 ...

最新文章

  1. 《数据中台实战》:数据中台的分层建模体系
  2. python百题百练 二级题目_CSDN Python语感百题(一)
  3. boost::hana模块实现算术的测试程序
  4. Linux命令(1)—— ls、pwd、tree、clear、文件相关操作
  5. 初始Docker-Docker和虚拟机的差别
  6. C# 彻底搞懂async/await
  7. 0515 银行转帐功能演练
  8. 软件架构(9)---架构视图
  9. DayPilot——10分钟内用于ASP.NET MVC的AJAX每月事件日历
  10. maven scope范围
  11. 【WPF/WAF】使用System.Windows.Interactivity交互事件
  12. MTK 修改ro.hardware 获取cpu 和固件版本号方法
  13. mac登陆远程服务器
  14. 入坑MATLAB必会的吐血总结
  15. C++常用功能汇总-文件读写 计时 随机数
  16. 程序员护眼心得——20171229
  17. 文件夹里子文件夹快速重命名编号技巧
  18. KNIME 数据分析平台
  19. java中处理打折率_java:某商场给顾客的折扣率如下 购物金额小于200,不打折。购物金额大于等于200小于500...
  20. Cocos Creator | 通过 effect 实现卷轴展开和收拢效果

热门文章

  1. 浪潮服务器修改ipmi账号密码,浪潮IPMI管理软件 实现运维精控化
  2. 小程序页面分享(程序页面分享或者按钮分享)
  3. 将数据库复制到另一台电脑上
  4. 苹果Pro Stand屏幕支架比iPhone还贵引来大量负评
  5. 二叉树链式结构的实现
  6. C# .net DateTime.Now.ToString() 年月日时分秒格式化大全
  7. php 一键登录插件,[免费]ZblogPHP QQ一键登录免费插件
  8. 使用手机连接树莓派(无需电脑,只需要一台手机)
  9. 矩阵的秩:行秩等于列秩
  10. 配置submit运行php