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

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

问个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重新来过,这样太暴力了。

共收到 19 条回复

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 了。同理,如果嫌其不够优雅可以一边听古典乐一边敲下回车。

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