# Githug-通关笔记

name是关卡名字，level是第几关，difficulty是难度，最下面是关卡介绍。

• githug play 检查是否过关
• githug hind 当前关卡提示
• githug reset 重启当前关卡或者重启到指定名字的关卡
• githug levels 所有关卡列表

TIPS: 每一个关卡都是一个新的repo， 不要想在前一个的文件中找什么

1. init

A new directory, git_hug, has been created; initialize an empty repository in it.

#### 2. config

Set up your git name and email, this is important so that your commits can be identified.

#### 5. clone

Clone the repository at https://github.com/Gazler/cloneme.

#### 6. clone_to_folder

Clone the repository at https://github.com/Gazler/cloneme to my_cloned_repo.

#### 7. ignore

The text editor ‘vim’ creates files ending in .swp (swap files) for all files that are currently open.We don’t want them creeping into the repository.Make this repository ignore .swp files.

#### 8. include

Notice a few files with the ‘.a’ extension.We want git to ignore all but the ‘lib.a’ file.

#### 9. status

There are some files in this repository, one of the files is untracked, which file is it?

#### 10. number_of_files_committed

There are some files in this repository, how many of the files will be committed?

#### 11. rm

A file has been removed from the working tree, however the file was not removed from the repository. Find out what this file was and remove it.

#### 12.rm_cached

A file has accidentally been added to your staging area, find out which file and remove it from the staging area.NOTE Do not remove the file from the file system, only from git.

#### 13. stash

You’ve made some changes and want to work on them later. You should save them, but don’t commit them.

#### 14. rename

We have a file called oldfile.txt. We want to rename it to newfile.txt and stage this change.

#### 15. restructure

You added some files to your repository, but now realize that your project needs to be restructured. Make a new folder named src and using Git move all of the .html files into this folder.

#### 16. log

You will be asked for the hash of most recent commit. You will need to investigate the logs of the repository for this.

#### 17. tag

We have a git repo and we want to tag the current commit with new_tag.

#### 18. push_tags

There are tags in the repository that aren’t pushed into remote repository. Push them now.

#### 19. commit_amend

The README file has been committed, but it looks like the file forgotten_file.rb was missing from the commit. Add the file and amend your previous commit to include it.

#### 20. commit_in_future

Commit your changes with the future date (e.g. tomorrow).

#### 21. reset

There are two files to be committed. The goal was to add each file as a separate commit, however both were added by accident. Unstage the file to_commit_second.rb using the reset command (don’t commit anything).

#### 22. reset_soft

You committed too soon. Now you want to undo the last commit, while keeping the index.

#### 23. checkout_file

A file has been modified, but you don’t want to keep the modification. Checkout the config.rb file from the last commit.

#### 24. remote

This project has a remote repository.Identify it

#### 25. remote_url

The remote repositories have a url associated to them.Please enter the url of remote_location.

#### 26. pull

You need to pull changes from your origin repository.

Add a remote repository called origin with the url https://github.com/githug/githug

#### 28. push

Your local master branch has diverged from the remote origin/master branch. Rebase your commit onto origin/master and push it to remote.

#### 29. diff

There have been modifications to the app.rb file since your last commit.Find out which line has changed.

#### 30. blame

Someone has put a password inside the file config.rb find out who it was.

#### 31. branch

You want to work on a piece of code that has the potential to break things, create the branch test_code.

#### 32. checkout

Create and switch to a new branch called my_branch.You will need to create a branch like you did in the previous level.

#### 33. checkout_tag

You need to fix a bug in the version 1.2 of your app. Checkout the tag v1.2.

#### 34. checkout_tag_over_branch

You need to fix a bug in the version 1.2 of your app. Checkout the tag v1.2 (Note: There is also a branch named v1.2).

#### 35. branch_at

You forgot to branch at the previous commit and made a commit on top of it. Create branch test_branch at the commit before the last.

#### 36. delete_branch

You have created too many branches for your project. There is an old branch in your repo called ‘delete_me’, you should delete it.

#### 37. push_branch

You’ve made some changes to a local branch and want to share it, but aren’t yet ready to merge it with the ‘master’ branch.Push only ‘test_branch’ to the remote repository

#### 38. merge

We have a file in the branch ‘feature’; Let’s merge it to the master branch.

#### 39. fetch

Looks like a new branch was pushed into our remote repository. Get the changes without merging them with the local repository.

#### 40. rebase

We are using a git rebase workflow and the feature branch is ready to go into master. Let’s rebase the feature branch onto our master branch.

feature分支已经准备好被合并进master，用rebase把它们合并

#### 41. repack

Optimise how your repository is packaged ensuring that redundant packs are removed.

#### 42. cherry-pick

Your new feature isn’t worth the time and you’re going to delete it. But it has one commit that fills in README file, and you want this commit to be on the master as well.

#### 44. rename_commit

Correct the typo in the message of your first (non-root) commit.

#### 45. squash （存疑）

You have committed several times but would like all those changes to be one commit.

#### 46. merge_squash

Merge all commits from the long-feature-branch as a single commit.

#### 47. reorder

You have committed several times but in the wrong order. Please reorder your commits.

#### 48. bisect

A bug was introduced somewhere along the way.You know that running ruby prog.rb 5 should output 15.You can also run make test.What are the first 7 chars of the hash of the commit that introduced the bug.

#### 49. stage_lines

You’ve made changes within a single file that belong to two different features, but neither of the changes are yet staged. Stage only the changes belonging to the first feature.

#### 50. find_old_branch

You have been working on a branch but got distracted by a major issue and forgot the name of it. Switch back to that branch.

#### 51. revert

You have committed several times but want to undo the middle commit.
All commits have been pushed, so you can’t change existing history.

git revert 是撤销某次操作，此次操作之前的commit都会被保留
git reset 是撤销某次提交，但是此次之后的修改都会被退回到暂存区

#### 52. restore

You decided to delete your latest commit by running git reset --hard HEAD^. (Not a smart thing to do.) You then change your mind, and want that commit back. Restore the deleted commit.

#### 53. conflict

You need to merge mybranch into the current branch (master). But there may be some incorrect changes in mybranch which may cause conflicts. Solve any merge-conflicts you come across and finish the merge.

#### 54. submodule

You want to include the files from the following repo: https://github.com/jackmaney/githug-include-me into a the folder ./githug-include-me. Do this without cloning the repo or copying the files from the repo into this repo.

#### 55. contribute

This is the final level, the goal is to contribute to this repository by making a pull request on Github. Please note that this level is designed to encourage you to add a valid contribution to Githug, not testing your ability to create a pull request. Contributions that are likely to be accepted are levels, bug fixes and improved documentation.