副标题[/!--empirenews.page--]
                        技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战
            
  
用简洁而优雅的 Git 命令撤销仓库中的改变。 
 
使用 Git 工作时其中一个鲜为人知(和没有意识到)的方面就是,如何轻松地返回到你以前的位置 ——  也就是说,在仓库中如何很容易地去撤销那怕是重大的变更。在本文中,我们将带你了解如何去重置、恢复和完全回到以前的状态,做到这些只需要几个简单而优雅的  Git 命令。 
重置
我们从 Git 的 reset 命令开始。确实,你应该能够认为它就是一个 “回滚” —— 它将你本地环境返回到之前的提交。这里的 “本地环境” 一词,我们指的是你的本地仓库、暂存区以及工作目录。 
先看一下图 1。在这里我们有一个在 Git 中表示一系列提交的示意图。在 Git 中一个分支简单来说就是一个命名的、指向一个特定的提交的可移动指针。在这里,我们的 master 分支是指向链中最新提交的一个指针。 
  
图 1:有仓库、暂存区、和工作目录的本地环境 
如果看一下我们的 master 分支是什么,可以看一下到目前为止我们产生的提交链。 
$ git log --onelineb764644 File with three lines7c709f0 File with two lines9ef9173 File with one line
  
如果我们想回滚到前一个提交会发生什么呢?很简单 —— 我们只需要移动分支指针即可。Git 提供了为我们做这个动作的 reset 命令。例如,如果我们重置 master 为当前提交回退两个提交的位置,我们可以使用如下之一的方法: 
$ git reset 9ef9173
  
(使用一个绝对的提交 SHA1 值 9ef9173) 
或: 
$ git reset current~2
  
(在 “current” 标签之前,使用一个相对值 -2) 
图 2 展示了操作的结果。在这之后,如果我们在当前分支(master)上运行一个 git log 命令,我们将看到只有一个提交。 
$ git log --oneline-  
 9ef9173 File with one line
  
  
图 2:在 reset 之后 
git reset 命令也包含使用一些选项,可以让你最终满意的提交内容去更新本地环境的其它部分。这些选项包括:hard 在仓库中去重置指向的提交,用提交的内容去填充工作目录,并重置暂存区;soft 仅重置仓库中的指针;而 mixed(默认值)将重置指针和暂存区。 
这些选项在特定情况下非常有用,比如,git reset --hard <commit sha1 | reference> 这个命令将覆盖本地任何未提交的更改。实际上,它重置了(清除掉)暂存区,并用你重置的提交内容去覆盖了工作区中的内容。在你使用 hard 选项之前,一定要确保这是你真正地想要做的操作,因为这个命令会覆盖掉任何未提交的更改。 
恢复
git revert 命令的实际结果类似于 reset,但它的方法不同。reset 命令(默认)是在链中向后移动分支的指针去“撤销”更改,revert 命令是在链中添加一个新的提交去“取消”更改。再次查看图 1 可以非常轻松地看到这种影响。如果我们在链中的每个提交中向文件添加一行,一种方法是使用 reset 使那个提交返回到仅有两行的那个版本,如:git reset HEAD~1。 
另一个方法是添加一个新的提交去删除第三行,以使最终结束变成两行的版本 —— 实际效果也是取消了那个更改。使用一个 git revert 命令可以实现上述目的,比如: 
$ git revert HEAD
  
因为它添加了一个新的提交,Git 将提示如下的提交信息: 
Revert "File with three lines"-  
 This reverts commit b764644bad524b804577684bf74e7bca3117f554.-  
 # Please enter the commit message for your changes. Lines starting# with '#' will be ignored, and an empty message aborts the commit.# On branch master# Changes to be committed:#       modified:   file1.txt#
  
图 3(在下面)展示了 revert 操作完成后的结果。 
                                                (编辑:52站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |