【机器之心】工作流一目了然,看小姐姐用动图展示10大Git命令( 三 )


【机器之心】工作流一目了然,看小姐姐用动图展示10大Git命令
本文插图

输入 git status 后 , 你会看到我们仍然可以访问在之前的提交上做过的所有修改 。 这很好 , 这意味着我们可以修复这些文件的内容 , 之后再重新提交它们!
硬重置
有时候我们并不想保留特定提交引入的修改 。 不同于软重置 , 我们应该再也无需访问它们 。 Git 应该直接将整体状态直接重置到特定提交之前的状态:这甚至包括你在工作目录中和暂存文件上的修改 。
【机器之心】工作流一目了然,看小姐姐用动图展示10大Git命令
本文插图

Git 丢弃了 9e78i 和 035cc 引入的修改 , 并将状态重置到了 ec5be 的状态 。
还原(Reverting)
另一种撤销修改的方法是执行 git revert 。 通过对特定的提交执行还原操作 , 我们会创建一个包含已还原修改的新提交 。
假设 ec5be 添加了一个 index.js 文件 。 但之后我们发现其实我们再也不需要由这个提交引入的修改了 。 那就还原 ec5be 提交吧!
【机器之心】工作流一目了然,看小姐姐用动图展示10大Git命令
本文插图

完美!提交 9e78i 还原了由提交 ec5be 引入的修改 。 在撤销特定的提交时 , git revert 非常有用 , 同时也不会修改分支的历史 。
拣选(Cherry-picking)
当一个特定分支包含我们的活动分支需要的某个提交时 , 我们对那个提交执行 cherry-pick!对一个提交执行 cherry-pick 时 , 我们会在活动分支上创建一个新的提交 , 其中包含由拣选出来的提交所引入的修改 。
假设 dev 分支上的提交 76d12 为 index.js 文件添加了一项修改 , 而我们希望将其整合到 master 分支中 。 我们并不想要整个 dev 分支 , 而只需要这个提交!
【机器之心】工作流一目了然,看小姐姐用动图展示10大Git命令
本文插图

现在 master 分支包含 76d12 引入的修改了 。
取回(Fetching)
如果你有一个远程 Git 分支 , 比如在 GitHub 上的分支 , 当远程分支上包含当前分支没有的提交时 , 可以使用取回 。 比如当合并了另一个分支或你的同事推送了一个快速修复时 。
通过在这个远程分支上执行 git fetch , 我们就可在本地获取这些修改 。 这不会以任何方式影响你的本地分支:fetch 只是单纯地下载新的数据而已 。
【机器之心】工作流一目了然,看小姐姐用动图展示10大Git命令
本文插图

现在我们可以看到自上次推送以来的所有修改了 。 这些新数据也已经在本地了 , 我们可以决定用这些新数据做什么了 。
拉取(Pulling)
尽管 git fetch 可用于获取某个分支的远程信息 , 但我们也可以执行 git pull 。 git pull 实际上是两个命令合成了一个:git fetch 和 git merge 。 当我们从来源拉取修改时 , 我们首先是像 git fetch 那样取回所有数据 , 然后最新的修改会自动合并到本地分支中 。
【机器之心】工作流一目了然,看小姐姐用动图展示10大Git命令
本文插图

很好 , 我们现在与远程分支完美同步了 , 并且也有了所有最新的修改!
Reflog
每个人都会犯错 , 但犯错其实没啥!有时候你可能感觉你把 git repo 完全搞坏了 , 让你想完全删了了事 。
git reflog 是一个非常有用的命令 , 可以展示已经执行过的所有动作的日志 。 包括合并、重置、还原 , 基本上包含你对你的分支所做的任何修改 。
【机器之心】工作流一目了然,看小姐姐用动图展示10大Git命令
本文插图

如果你犯了错 , 你可以根据 reflog 提供的信息通过重置 HEAD 来轻松地重做!


推荐阅读