如何在git中移动master返回几个提交?

时间:2014-04-22 18:54:11

标签: git git-reset

我有一个拥有Drupal站点的git存储库。我花了最后一天尝试使用几个不同的模块来构建一个功能。我放弃了目前的做法,决定尝试不同的模块组合。但是,我的存储库在主分支上有几个提交包含这个功能开发过程(我知道我没有以有效的方式分支。)我想摆脱最后的三个或四个提交并将master设置为我的历史(我不想将我目前的工作与任何东西合并,我只是想让它消失。)我该怎么做?

4 个答案:

答案 0 :(得分:33)

为了在本地执行此操作,您可以执行以下命令以转到master并将其移至旧提交。

git checkout master
git reset --hard <old_commit_id>

如果您想将其推送到遥控器,则需要使用-f选项。

git push -f origin master

答案 1 :(得分:3)

要指向主控3退回:

$ git reset --hard master~3

我建议先备份当前的母版

$ git checkout -b master_backup

移动母版之后,查看您的提交树:

$ git log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all

答案 2 :(得分:1)

你总是可以做git reset <commit>。也许最简单的方法是使用图形前端,即gitk

你应该先做git branch branch-for-failed-experiment,这样就不会永远失去实验的工作。

小心,如果您发布了分支(即,如果其他人可以根据您要删除的提交进行工作),他们将被搁置。确保他们与你同步。

答案 3 :(得分:0)

请注意,在任何给定时间,您都可以使用git update-ref refs/heads/branch id来更改分支指向的位置,但是在执行此操作之前,必须在树的顶端指定一个名称,否则您的工作将无法访问。因此,这两个命令可以完成

 git update-ref refs/heads/newfeature HEAD
 git update-ref refs/heads/master XXYYY

但是请确保您没有任何未提交的更改,否则所有地狱都会崩溃