从本地和反向提交/合并中删除不需要的文件

时间:2014-06-27 03:31:20

标签: git commit

我的存储库现在很乱......

我搞乱了合并和提交......我想回到特定的提交,因为它有干净的文件。现在我在我的本地有一些filename.orig,并且由于我正在经历的冲突,它在我最近的合并中。我想将我的本地文件恢复为干净的提交(删除所有废话),并删除所有错误的提交/合并并创建干净的提交主机。这可能吗?

这是我的提交历史记录:

Merge (sha-1) ->
Clean Commit (sha-2) -> 
bad commit (sha-3) ->
bad merge (sha-4) ->
bad merge with .orig (sha-5)

2 个答案:

答案 0 :(得分:1)

正如我在评论中已经指出的那样,您的问题基本上与How to revert Git repository to a previous commit?重复,其中the top voted answer提供了两个与您相关的解决方案。

解决方案1:硬重置

你提到你已经推到遥控器了。没关系,如果您没有与其他人共享您的分支,那么您可以简单地将硬重置重新恢复到要恢复的提交,然后强制推回到您的远程:

git reset --hard sha-2
git push origin HEAD -f

警告:如果您与其他人分享您的分支,请不要这样做,或者至少如果您拒绝提交,则不要执行此操作在这样的远程分支上。那些其他人可能有自己的工作基于您丢弃的旧提交,因此它为这些用户创建了更多工作,以重新同步他们自己的提交与新重置的分支。

如果出于上述原因无法使用此解决方案,则可以使用以下替代解决方案,如How to revert Git repository to a previous commit?中所述。

解决方案2:还原

此解决方案只是通过创建作为反向补丁的新提交来简单地恢复先前的提交。即使其他用户正在共享您的分支,这也是安全的,因为它不会丢弃新的提交,它只会创建新的提交,所以它不会像混淆一样混乱,因为丢弃提交将是:

git revert --no-edit sha2..sha5

这将恢复范围(sha2,sha5)中的提交,其中sha2是 独占 的起始点,这意味着它不包含在恢复中然后你可以简单地将结果推送到你的遥控器,

git push origin HEAD

文档

附加说明

我试图将这个问题作为How to revert Git repository to a previous commit?的副本关闭,但看起来这个问题并没有得到足够的近距离投票,而且可能没有关闭,所以这就是为什么我决定我最好回答它,以防它不是。

答案 1 :(得分:0)

尝试使用:

git reset --hard <previous-commit-hash>

这会将所有内容重置为您之前的提交。您将获得previous-commit-hash的新副本。