新手问题 问个 git 版本回退的问题,如何优雅的回退 commit?

wcc526 · 2014年07月23日 · 最后由 layerssss 回复于 2014年08月05日 · 10972 次阅读

问个 git 版本回退的问题,如何优雅的回退 commit?

之前用 git 都是渐进提交式的。

每个记录都打了一些 tag v0.0.1 v0.0.2 v0.0.3 v0.0.4

我发现 v0.0.4 的代码已经 crush 了,不想要了,我想重新从 v0.0.3 开始写,要怎样优雅的从 v0.0.3 开发?就是想把 master 代码变成 v0.0.3 这个 tag 下的代码

代码托管在 github,如果强行 git reset 会发现无法 push,比较好的做法是什么?

想过删掉.git 重新来过,这样太暴力了。

git checkout <tag_name>

#1 楼 @nightire 但是要怎样把这个代码更新到 master?谢谢!还有 github 远端的 master

另外删除远程分支的命令是 git push origin :master

楼主的意思,大概需要一下几步: git checkout v0.0.3 git checkout -b develop git checkout master git reset devleop --hard git branch -d develop git tag -d v0.0.4 git push origin :v0.0.4

done,然后环境就好了

一边听古典乐一边敲 git revert ....

够优雅了吧?

#5 楼 @xds2000 好的,谢谢!

我觉得吧你一个人开发回滚强推比较好,多人开发你这样是不好的!

#3 楼 @flypiggys 这个命令在团队里应该被禁用!

#9 楼 @gihnius 😄 楼主要的就是这个,我只提供武器~不合适的人手里即使 git pull 也能产生破坏

#8 楼 @colorfulberry @flypiggys 那该怎么办,多人开发的话,遇到 crash 掉的版本要怎么处理?不删掉,放在那里不是更不好?

#9 楼 @gihnius 不能禁用!我在独立的 feature 分支开发用 git push -f 很正常啊。每次 feature 上线前,我都会 git rebase 一次,然后 git push -f,得到的 Commit Tree 更整齐干净。

很多人一碰到问题就是一刀切的方法来解决,而不是去区分问题,和房管局的做法挺像的。

# 离开 master 分支.
git checkout v0.0.3
# 给 master 分支打个标签留个后路.
git tag abandoned master
# 将 master 强制切换到 v0.03
git branch -f master v0.0.3
# 切换到新分支
git checkout master

嗯....其实差不多,要用 master 分支最终还是得 push -f

解决楼主的需求,#3 楼 @flypiggys 正解。

  • 干净又危险的做法是reset --hardpush -f
  • 稳妥点还是revertpush

revert&squash

#11 楼 @wcc526 用 github 的话现在有后悔药 revert pr 了。只是 git 的话还是蛮麻烦。

git rebase -i 然后你可以删除你的 commit。

明显是 git push -f 啊

19 楼 已删除

哈哈哈,只能 push --force 了。同理,如果嫌其不够优雅可以一边听古典乐一边敲下回车。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号