`
wbj0110
  • 浏览: 1610825 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

撤消操作

    博客分类:
  • Git
Git 
阅读更多

任何时候,你都有可能需要撤消刚才所做的某些操作。接下来,我们会介绍一些基本的撤消操作相关的命令。请注意,有些撤销操作是不可逆的,所以请务必谨慎小心,一旦失误,就有可能丢失部分工作成果。

修改最后一次提交

有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。想要撤消刚才的提交操作,可以使用 --amend 选项重新提交:

$ git commit --amend

此命令将使用当前的暂存区域快照提交。如果刚才提交完没有作任何改动,直接运行此命令的话,相当于有机会重新编辑提交说明,但将要提交的文件快照和之前的一样。

启动文本编辑器后,会看到上次提交时的说明,编辑它确认没问题后保存退出,就会使用新的提交说明覆盖刚才失误的提交。

如果刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 --amend 提交:

$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend

上面的三条命令最终只是产生一个提交,第二个提交命令修正了第一个的提交内容。

取消已经暂存的文件

接下来的两个小节将演示如何取消暂存区域中的文件,以及如何取消工作目录中已修改的文件。不用担心,查看文件状态的时候就提示了该如何撤消,所以不需要死记硬背。来看下面的例子,有两个修改过的文件,我们想要分开提交,但不小心用 git add . 全加到了暂存区域。该如何撤消暂存其中的一个文件呢?其实,git status 的命令输出已经告诉了我们该怎么做:

$ git add .
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   README.txt
        modified:   benchmarks.rb

就在 “Changes to be committed” 下面,括号中有提示,可以使用 git reset HEAD <file>... 的方式取消暂存。好吧,我们来试试取消暂存 benchmarks.rb 文件:

$ git reset HEAD benchmarks.rb
Unstaged changes after reset:
M       benchmarks.rb
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   README.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   benchmarks.rb

这条命令看起来有些古怪,先别管,能用就行。现在 benchmarks.rb 文件又回到了之前已修改未暂存的状态。

取消对文件的修改

如果觉得刚才对 benchmarks.rb 的修改完全没有必要,该如何取消修改,回到之前的状态(也就是修改之前的版本)呢?git status 同样提示了具体的撤消方法,接着上面的例子,现在未暂存区域看起来像这样:

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   benchmarks.rb

在第二个括号中,我们看到了抛弃文件修改的命令(至少在 Git 1.6.1 以及更高版本中会这样提示,如果你还在用老版本,我们强烈建议你升级,以获取最佳的用户体验),让我们试试看:

$ git checkout -- benchmarks.rb
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   README.txt

可以看到,该文件已经恢复到修改前的版本。你可能已经意识到了,这条命令有些危险,所有对文件的修改都没有了,因为我们刚刚把之前版本的文件复制过 来重写了此文件。所以在用这条命令前,请务必确定真的不再需要保留刚才的修改。如果只是想回退版本,同时保留刚才的修改以便将来继续工作,可以用下章介绍 的 stashing 和分支来处理,应该会更好些。

记住,任何已经提交到 Git 的都可以被恢复。即便在已经删除的分支中的提交,或者用 --amend 重新改写的提交,都可以被恢复(关于数据恢复的内容见第九章)。所以,你可能失去的数据,仅限于没有提交过的,对 Git 来说它们就像从未存在过一样。

 

分享到:
评论

相关推荐

    总结CAD撤销操作的方法.docx

    CAD撤销操作方法总结 CAD 软件在进行绘图操作时,经常会出现误操作的情况,这时候可以通过撤销操作来取消刚进行的操作。撤销操作可以在工具栏中直接点击“撤销”按钮,点击“撤销”按钮后的下拉箭头可以查看刚进行...

    matlab gui设计时撤销与反撤销的实现

    撤销操作允许用户取消最近一次或一系列操作,而反撤销则是恢复被撤销的操作。在MATLAB GUI中,我们可以使用Memento设计模式来实现这一功能。Memento模式是一种行为设计模式,用于保存对象的状态以便在未来可以恢复。...

    Word无法撤销操作的错误.docx

    Word 无法撤销操作的错误解决方法 在本文中,我们将详细讲解 Word 无法撤销操作的错误解决方法。该错误可能出现在 Office365 项目实施中,用户在使用 Word 2021 时发现撤销按钮灰色,无法撤销操作,即使按下 Ctrl-Z...

    c# datagridview 撤销/恢复 (undo/redo)

    1. **记录操作**:首先,你需要创建一个类来表示`DataGridView`中的可撤销操作,比如`DataGridViewOperation`,它应包含操作类型(如单元格编辑、行添加、行删除等)、操作前的数据状态以及恢复操作所需的信息。...

    计算机操作系统 进程撤销源代码

    7. **返回控制**:最后,撤销操作会将控制权交还给调用者,通常是父进程或其他操作系统组件。 在这个C语言模拟实现中,使用进程树的形式展示进程关系,有助于可视化进程的层次结构和撤销行为。实时显示模拟进程的...

    git回退及撤销操作md,学习代码

    本文将深入探讨Git的回退及撤销操作,这对于任何Java、后端或软件开发人员来说都是至关重要的知识。 首先,我们需要理解Git的基本概念。Git记录了每次提交的所有变化,这些提交形成了一个可追踪的历史链。每当你对...

    DataGridView实现无限制撤销恢复

    while (undoStack.Count &gt; 100) // 假设我们限制了100次撤销操作 { undoStack.Pop(); } } public void Undo() { if (undoStack.Count &gt; 0) { var lastMemento = undoStack.Pop(); redoStack.Push...

    java如何在绘图板上实现undo&#40;撤销操作&#41;.docx

    // 实现撤销操作,例如移除形状 } @Override public void redo() { // 实现重做操作,例如重新添加形状 } } // 其他绘图逻辑,如在画板上绘制形状 } ``` 在这个例子中,当用户点击“Draw Line”或“Draw ...

    职称计算机的考试使用PowerPoint选项设置编辑演示文稿时最多可撤销操作数为30.pdf

    本知识点主要涉及两个方面:设置最多可撤销操作数和取消“在任务栏中显示所有窗口”的功能。 首先,我们来看如何设置最多可撤销操作数。在PowerPoint中,撤销功能允许用户回溯到之前的编辑状态,以修正可能的错误或...

    unity命令模式实现复制和撤销操作功能

    unity命令模式实现复制和撤销操作功能

    今年实习做的MFC画图程序(实现了undo redo功能)

    通过定义命令ID,可以为每个可撤销操作创建一个命令对象。当用户执行操作时,对应的命令对象被创建并发送,同时这个操作也被记录到历史栈中。当需要撤销或重做时,只需通过命令ID找到相应的操作并执行相应操作。 在...

    C# 绘制多边形,支持撤销 删除 编辑

    5. **撤销操作**:右键单击实现撤销功能,这需要维护一个历史栈,记录每次添加点的操作。每次用户添加点,都将该点的信息推入栈中。当用户右键单击时,将栈顶的点弹出,图形界面相应地移除该点,实现撤销效果。 6. ...

    篮球计时器包含撤销,记分,重置,计时

    撤销操作通常需要维护一个操作历史栈,每次用户进行改变,都会将当前状态压入栈中。当用户点击“撤销”时,可以从栈顶取出并恢复到之前的状态。重置功能则简单直接,只需将所有相关数据恢复到初始值。 在提供的...

    SuperMap iObjects.NET编辑撤销操作详解

    在编辑对象的过程中有时候会遇到需要撤回操作,返回到之前的数据状态,该范例就是实现编辑过程中的撤回或者前进操作;包括:添加线、删除线、修改线属性、打断线(批量撤回)等操作后撤销功能的实现。

    收藏管理VB源代码,无限撤销,DAO数据库操作

    这是我差不多10年前的作品了,近日翻了出来,看了看还是有点内容的,软件功能主要是文本类的收藏管理软件,如果是网页类的脚本还可以预览效果,文本编辑支持无限撤销操作,改选过的文本查找替换功能,treeview控件的...

    Audition的撤消与恢复操作.pdf

    在Audition中,撤销操作允许用户取消最近的一次或多次编辑操作,以返回到之前的编辑状态。有两种方法可以实现撤销: - 使用菜单:选择“编辑”菜单,然后点击“撤销”选项,这会撤销上一次的操作。 - 快捷键:按...

    Android的撤销操作条UndoBar.zip

    UndoBar 是一个基于Roman Nurik 的被用于Gmail app的Android 高级 UI undo-bar 控件(https://code.google.com/p/romannurik-code/)。经过修改可支持兼容 Android 2.x 并更易于使用。 UndoBar 支持可定制的属性和样式...

    C#画图程序 撤销重做基本绘制

    撤销操作就是弹出栈顶元素并反转其效果,而重做则是将弹出的元素再次应用。 以下是实现这一功能的关键知识点: 1. **控件和事件**:在C#的Windows Forms中,`PictureBox`控件可以用来作为画布。通过监听`Paint`...

    MFC画流程图 图片复制,撤销

    MFC画流程图 图片复制,撤销 非常适合初学者,

    js实现文本撤销-恢复功能

    撤销操作是将栈顶的状态弹出并应用,恢复则是将栈底的状态弹入并应用。为了实现这一机制,我们可以使用两个数组来分别存储撤销和恢复的操作记录。 1. **数据存储**: - 使用数组`undoStack`来保存历史记录,记录...

Global site tag (gtag.js) - Google Analytics