Gtihug 游戏全 55 关通关答案

时间:2021-1-8 作者:admin
本关要求在最后一个 commit 前的一个 commit 上新建一个分支, 所以可以使用 git log 查看 commit 历史, 然后将需要的 commit hash 复制下来在 git checkout 中使用.

## [](#36-delete_branch)36\. delete_branch

git branch -d delete_me

删除分支可以使用 git branch 命令, 使用 -d 参数, 指定需要删除的分支名.

## [](#37-push_branch)37\. push_branch

git push –set-upstream origin test_branch

本关要求只向远程仓库推送本地 test_branch 分支上的修改, 可以使用 --set-upstream 参数来达到目的.

## [](#38-merge)38\. merge

git checkout master
git merge feature

本关要求需要将 feature 分支合并到 master 分支, 如果不在 master 分支则需要先 git checkout master 分支然后再进行 merge.

## [](#39-fetch)39\. fetch

git fetch

从远程仓库获取最新的提交的更改, 但不与本地仓库合并.

## [](#40-rebase)40\. rebase

git checkout feature
git add .
git commit -m “ready to rebase”
git rebase master

将 feature 分支通过 rebase master 达到历史记录为一条平滑的曲线.

## [](#41-rebase_onto)41\. rebase_onto

git rebase –onto master wrong_branch readme-update

本关要求将 readme-update 自在 wrong_branch 切换出去之后的 commit patch 到 master 分支上. 这个在日常使用会经常用到, 我们可能正在开发着 feature 分支, feature 分支是由 develop 分支切出来的, 接着我们有 develop 的 bug 需要修复, 然后我们忘记先 checkout 到 develop 分支, 然后再新建分支而是直接 在 feature 分支上新建, 当我们发现分支建立在错误点的时候我们已经提交了好几个 commit 了, 所以我们可以使用 reabse --onto 来修复, 你可以理解为 git rebase --onto base from to.

## [](#42-repack)42\. repack

git repack -d

本关要求将一些废弃的包删除掉, git repack -d 可以清除一些垃圾打包对象.

## [](#43-cherry-pick)43\. cherry-pick

git checkout new-feature
git log
git checkout master
git cherry-pick

本关中 new-feature 上面的 commit 并不符合要求需要删除, 但是唯独关于 readme 的修改想呈现在 master 分支, 所以需要 cherry-pick 命令. 所谓 cherry-pick 命令就是将某些 commit 在某个分支上重演.我们需要先切换到 new-feature 分支上查看需要的 commit 对应的 hash 值, 然后在 master 分支上重演.

## [](#44-grep)44\. grep

git grep –count TODO

本关要求统计出文件中还有多少个 TODO 字符串, 使用 git grep 命令可以进行搜索, --count 可以显示每个文件的符合的个数, 所以本关答案是 4.

## [](#45-rename_commit)45\. rename_commit

git log
git rebase -i

本关要求修改 First commit 的 commit 信息(注意不是第一个 commit), 所以通过 git rebase -i 命令来修改, 注意后面跟的是你需要修改的 commit 的前一个 commit 的 hash 值, 因为 git rebase -i 会将此 commit 之后的 commit 列出来, 然后在文本编辑器中修改命令为:

reword First coommit
pick Second commit

默认两个都是 pick 命令, 修改第一个为 reword 命令, 保存后进入 first commit 的编辑状态, 修改后保存即可完成重命名 commit 信息.

## [](#46-squash)46\. squash

git rebase -i

和上一关基本类似, 需要进入 reabse 交互式命令, 本关要求将几个 update readme 的 commit 合并到一个 commit 中, 所以这里的 commit hash 值需要是你需要编辑的 commit 前面的 commit hash, 也就是 initial commit 这个 commit.然后进入 commit 的编辑状态:

pick add readme
squash …
squash …
squash …

使用 squash 命令来将几个 commit 进行合并, 注意, 必须要有一个 pick 命令, 不然无法合并, 然后保存修改信息即可完成合并操作.

## [](#47-merge_squash)47\. merge_squash

git status
git merge –squash long-feature-branch
git status
git commit -m “merge from long-feature-branch”

本关要求将 long-feature-branch 分支合并到 master 分支, 但是将 long-feature-branch 上的分支的 commit 合并为一个, 使用需要使用 git merge 的 --squash 参数来进行合并.

## [](#48-reorder)48\. reorder

git log
git rebase -i

本关需要将几个 commit 调换一下顺序, 所以需要使用 git rebase -i 命令, 这里的 commit hash 值是你需要编辑的几个 commit 前的一个 commit 对应的 hash, 本关是 initial commit, 而进入编辑状态后只需要将 thrid commit 与 second commit 对换位置保存即可完成.

## [](#49-bisect)49\. bisect

git log
git bisect start master
git bisect run make test

所谓 git bisect 就是使用传说中的二分 debug 法来 debug. git bisect start 设定开始的节点.而 git bisect run 就是设定判断对错 的标准, 使用 test 文件来判断每个 commit 的正确性以便找到 bug. 本关只需要将运行以上命令后得到的 commit hash 的前 7 位回答问题即可.

## [](#50-stage_lines)50\. stage_lines

git status
git add -p feature.rb

本关要求检出文件的部分修改进行提交, 所以可以使用 git add -p 命令, 然后选择 e 命令(即人工选择), 进入编辑界面, 将第二个 commit 的 信息删除, 保存退出即可.

## [](#51-find_old_branch)51\. find_old_branch

git reflog
git checkout solve_world_hunger

本关要求回到之前的一个分支, 但是忘记了分支名, 我们可以使用 git reflog 来查找, git reflog 会记录一切本地做的 git 操作, 与 git log 的区别在于 git log 只会记录当前 head 指针所指的记录与它的祖先. git reflog 就像是一个撤销操作库, 记录你在本地的所有操作.

## [](#52-revert)52\. revert

git log
git revert

本关要求撤销 bad commit 作出的修改, 但是不能在本地使用 reset, 因为这个 commit 已经提交到远程仓库了, 所以需要使用 git revert 来修复, revert 是使用一个反向 commit 来抵消之前 commit 作出的修改而不是将之前的 commit 删除.

## [](#53-restore)53\. restore

git reflog
git checkout

本关要求恢复之前删除的 commit.因为之前使用了 reset 来删除了该 commit 的工作, 但是后来反悔了需要恢复.我们可以借助 git reflog 查看 之前的操作. 查看到需要恢复的对应的 commit hash 值, 就可以 git checkout 恢复了.

## [](#54-conflict)54\. conflict

git merge mybranch

本关要求解决冲突, 这关相信很多人在实际中已经遇过了.

<<<<<<< HEAD
Categorized shoes by color
=======
Sat on a wall

mybranch

“`

冲突如上, head 与 ==== 之间的就是本地我们的修改, 而 ==== 与 mybranch 之间的就是 mybranch 的修改, 解决的方法是保留你想要保留的 部分, 然后删除冲突引入的字符(

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。