我试着寻找答案,但没有发现任何匹配这个问题。如果已经有答案,请随时将我链接到答案。
我所做的是提交并将大量更改作为一次提交推送。虽然我没有将这种推动合并到主人身上。我现在想在上演任何内容之前回到状态,所以我可以将更改分阶段提交。
我尝试使用推送的更改创建一个新分支(已保存的工作),删除原始远程分支(用户登录),然后将新分支合并到原始本地分支,但这只会让我回到我现在所处的位置,用户登录分支不包含任何要添加/提交的内容。
那么我如何获得所有这些更改,以便我可以单独审核和分阶段(使用git add -p)?
答案 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.