Git:使用还原或结帐撤消推送的更改?

Kev*_*ker 5 git git-revert git-checkout

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
Run Code Online (Sandbox Code Playgroud)

所以,我是对的吗?我是否需要对要返回的特定提交进行git checkout?或者这个错综复杂的过程中有什么我不理解的东西?

谢谢.

I G*_*ERS 5

根据您推送的状态,有两种情况:

  • 还没有人使用推出的分支.在这种情况下,您可以使用git reset强制本地分支到特定提交 - 然后您可以git push使用--force参数进行分支.

  • 但是,如果有人将你的工作基于你不小心推动的分支,那么你就不能真正重置它,因为他将把他的变化从一个分支机构中解放出来.这是git revert发挥作用的地方.它将记录一个有效撤消先前更改的反补丁.这里的优点是其他人可以轻松地将他们的工作建立在分支上.

方法的选择取决于您的存储库的方式以及意外补丁在那里停留的时间.如果开发人员很少,那么沟通和reset答案可能就是答案.但是,如果事情存在了很长时间,那么恢复可能会更好 - 除非你想改写整个历史!

另一种看待它的方式是:git revert持久而git reset / git push --force对历史进行破坏性重写.两者都有适当的时间.

最后,当我钻研爱丽丝沿着兔子洞探查并发现其他什么时,我通常会在本地创建的分支上进行.然后,如果我喜欢这些更改,我通常会将它们合并到一个测试分支中,让它们在测试分支上稍微搅拌一下,然后再合并它们master.这样你就可以在很多时候避免这个问题.简而言之,我经常有20-30个本地分支,每个分支对应我正在处理的每个功能.它们倾向于首先单独测试.偶尔,我会创建一个新分支test并将所有内容合并到该分支中并一起完成所有测试.跟踪我使用的分支之间的冲突git rerere.优点是我可以决定功能何时足够稳定以推送给其他人.


Hor*_*mir -3

尝试git reset: http: //git-scm.com/docs/git-reset