Git更改分支,但不要更改工作区中的文件

这与我的另一个问题类似(切换到另一个分支而不更改工作区文件),但在那里工作的解决方案现在不起作用。

我需要删除一些很久以前推送给远程主服务器的更改。 所以我不想删除master的提交,但是我想改变这些文件,就像这些修改被恢复一样。 所以我这样做了:

  • 在master, git branch limits
  • git checkout limits
  • git rebase --interactive <commit before the ones I wanted to remove>
  • 在交互式控制台中,我删除了我想要恢复的更改的提交
  • 所以现在有limits我有代码,我喜欢它在主人。 我如何“移动”它来掌握? 通过limits的代码,我想更改为master分支,但不更改工作区中的任何文件,因此我可以将这些更改作为新的更改提交给master


    而不是使用交互式底座,你可以恢复每个你不想要的提交。 当你使用git revert <object-name-of-commit> ,git会引入一个新的提交,它将你名字引入的变化作为回退。 所以,假设你想要删除的提交是abc123def456 ,你可以这样做:

    git checkout master
    git revert abc123
    git revert def456
    

    但是,如果找到这些提交有很多工作要做,并且您对limits的提示感到满意,那么您可以在master上创建一个包含树状态的新提交。 首先,确保git status是干净的,因为你要使用git reset --hard ,并且这会消除无法改变的变化:

    git checkout master
    git reset --hard limits
    git reset --soft HEAD@{1}
    git commit -m "Reverting unwanted commits"
    

    这个配方是这个问题中的一个变体:

  • https://stackoverflow.com/a/1895095/223092

  • 你提到的问题的答案是:

    $ git checkout master             # switch to master branch
    
    $ git reset --hard limits         # hard-reset it to the limits commit
    $ git reset --soft master@{1}     # move the reference back to where it was, but
                                      #  don't modify the working tree or index
    

    这将使您的工作树和索引与您签出limits完全相同,但您将位于原始位置的master分支上。


    然而,做这种事情的正确方法是让git revert你试图撤销的每一项变更。


    这要求revert :-)

    我会回到master并且git-revert每一个你不想申请的提交。 这会为每个人创建一个“不应用”提交 - 所以没有历史记录更改,但是您可以获得所需的效果。

    链接地址: http://www.djcxy.com/p/18833.html

    上一篇: Git change branch, but don't change files in workspace

    下一篇: Revert pushed branch to a concrete commit