Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除Git中的非上次提交?_Git - Fatal编程技术网

如何删除Git中的非上次提交?

如何删除Git中的非上次提交?,git,Git,我最近创建了一个新分支,我们称之为“branch1”,它基于另一个分支,我们称之为“master”。然后我对branch1做了一系列的承诺,现在我意识到前几次的承诺实际上是一个错误,但在前几次之后的承诺仍然是伟大的承诺!所以我在这里要做的就是基本上删除前几个提交,这样它们之后的提交基本上都会在master上重新设置…如何做到这一点呢?对于要取消的提交,您最好的选择可能是使用git revert(文档) 关于它的3个注释: 此命令允许您还原特定的提交,而不是git reset,它会将您带回到您感兴

我最近创建了一个新分支,我们称之为“branch1”,它基于另一个分支,我们称之为“master”。然后我对branch1做了一系列的承诺,现在我意识到前几次的承诺实际上是一个错误,但在前几次之后的承诺仍然是伟大的承诺!所以我在这里要做的就是基本上删除前几个提交,这样它们之后的提交基本上都会在master上重新设置…如何做到这一点呢?

对于要取消的提交,您最好的选择可能是使用
git revert
(文档)

关于它的3个注释:

  • 此命令允许您还原特定的提交,而不是
    git reset
    ,它会将您带回到您感兴趣的点,可能会撤消一路上的所有提交
  • 每次恢复都将被视为自己的提交,这意味着您的历史记录可能会被不需要的提交和恢复弄得乱七八糟。但是,在合并到
    master
    分支之前,您可以使用
    git reset--soft
    branch1
    中压缩提交,然后通过
    git commit-m
    重新提交所有更改
  • 为了避免合并冲突,建议按与提交相反的顺序使用它

  • 假设这是您从最近到最早的提交历史记录:

    branch1
    
    5XXXX Good Commit
    4XXXX Good Commit
    3XXXX Good Commit
    2XXXX Bad Commit
    1XXXX Bad Commit
    
    因此,假设您只想删除
    1XXXX
    2XXXX
    中的代码,而不真正关心提交是保留还是删除。因此,您现在可以执行以下操作:

    git还原1XXXX
    这将生成一个新的提交,其消息类似于
    reverts 1XXXX

    那么

    git revert 2XXXX
    这将生成一个新的提交,其消息类似于
    还原2XXXX

    您现在有两个新提交,它们将还原为
    1XXXX
    2XXXX
    。只需推动他们

    git推送原点分支1

    因此,您的承诺现在将是:

    branch1
    
    7XXXX Good Commit reverting bad commit 2XXXX
    6XXXX Good Commit reverting bad commit 1XXXX
    5XXXX Good Commit
    4XXXX Good Commit
    3XXXX Good Commit
    2XXXX Bad Commit
    1XXXX Bad Commit
    
    如果您想摆脱提交本身,则可以执行以下操作:

    git-rebase——交互式1XXXX

    因此,在同一个分支
    branch1
    ,您现在正在对第一个错误提交
    1XXXX
    进行重新基础。现在,您将看到一个文本编辑器,它类似于:

    pick 5XXXX Good Commit
    pick 4XXXX Good Commit
    pick 3XXXX Good Commit
    pick 2XXXX Bad Commit
    pick 1XXXX Bad Commit
    
    错误提交的
    拾取
    更改为
    挤压

    pick 5XXXX Good Commit
    pick 4XXXX Good Commit
    pick 3XXXX Good Commit
    squash 2XXXX Bad Commit
    squash 1XXXX Bad Commit
    

    修复任何
    合并冲突
    ,如果它们出现并爆发<代码>1XXXX
    2XXXX
    从未存在过

    您已经推送更改了吗?我想是你干的。在这种情况下,我建议使用
    git revert
    来消除错误提交。这是一个安全的选择

    错误的提交仍将在历史记录中可见,但当您的同事已经拉取您的更改时,他们不会遇到问题


    如果您还没有推动更改,您可以选择重写Git历史记录,可以使用
    Git rebase-i
    Git reset
    并重新提交。

    我通常是
    Git revert
    的粉丝,但是当您的提交是删除时,恢复提交将重新添加该文件,并且您将丢失该文件之前的历史记录。因此,如果您完成了所有这些提交,我将创建另一个分支-重新设置其上所有提交的基础,在错误提交之前将错误的分支重置为提交,然后从辅助分支的顶部挑选好的提交。

    使用交互式重新基置并挤压它。