9

我试图寻找这个问题的答案,但没有找到任何与这个问题非常匹配的东西。如果已经有一个答案,请随时将我链接到答案。

我所做的是将大量更改作为一次提交提交并推送。不过,我没有将该推送合并到 master 中。我现在想回到我暂存任何东西之前的状态,所以我可以将更改暂存到单独的提交中。

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

那么如何取回所有这些更改,以便我可以单独查看和暂存它们(使用 git add -p)?

4

2 回答 2

12

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

如果不是这种情况,那么您将需要进行一些重置、变基和推送的组合-f

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

一旦您对分支感到满意,您就可以使用git push -f. 这将强行覆盖遥控器上的历史记录 - 但它不能删除任何其他人可能已经提取的历史记录。

于 2013-11-10T22:15:02.280 回答
6

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.
于 2013-11-10T22:14:13.817 回答