| 注意那个 C3'和C5'— 在 master 分支上已处于提交链的“顶部”,由于产生了更改而创建了新提交。但是也要注意的是,rebase 后“原始的”C3和C5仍然在那里 — 只是再没有一个分支指向它们而已。 如果我们做了这个变基,然后确定这不是我们想要的结果,希望去撤销它,我们可以做下面示例所做的操作: $ git reset 79768b8
 由于这个简单的变更,现在我们的分支将重新指向到做 rebase操作之前一模一样的位置 —— 完全等效于撤销操作(图 6)。 
 图 6:撤销 rebase操作之后 如果你想不起来之前一个操作指向的一个分支上提交了什么内容怎么办?幸运的是,Git 命令依然可以帮助你。用这种方式可以修改大多数操作的指针,Git 会记住你的原始提交。事实上,它是在 .git仓库目录下,将它保存为一个特定的名为ORIG_HEAD的文件中。在它被修改之前,那个路径是一个包含了大多数最新引用的文件。如果我们cat这个文件,我们可以看到它的内容。 $ cat .git/ORIG_HEAD79768b891f47ce06f13456a7e222536ee47ad2fe
 我们可以使用 reset命令,正如前面所述,它返回指向到原始的链。然后它的历史将是如下的这样: $ git log --oneline feature79768b8 C5000f9ae C3259bf36 C2f33ae68 C15043e79 C0
 在 reflog 中是获取这些信息的另外一个地方。reflog 是你本地仓库中相关切换或更改的详细描述清单。你可以使用 git reflog命令去查看它的内容: $ git reflog79768b8 HEAD@{0}: reset: moving to 79768bc4533a5 HEAD@{1}: rebase finished: returning to refs/heads/featurec4533a5 HEAD@{2}: rebase: C564f2047 HEAD@{3}: rebase: C36a92e7a HEAD@{4}: rebase: checkout master79768b8 HEAD@{5}: checkout: moving from feature to feature79768b8 HEAD@{6}: commit: C5000f9ae HEAD@{7}: checkout: moving from master to feature6a92e7a HEAD@{8}: commit: C4259bf36 HEAD@{9}: checkout: moving from feature to master000f9ae HEAD@{10}: commit: C3259bf36 HEAD@{11}: checkout: moving from master to feature259bf36 HEAD@{12}: commit: C2f33ae68 HEAD@{13}: commit: C15043e79 HEAD@{14}: commit (initial): C0
 你可以使用日志中列出的、你看到的相关命名格式,去重置任何一个东西: $ git reset HEAD@{1}
 一旦你理解了当“修改”链的操作发生后,Git 是如何跟踪原始提交链的基本原理,那么在 Git 中做一些更改将不再是那么可怕的事。这就是强大的 Git 的核心能力之一:能够很快速、很容易地尝试任何事情,并且如果不成功就撤销它们。 【编辑推荐】 
    【责任编辑:庞桂玉 TEL:(010)68476606】前后端必备Linux基础知识大科普Linux内存管理之全局框架Chrome OS优化支持Linux应用:可双击.deb文件安装对 Linux 用户一记暴击:Dropbox 或将停止支持 Linux如何在Linux中使用Fio来测评硬盘性能 点赞 0
 (编辑:南平站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |