如何将推送的提交还原为未分级?

时间:2013-11-10 22:06:38

标签: git commit revert unstage

我试着寻找答案,但没有发现任何匹配这个问题。如果已经有答案,请随时将我链接到答案。

我所做的是提交并将大量更改作为一次提交推送。虽然我没有将这种推动合并到主人身上。我现在想在上演任何内容之前回到状态,所以我可以将更改分阶段提交。

我尝试使用推送的更改创建一个新分支(已保存的工作),删除原始远程分支(用户登录),然后将新分支合并到原始本地分支,但这只会让我回到我现在所处的位置,用户登录分支不包含任何要添加/提交的内容。

那么我如何获得所有这些更改,以便我可以单独审核和分阶段(使用git add -p)?

2 个答案:

答案 0 :(得分:9)

如果这是一个共享存储库,并且如果有人已经撤消了您的提交,那么请不要尝试修改您的历史记录。如果其他人已经提交了您的提交,那么您将要打一场失败的战斗,以协调对您的错误分支进行的任何其他提交。

如果不是这种情况,那么您需要对-f进行重置,重新定位和推送的组合。

例如,您可以使用相关分支上的git reset --soft <hash>进行重置。这会将分支的头部重置为此提交,同时使所有后续提交保持未分级。然后,您可以运行git add -p来有选择地一点一点地重新进行更改。

如果您对分支感到满意,可以使用git push -f进行推送。这将强制覆盖遥控器上的历史记录 - 但它无法删除任何其他人可能已经拉过的历史记录。

答案 1 :(得分:3)

git reset --soft HEAD~1获取某个阶段的所有HEAD更改。

$> man git-reset
   ...
   git reset [<mode>] [<commit>]
   ...
       --soft
           Does not touch the index file nor the working tree at all (but
           resets the head to <commit>, just like all modes do). This leaves
           all your changed files "Changes to be committed", as git status
           would put it.