2011-01-27 101 views
5

Git是一个惊人的工具,但我还没有想到解决推送的更改的最佳方法。这是情况。Git:使用恢复或检出来撤消推送的更改?

我在一个分支上,并推动了几次提交给GitHub。从那时起,我们已经决定,我已经放弃了兔子洞,我们需要取消我已经完成的一些提交,并重新开始。从本质上讲,我需要将所有推送的提交反转回前一个提交。这里是我认为是适当

git revert # - creates a new commit that "undoes" the changes of one specific commit 
git checkout 'commit SHA' # - sets the head to that specific commit, wherein I will re-push to the repo, undoing my changes... I think 

所以这两个命令,对吗?我是否需要对我想要返回的特定提交进行git结账?或者在这个令人费解的过程中有什么我不了解的东西?

谢谢。

回答

-1

由于霍里亚指出正确的,你需要的git复位。

Git的检出意味着您切换到另一个分支或使用结账-b您可以创建一个新的分支,并切换到它的时候了。

5

有根据的状态两种情况,你推什么:

  • 没有人用于任何推送分支呢。在这种情况下,您可以使用git reset强制本地分支进行特定提交 - 然后您可以使用--force参数git push分支。

  • 但是,如果有人将他的作品放在分支上而不小心推倒了,那么您无法真正重置它,因为他会将他的变化置于分支之外。这是git revert进场的地方。它会记录一个反向修补程序,有效地消除先前的变化。这样做的好处是,其他人可以轻松地将他们的工作建立在分支上。

方法的选择取决于你如何存储库是和意外补丁多久那里。如果开发人员少,通信和reset可能是答案。但是,这件事长久以来就存在了,它可能更好地恢复 - 除非你想重写整个历史!

另一种看待它的方法是:git revert是持久的,而git reset/git push --force是对历史的破坏性重写。两者都有合适的时间。

最后,当我深入跟随爱丽丝掉进兔子洞,探讨以后如何,我通常做上本地创建分支。然后,如果我喜欢这些变化,我通常会将它们合并到一个测试分支中,然后让它们在测试分支上进行一些调整,然后再将它们合并到master。这样你就可以在很多时候避免这个问题。简而言之,我经常拥有20-30个当地分支机构,每个分支机构都有一个分支机构。他们倾向于先个别测试。有时候,我会创建一个新分支test并将所有内容合并到该分支中,并一起完成所有测试。要跟踪分支间的冲突,我使用git rerere。好处是我可以决定何时功能足够稳定以推送给其他人。