zoukankan      html  css  js  c++  java
  • 5.撤销操作

    撤消操作

    在任何一个阶段,你都有可能想要撤消某些操作。 这里,我们将会学习几个撤消你所做修改的基本工具。 注意,有些撤消操作是不可逆的。 这是在使用 Git 的过程中,会因为操作失误而导致之前的工作丢失的少有的几个地方之一。

    有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息(commit -m '提交信息')写错了。 此时,可以运行带有 --amend 选项的提交命令来重新提交:

    $ git commit --amend
    

    这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令), 那么快照会保持不变,而你所修改的只是提交信息。

    文本编辑器启动后,可以看到之前的提交信息。 编辑后保存会覆盖原来的提交信息。

    例如,你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:

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

    第一次提交了某些东西, 提交信息是'initial commit', 但是此时发现有个文件forgotten_file没有加入暂存, 但是想要在刚才的提交中一起提交上, 就可以先将forgotten_file加入到暂存区, 然后执行git commit --amend命令使其一起提交, 最终你只会有一个提交, 第二次提交将代替第一次提交的结果。

    当你在修补最后的提交时,并不是通过用改进后的提交 原位替换 掉旧有提交的方式来修复的, 理解这一点非常重要。从效果上来说,就像是旧有的提交从未存在过一样,它并不会出现在仓库的历史中。

    取消暂存的文件

    接下来演示如何操作暂存区和工作目录中已修改的文件。 这些命令在修改文件状态的同时,也会提示如何撤消操作。 例如,你已经修改了两个文件并且想要将它们作为两次独立的修改提交, 但是却意外地输入 git add *(将当点目录的所有文件加入到暂存区) 暂存了它们两个。如何只取消暂存两个中的一个呢? git status 命令提示了你:

    $ git add *
    $ git status
    On branch master
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
    
        renamed:    README.md -> README
        modified:   CONTRIBUTING.md
    

    在 “Changes to be committed” 文字正下方,提示使用 git restore --staged ... 来取消暂存。 所以,我们可以这样来取消暂存 CONTRIBUTING.md 文件:

    $ git restore --staged CONTRIBUTING.md
    $ git status
    On branch master
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
    
        renamed:    README.md -> README
    
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
    
        modified:   CONTRIBUTING.md
    

    CONTRIBUTING.md 文件已经是修改未暂存的状态了。

    撤消对文件的修改

    如果你并不想保留对 CONTRIBUTING.md 文件的修改怎么办? 你该如何方便地撤消修改——将它还原成上次提交时的样子(或者刚克隆完的样子,或者刚把它放入工作目录时的样子)? 幸运的是,git status 也告诉了你应该如何做。 在最后一个例子中,未暂存区域是这样:

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

    它非常清楚地告诉了你如何撤消之前所做的修改。 让我们来按照提示执行:

    $ git restore CONTRIBUTING.md
    $ git status
    On branch master
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
    
        renamed:    README.md -> README
    

    可以看到那些修改已经被撤消了。

    请务必记得 git restore 是一个危险的命令。 你对那个文件在本地的任何修改都会消失——Git 会用最近提交的版本覆盖掉它。 除非你确实清楚不想要对那个文件的本地修改了,否则请不要使用这个命令。

  • 相关阅读:
    linux内核中GNU C和标准C的区别
    linux内核中GNU C和标准C的区别
    Getting start with dbus in systemd (02)
    Getting start with dbus in systemd (01)
    Getting start with dbus in systemd (03)
    物理内存相关的三个数据结构
    数据类型对应字节数(32位,64位 int 占字节数)
    Linux kernel 内存
    共模电感的原理以及使用情况
    [原创]DC-DC输出端加电压会烧毁
  • 原文地址:https://www.cnblogs.com/no-celery/p/14780147.html
Copyright © 2011-2022 走看看