精华内容
下载资源
问答
  • 不过,它的最大缺陷是只能撤销(回退)一步。更坑人的是,只要你不小心点一下鼠标,就连这一步也无法撤销了。因此我给它加上了“无限撤销”和“存档读档”的增强功能。修改后的版本称为《JF接龙》,可以在 WinXP/...
  • git 撤销更改You may already know that Git is like a save point system. What you generally learn with Git initially is to learn to save your changes and commit them to a remote repository. But how do ...

    git 撤销更改

    You may already know that Git is like a save point system. What you generally learn with Git initially is to learn to save your changes and commit them to a remote repository. But how do you undo a change, and go back to a previous state?

    您可能已经知道Git就像一个保存点系统。 通常,您最初使用Git所学的是学习保存更改并将其提交到远程存储库。 但是,如何撤消更改并返回到先前的状态?

    That’s what we’re going to cover within this article.

    这就是我们将在本文中介绍的内容。

    I’ve covered the contents in this article in a video if you like learning by watching instead of reading.

    如果您喜欢通过观看而不是阅读来学习,那么我已经在视频中介绍了本文的内容。

    本地与远程 (Local vs Remote)

    It’s more complicated to undo something that’s already on the remote. This is why you want to keep things on your local until they’re kind of confirmed.

    撤消遥控器上已经存在的内容更为复杂。 这就是为什么您希望在事物被确认之前将其保留在本地的原因。

    四种常见情况 (Four common scenarios)

    We’ll be covering the following four common scenarios

    我们将介绍以下四种常见情况

    1. Discarding local changes

      放弃本地更改
    2. Amending the previous commit

      修改上一次提交
    3. Rolling back to a previous commit

      回滚到上一个提交
    4. Reverting a commit that has been pushed to the remote

      还原已推送到远程的提交

    Note: In the screen shots below, I’ve used the Fork for Mac OS Git Client. You can do the same in other similar Git clients.

    注意:在下面的屏幕截图中,我使用了For Mac OS Git Client的Fork 。 您可以在其他类似的Git客户端中执行相同的操作。

    方案1:放弃本地更改 (Scenario 1: Discarding local changes)

    The first scenario is when you’ve created some changes. They’re not committed yet. And you want to delete these changes.

    第一种情况是创建一些更改后。 他们尚未承诺。 您要删除这些更改。

    Let’s say we want to create a new feature. We’re going to add some HTML and CSS into the project:

    假设我们要创建一个新功能。 我们将在项目中添加一些HTML和CSS:

    <!--In index.html-->
    <div class="feature"></div>
    ```
    
    ```css
    /* In CSS file */
    .feature {
      font-size: 2em; 
      /* Other styles */
    }

    To discard these changes:

    放弃这些更改:

    1. Go to the staging area

      转到暂存区
    2. Select the files where you want to discard changes

      选择您要放弃更改的文件
    3. Right click on the files

      右键单击文件
    4. Select discard changes

      选择放弃更改

    方案2:修改上一次提交 (Scenario 2: Amending the previous commit)

    When you have created a commit and you missed out some changes and you want to add these changes in the previous commit message.

    创建提交后,您错过了一些更改,并且希望将这些更改添加到上一个提交消息中。

    1. Go to the staging area

      转到暂存区
    2. Stage the files to commit

      暂存文件以提交
    3. Click on the amend checkbox

      单击修改复选框
    4. Edit your commit message

      编辑您的提交消息
    5. Commit

      承诺

    方案3:回滚到上一个提交 (Scenario 3: Rolling back to a previous commit)

    You already have a few commits in your local repository. You decide that you don’t want these commits anymore and you want to “load” your files from a previous state.

    您的本地存储库中已经有一些提交。 您决定不再需要这些提交,而要从先前的状态“加载”文件。

    1. Go into the Git History

      进入Git历史
    2. Right click the commit you want to roll back to

      右键单击要回滚的提交
    3. Select reset branch to here

      选择重置branch到这里

    Note: You can only reset to a commit that hasn’t been pushed into the remote.
    注意:您只能将其重置为尚未推送到远程的提交。

    方案4:还原已推送到远程的提交 (Scenario 4: Reverting a commit that has been pushed to the remote)

    If you have a commit that has been pushed into the remote branch, you need to revert it.

    如果提交已被推送到远程分支,则需要将其还原。

    Reverting means undoing the changes by creating a new commit. If you added a line, this revert commit will remove the line. If you removed a line, this revert commit will add the line back.
    还原意味着通过创建新的提交来撤消更改。 如果添加了一行,则此还原提交将删除该行。 如果您删除了一行,此还原提交将把该行重新添加回去。

    To revert, you can:

    要还原,您可以:

    1. Go to the Git history

      转到Git历史
    2. Right click on the commit you want to revert

      右键单击要还原的提交
    3. Select revert commit

      选择还原提交
    4. Make sure commit the changes is checked.

      确保commit the changes已检查。

    5. Click revert

      点击还原

    其他情况 (Other scenarios)

    GitHub has a useful article that shows you how to undo almost everything with Git. It will be helpful if you face other scenarios. Read it here.

    GitHub上有一篇有用的文章,向您展示了如何使用Git撤消几乎所有内容。 如果您面对其他情况,将对您有所帮助。 在这里阅读。

    Thanks for reading. Did this article help you in any way? If it did, I hope you consider sharing it. You might help someone out. Thank you!

    谢谢阅读。 本文对您有任何帮助吗? 如果确实如此, 希望您考虑共享它 。 您可能会帮助某人。 谢谢!

    This article was originally posted at my blog.Sign up for my newsletter if you want more articles to help you become a better frontend developer.

    本文最初发布于 我BLO g.Sign为我的通讯 ,如果你想帮助更多的文章,你成为一个更好的前端开发者。

    翻译自: https://www.freecodecamp.org/news/how-to-undo-changes-in-git-e1da7930afdb/

    git 撤销更改

    展开全文
  • 操作系统实验报告:线程的创建和撤销; 基于Windows xp;需要提前安装虚拟机;内含源程序和程序运行结果。
  • 主要为大家详细介绍了Android画板开发之撤销,反撤销功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 许多前端应用,尤其是一些在线编辑软件,运行时需要不断处理用户的交互,提供了撤消重做功能来保证交互的流畅性。不过为一个应用实现撤销重做功能并不是一件容易的事情。 Redux官方文档中 介绍了如何在 redux 应用中...
  • 撤消管理器.js UndoManager.js 是一个简单(且懒惰)的撤消/重做管理器,可与您的自定义所见即所得一起使用。 代码与库无关,应该在现代浏览器中工作(见下文)。 警告:这还没有在生产中经过仔细测试,可能有点...
  • ios关闭摇动撤销代码iOSallows you to shake your phone to undo typing you just did in apps such as Messages, Mail, Calendar, Notes, or Contacts. It’s a handy feature, but it can also be annoying. Ifyou...
    ios关闭摇动撤销代码

    ios关闭摇动撤销代码

    00_lead_image_shake_to_undo

    iOS allows you to shake your phone to undo typing you just did in apps such as Messages, Mail, Calendar, Notes, or Contacts. It’s a handy feature, but it can also be annoying. If you tend to accidentally activate the “Shake to Undo” feature during your daily activities, you can now easily disable this feature in iOS 9.

    iOS允许您摇动手机以撤消您在消息,邮件,日历,便笺或联系人等应用中所做的键入。 这是一个方便的功能,但也可能很烦人。 如果您倾向于在日常活动中意外激活“摇动撤消”功能,则现在可以在iOS 9中轻松禁用此功能。

    To disable “Shake to Undo”, tap the “Settings” icon on the Home screen.

    要禁用“摇动撤消”,请点击主屏幕上的“设置”图标。

    01_tapping_settings

    On the “Settings” screen, tap “General”.

    在“设置”屏幕上,点击“常规”。

    02_tapping_general

    Then, tap “Accessibility” on the “General” screen.

    然后,在“常规”屏幕上点击“辅助功能”。

    03_tapping_accessibility

    To the right of “Shake to Undo”, you’ll either see “On” or “Off”, indicating the status of the feature. To change the status, tap “Shake to Undo”.

    在“摇动撤消”右侧,您将看到“打开”或“关闭”,指示功能的状态。 要更改状态,请点按“摇动以撤消”。

    04_tapping_shake_to_undo

    If the “Shake to Undo” feature is on, the slider button to the right is green and white. To disable the feature, tap the slider button.

    如果启用了“摇动撤消”功能,则右侧的滑块按钮为绿色和白色。 要禁用该功能,请点击滑块按钮。

    05_shake_to_undo_on

    When the feature is off, the slider button is gray and white.

    关闭此功能时,滑块按钮为灰色和白色。

    06_shake_to_undo_off

    Now you can shake your phone to your heart’s content, and you won’t activate the “Shake to Undo” feature. However, if you decide you want it on again, that’s easily done.

    现在,您可以按照自己的意愿摇动手机,而不会激活“摇动撤消”功能。 但是,如果您决定再次启用它,则很容易做到。

    NOTE: Remember, you must be running iOS 9 to disable the “Shake to Undo” feature.

    注意:请记住,您必须正在运行iOS 9才能禁用“摇动撤消”功能。

    翻译自: https://www.howtogeek.com/238411/how-to-disable-the-shake-to-undo-feature-in-ios-9/

    ios关闭摇动撤销代码

    展开全文
  • 主要介绍了git rebase 成功之后如何撤销,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • 主要介绍了git 优雅的撤销中间某次提交方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 通过图像处理的例子,实现matlab gui界面设计时撤销与反撤销功能的实现,原理简单,可扩展到任意操作。
  • #Angular 撤消 模型和 API 更改的轻量级历史记录 Angular undo 提供了在你的 Angular 应用程序中撤销/重做状态更改的能力。 它可以影响本地或远程状态 入门 凉亭安装: bower install angular-undo 从你的 app.js ...
  • 主要介绍了git如何撤销commit的方法(未push),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • c# datagridview 撤销/恢复
  • 主要介绍了探究 canvas 绘图中撤销(undo)功能的实现方式详解的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 主要介绍了Git撤销&回滚操作(git reset 和 get revert),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 在任何工具栏上添加工具栏按钮,以撤销关闭的选项卡。 撤消关闭的选项卡按钮加载项,您可以从当前会话中打开关闭的选项卡。该扩展程序显示了一些关闭的选项卡和窗口的列表。您可以找到要查找的内容并打开此特定选项...
  • 文章目录SQL CREATE INDEX 语句索引SQL CREATE INDEX 语法SQL CREATE UNIQUE INDEX 语法SQL 撤销索引、撤销表以及撤销数据库DROP INDEX 语句DROP TABLE 语句DROP DATABASE 语句TRUNCATE TABLE 语句SQL ALTER TABLE ...
  • git 撤销最后一次提交I'm a massive fan of git; it'ssuper powerfulandeasy to use, especially when it comes to branching. The biggest sin I commit when using git is adding files and then committing them....

    git 撤销最后一次提交

    I'm a massive fan of git; it's super powerful and easy to use, especially when it comes to branching.  The biggest sin I commit when using git is adding files and then committing them...to master branch instead of a feature branch.  Oops.  Certainly don't want that.

    我是git的忠实粉丝; 它超级强大且易于使用,尤其是在分支方面。 使用git时,我犯下的最大罪过是添加文件,然后将它们提交到master分支而不是feature分支。 哎呀。 当然不想要。

    If you've done a git add (files) and then commit them to the wrong branch, backing that out is easy:

    如果您已经执行了git add (files) ,然后将它们提交到错误的分支,则备份起来很容易:

    git reset --soft HEAD~1
    
    

    With the command above, the files are still added but not committed, so you can create your feature branch, do another git commit -m (message), and be on your way!

    使用上面的命令,文件仍会添加但尚未提交,因此您可以创建功能分支,再执行git commit -m (message) ,然后就可以了!

    翻译自: https://davidwalsh.name/git-undo-commit

    git 撤销最后一次提交

    展开全文
  • 总体设计 数据结构定义: 结构体PCB:进程名、ID、运行时间、优先级等,...display()—就绪队列输出函数:输出就绪队列中的进程信息,以便观察创建或撤消活动的结果; Sort()—进程优先级排序,根据你定义的优先级,

    总体设计

    • 数据结构定义:
      结构体PCB:进程名、ID、运行时间、优先级等,队列的排序按优先级排序。
      PCB空间:结构体PCB数组
      就绪队列指针
      首尾指针
    • 函数
      InitQueue():初始化就绪队列
      Create()—进程创建:从PCB空间申请一个空PCB,填入进程参数,插入就绪队列;
      kill()—进程终止:将指定的就绪进程移出就绪队列,清除PCB中的信息;
      display()—就绪队列输出函数:输出就绪队列中的进程信息,以便观察创建或撤消活动的结果;
      Sort()—进程优先级排序,根据你定义的优先级,把进程进行排序。
      menu()—功能选择:调用创建函数;调用终止函数;显示就绪进程;退出系统等。
    • 功能测试:
      在菜单中选择执行各功能,从显示出的就绪队列状态,查看操作的正确与否。

    详细设计

    在本次模拟实验中,我主要写了六个函数。

    ——在InitQueue()中,我主要将指向就绪队列的头指针和尾指针初始化,方便后面进程的创建。
    ——在Create()函数中,我主要将要创建的进程的参数填入PCB,并插入到就绪队列中。在Create()函数中我进行了三次判断,第一次是n是否大于100,如果n>100,说明PCB数组已满(即模拟内存已满)就不能再继续创建进程了,反之可以;第二次是判断L.front->next是否为NULL,如果为NULL,说明这时创建的进程是系统中第一个进程,不用考虑进程id是否会与其他进程id重复,可直接将参数填入数组,反之我们就要判断id是否会与其他进程id重复,即第三次判断,如果id重复,我们就要重新输入,直至成功为止,然后将填入参数的PCB节点插入到就绪队列中,即进程创建成功。
    —— Sort()函数主要是对进程的优先级进行排序,这里我采用了冒泡排序将优先级高的进程放在了就绪队列的前面。
    ——display()函数主要是输出当前就绪队列中的所有就绪队列的信息,我们可以借助这个函数来查看我们的每一次操作是否成功。
    ——kill()函数主要是用来终止进程,我们进行进程的终止操作是将进程移出就绪队列,重新找到首位指针应该指向的位置,并且删除已终止的进程在PCB中的相关信息。
    ——menu()是菜单函数,让我们进行功能选择,我们可以从菜单中选择调用上述的任一函数,从而进一步对进程的创建与撤销进行操作。

    代码实现

    #include <stdio.h>
    #include <stdlib.h>
    ///pcb控制块信息
    typedef struct P_node{
        char t_name[20];///进程名
        long t_id;///进程id
        float t_time;///进程运行时间
        int priority;///进程优先级
    }PCB;
    ///就绪队列
    typedef struct Tnode *T;
    struct Tnode{
        int data;
        T next;///指向就绪队列的下一个位置
    };
    ///消息缓冲队列
    typedef struct Linkqueue{
        T front,rear;///头指针和尾指针分别指向就绪队列的头和尾
    }LQ;
    LQ L;
    PCB pcb[100];///结构体PCB数组,模拟当前内存大小
    int N=0;///当前已经创建的进程数目
    ///就绪队列初始化
    void InitQueue(){
        L.rear=L.front=malloc(sizeof(T));
        if(!L.front)
            exit(-2);
        L.front->next=NULL;
        return 0;
    }
    ///创建进程:申请PCB,填入进程参数
    void Create(){
        int n;///要创建的进程的数目
        printf("请输入要创建的进程的数目:");
        scanf("%d",&n);
        ///要申请的进程数大于当前系统的内存
        if(n>100){
            printf("当前内存已满");
            return 0;
        }
        int i,j;
        long id;
        T t;
            for(i=1;i<=n;i++){
                ///当就绪队列为空时,第一个进程id可以直接写入
                if(L.front->next==NULL){
                    printf("请输入进程id:");
                    scanf("%ld",&pcb[i+N].t_id);
                    getchar();
                    printf("请输入进程名:");
                    gets(pcb[i+N].t_name);
                    printf("请输入进程运行时间:");
                    scanf("%f",&pcb[i+N].t_time);
                    getchar();
                    printf("请输入进程优先级:");
                    scanf("%d",&pcb[i+N].priority);
                    N++;///当前进程数加1
                }else{
                    printf("请输入进程id:");
                    scanf("%ld",&id);
                    ///当就绪队列不为空时,需要检查所创建的进程id是否重复
                    for(j=1;j<i+N;){
                        if(id==pcb[j].t_id){
                            printf("进程ID已经存在!\n请重新输入:");
                            scanf("%ld",&id);
                            j=0;
                        }else{
                            j++;
                        }
                    }
                    pcb[i+N].t_id=id;
                    getchar();
                    printf("请输入进程名:");
                    gets(pcb[i+N].t_name);
                    printf("请输入进程运行时间:");
                    scanf("%f",&pcb[i+N].t_time);
                    getchar();
                    printf("请输入进程优先级:");
                    scanf("%d",&pcb[i+N].priority);
                    N++;///当前进程数加1
                }
                ///将当前进程加入就绪队列
                t=malloc(sizeof(T));
                t->data=N;
                t->next=NULL;
                ///将就绪队列中的进程加入消息缓冲队列
                L.rear->next=t;
                L.rear=t;
            }
        Sort();
        return 0;
    }
    void Sort(){
        int i,j;
         ///将进程按优先级排序
        for(i=1;i<=N;i++){
            for(j=i+1;j<=N;j++){
                if(pcb[i].priority<pcb[j].priority){
                    PCB temp=pcb[i];
                    pcb[i]=pcb[j];
                    pcb[j]=temp;
                }
            }
    
        }
    }
    ///显示已经就绪的进程
    void display(){
        T p;
        p=L.front;
        if(p->next==NULL){
            printf("当前无进程!");
        }
        while(p->next!=NULL){
            p=p->next;
            printf(" 进程ID:%ld\n 进程名:%s \n运行时间:%f \n优先级:%d\n",pcb[p->data].t_id,pcb[p->data].t_name,pcb[p->data].t_time,pcb[p->data].priority);
        }
    }
    ///进程终止
    void kill(){
        int id;
        T p;
        p=L.front;
        if(p->next==NULL){
            printf("当前无进程!\n\n");
        }else{
            printf("输入要终止的进程的id:");
            scanf("%ld",&id);
            while(pcb[p->next->data].t_id!=id){
                if(p->next==NULL){
                    printf("该进程不存在!\n");
                    return 0;
                }
                p=p->next;
            }
            if(pcb[p->next->data].t_id==id){
                p->next=p->next->next;
                /*当L.front->next==NULL时,
                说明当前杀死的进程是系统中最后一个进程,
                此时首位指针指向同一个位置*/
                if(L.front->next==NULL){
                    L.front=L.rear;
                }
                /*当p->next==NULL时,
                说明当前杀死的进程是队尾进程,
                此时尾指针指向p*/
                if(p->next==NULL){
                    L.rear=p;
                }
                ///删除已终止进程的PCB进程控制块信息
                while(p->next!=NULL){
                    p->next->data--;
                    pcb[p->next->data]=pcb[p->next->data+1];
                    p=p->next;
                }
            }
        printf("成功杀死进程!\n");
        return 0;
        }
    }
    void menu(){
        int n;
        while(1){
            printf("\n*************进程演示系统*************\n");
            printf("             1.创建进程\n");
            printf("             2.查看进程\n");
            printf("             3.杀死进程\n");
            printf("             4.退出程序\n");
            printf("***************************************\n\n");
            printf("请输入你的选择(1-4):");
            scanf("%d",&n);
            switch(n){
                case 1:Create();
                break;
                case 2:display();
                break;
                case 3:kill();
                break;
                case 4:return 0;
                default:printf("没有这个选项!");
                break;
            }
        }
        return 0;
    }
    int main()
    {
        InitQueue();
        menu();
        return 0;
    }
    

    运行截图:
    在这里插入图片描述

    展开全文
  • 方法一 先按esc进入命令模式,即左侧线为蓝色(为绿色时是编辑模式),按z键即可恢复 方法二 如果是运行过的代码 直接运行 history 方法三 功能栏 edit -> undo delete cell 补充知识:Jupyter Notebook 快捷键 ...
  • 进程创建与撤销

    2014-04-17 21:34:23
    熟悉有关进程管理函数的使用,加深对进程概念的理解,了解进程如何被创建和终止。
  • 项目组成员请假或者离职之前签出,并且加入了签出锁,这时如果项目组的其他成员想要修改被锁定的档,或者是TFS的管理员想要在源代码管理中删除这个项目,我们无法通过Team Explorer图形界面来进行撤销签出操作,...
  • SQL 撤销索引、撤销表以及撤销数据库 通过使用 DROP 语句,可以轻松地删除索引、表和数据库。 DROP INDEX 语句 DROP INDEX 语句用于删除表中的索引。 用于 MS Access 的 DROP INDEX 语法: DROP INDEX index_name...
  • 撤消-重做-Vuex 一个Vuex插件,用于模块命名空间的撤消和重做功能。 该插件从灵感并扩展了其工作。 安装 yarn add undo - redo - vuex 浏览器 < script type =" text/javascript " src =" node_modules/undo-...
  • canvas 撤销 插件 Vuex多历史 (vuex-multi-history) A Vuex plugin that allows managing multiple histories that can undo, redo and more. 一个Vuex插件,允许管理多个可以撤消,重做等的历史记录。 View Demo ...
  • 此插件可实现网页编辑过程中的撤消、回退功能,可应用于网页在线编辑器。
  • EditText的撤销和恢复撤销操作 使用 引入库 compile 'ren.qinc.edit:lib:0.0.5' 初始化 mEditText = ((EditText) findViewById(R.id.editText)); //创建PerformEdit,一定要传入不为空的EditText ...
  • 线程的创建与撤销

    2011-09-15 17:01:39
    (1)掌握Windows系统提供的线程创建与撤销系统调用 (2)掌握Windows系统环境下线程的创建与撤销方法 2 实验准备知识 (1)线程创建 CreateThread()完成线程的创建。它在调用进程的地址空间上创建一个线程,执行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 365,275
精华内容 146,110
关键字:

撤销