考虑以下情况:
- 开发者 A 提交了一个代码变更: #n
- 开发者 B 提交了一个代码变更:#n+1
- 开发者 A 提交了代码变更:#n+2
- 并提交了代码变更:#n+3
之后,开发者 A 发现他在提交 #n+2 中引入了一个缺陷。
开发者 A 怎样回滚他最近的 2 次提交并继续基于提交 #n+1 进行开发?
尝试使用git reset --hard HEAD~2
*,但它会回到开发者 A 的提交 #n。
它应该回到第n+1次提交。你可能还有一个合并提交。你也可以使用 git reset --hard <sha1_of_where_you_want_to_be>
警告!!
--hard
表示您当前拥有的任何未提交的更改将被永久丢弃。
git reflog
命令,但我只能访问我的本地 reflog 信息,例如提交 #n、#n+2、#n+3... 而不是 #n+1。 - Marius Butucgit log
得到了想要的 sha1,但还需要进行 git push -f
,以便在 Github 上反映出修改。 - Marius Butuc--hard
表示你当前未提交的更改将被永久丢弃。如果要回滚到以前的提交但不丢弃您的工作,请使用 --soft
。 - Ken M. Haggerty我建议使用类似这样的东西:
git reset --soft <commit_hash>
如果您不想撤销到该点之前的所有更改,那么请使用“--hard”而不是“--soft”,这样可以在不丢弃提交中所做的所有更改的情况下让您到达树中所需的点。
当我阅读时,我尝试了“--HARD”,但不幸的是,它删除了我在该点之前的所有更改。因此,请注意您是否希望删除它们。
如果您像我一样不走运,请尝试这个!:git revert <commit_hash>
--soft
,则可以切换分支并保留工作目录更改,因此您可以随意处理它们。 - Andy Keith
commit
#n+1,[1] A 提交了 #n+2,[2] 不成功的push
,[3]pull
,[4]push
。因此现在在 GitHub 上有一个提交 (#n+2) 和一个合并分支 'master' (#n+3)。 - Marius Butuc