在我最近的提交中,我在代码中做了一些清理工作,不幸的是我也引入了一个错误。
现在我想回到之前的提交,然后一点一点地添加新提交的更改,以便查看哪个更改是罪魁祸首。
我可以用git做到吗? 如果是这样,怎么样?
答案 0 :(得分:2)
如果你没有推动改变,你可以这样做:
git reset HEAD^ # undo the last commit
git add -p # add some of your changes
git commit # commit them
根据需要随时重复最后两个步骤。
现在,您可以测试新提交是否包含错误。一旦找到错误提交,您可以使用git rebase -i
删除该提交或修复它。
只要您没有推送您的提交,所有这一切都可以正常工作。如果您已经推送了提交,那么您可能希望首先恢复提交,并逐步重新实现您的功能是小型自包含提交。
答案 1 :(得分:1)
Git不跟踪“提交内”的更改。听起来你应该使用revert
来“撤消”你的违规提交。还原后,您可以重新实现更改,减去错误。
一般情况下,您需要使本地提交较小且孤立,以便在需要时可以轻松地在分支之间进行恢复和挑选。当单个提交包含大量不相关的更改时,很难仅“撤消”有缺陷的部分。
在推送到远程存储库之前,有些人使用rebase
来“压缩”提交并清理其本地历史记录;有效地“合并”小的相关提交。远程历史记录是团队资产。
答案 2 :(得分:1)
您可以使用git checkout <commit> -- <files>
和git gui
轻松检索部分提交。
更准确地说,一种方便的方法可能是:
git tag ref #to easily point to this commit later
git revert ref #revert the bug
#Start retrieving you changes
git checkout ref -- . #The files have the modifications but aren't modified
git gui # Select only a bit of the modifications, discards the others, and commit
git commit -m "Retrieved part of my modification"
#Continue
git checkout ref -- .
git gui #Incorporate some other modifications
git commit -m "Retrieved part of my modification 2"
# and so on...