我有一个拥有Drupal站点的git存储库。我花了最后一天尝试使用几个不同的模块来构建一个功能。我放弃了目前的做法,决定尝试不同的模块组合。但是,我的存储库在主分支上有几个提交包含这个功能开发过程(我知道我没有以有效的方式分支。)我想摆脱最后的三个或四个提交并将master设置为我的历史(我不想将我目前的工作与任何东西合并,我只是想让它消失。)我该怎么做?
答案 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
但是请确保您没有任何未提交的更改,否则所有地狱都会崩溃