amo*_*fis 4 git branch git-branch
这类似于我的另一个问题(切换到另一个分支而不更改工作区文件)但在那里工作的解决方案现在不起作用.
我需要删除一些很久以前推送到远程主服务器的更改.所以我不想删除master中的提交,但我想更改文件就像这些更改被还原一样.所以我这样做了:
git branch limitsgit checkout limitsgit rebase --interactive <commit before the ones I wanted to remove>所以现在limits我已经拥有了像我想要的那样的代码.我如何"移动"它掌握?使用limits我希望更改为master分支的代码,但不更改工作空间中的任何文件,因此我可以将更改作为新更改提交到master.
您所陈述的问题的答案是:
$ 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
Run Code Online (Sandbox Code Playgroud)
这将使您的工作树和索引与您limits签出时完全一样,但您将master在其原始位置的分支上.
但是,执行此类操作的正确方法是对git revert要尝试撤消的每个更改.
您可以只恢复您不想要的每个提交,而不是使用交互式rebase.当你使用时git revert <object-name-of-commit>,git将引入一个新的提交来支持你所命名的那个引入的更改.因此,假设你要删除的提交是abc123和def456,你可以做:
git checkout master
git revert abc123
git revert def456
Run Code Online (Sandbox Code Playgroud)
但是,如果找到这些提交需要做很多工作,并且您对提示感到满意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"
Run Code Online (Sandbox Code Playgroud)
该食谱是这个问题中的一个变体:
| 归档时间: |
|
| 查看次数: |
4683 次 |
| 最近记录: |