我想在git中恢复一个特定的提交。不幸的是,我们的组织仍然使用CVS作为标准,所以当我提交回CVS时,多个git提交被合并为一个。在这种情况下,我很乐意挑选出原始的git提交,但这是不可能的。
有没有一种类似于git add --patch
的方法,允许我有选择地编辑差异,以决定要还原提交的哪些部分?
发布于 2011-01-26 00:30:39
使用--no-commit
(-n
)选项执行git revert
,然后取消转储更改,然后使用git add --patch
$ git revert -n $bad_commit # Revert the commit, but don't commit the changes
$ git reset HEAD . # Unstage the changes
$ git add --patch . # Add whatever changes you want
$ git commit # Commit those changes
注意:使用git add --patch添加的文件是您想要还原的文件,而不是您想要保留的文件。
发布于 2012-12-19 21:32:57
我已经成功地使用了以下内容。
首先,还原完整的提交(将其放入索引中),但不要提交。
git revert -n <sha1> # -n is short for --no-commit
然后以交互方式从索引中删除恢复的良好更改
git reset -p # -p is short for --patch
然后提交错误更改的反向比较
git commit -m "Partially revert <sha1>..."
最后,恢复的良好更改(已被重置命令取消暂存)仍在工作树中。他们需要清理一下。如果工作树中没有其他未提交的更改,则可以通过
git reset --hard
发布于 2014-08-11 20:57:20
解决方案:
git revert --no-commit <commit hash>
git reset -p # every time choose 'y' if you want keep the change, otherwise choose 'n'
git commit -m "Revert ..."
git checkout -- . # Don't forget to use it.
https://stackoverflow.com/questions/4795600
复制相似问题