【问题标题】:How do I move master back several commits in git?如何在 git 中将 master 移回几个提交?
【发布时间】:2014-06-07 07:40:36
【问题描述】:

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

【问题讨论】:

  • 您是否已经将更改推送到remote
  • 我目前没有使用遥控器。我可能会在几天内设置它
  • 看起来一样的答案。

标签: git git-reset


【解决方案1】:

为了在本地进行,可以执行以下命令转到 master 并将其移动到旧提交。

git checkout master
git reset --hard <old_commit_id>

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

git push -f origin master

【讨论】:

  • 我可以找一个好地方来查找 git 使用的选项列表及其含义吗?我不知道 --hard 或 -f 是做什么的。
  • 其实我刚刚找到这个文档链接:kernel.org/pub/software/scm/git/docs/git.html
  • @Mr JF,这是真的。必须解除保护才能改写历史。没有其他办法。
【解决方案2】:

在将master 指向之前的提交之前,我建议备份您当前的master

$ git checkout -b master_backup

然后您可以安全地指向master 一些提交次数,例如3:

$ git reset --hard master~3

移动 master 后,查看您的提交树:

$ 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

现在,我建议保留备份,直到您完全确定它是不必要的(例如,一旦您的新方法完全实施),但当您确定时,您可以通过删除 master_backup 来清理:

$ git branch -D master_backup

【讨论】:

    【解决方案3】:

    您可以随时发送git reset &lt;commit&gt;。也许最简单的方法是使用图形前端,即gitk

    您或许应该先发送git branch branch-for-failed-experiment,这样实验工作就不会永远丢失。

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

    【讨论】:

    • 我想我不想让任何人知道我把它搞砸了多么糟糕:P
    • 听起来我真正想做的是进行一个新的提交,其中所有错误都被删除(这看起来与 3 或 4 次提交前的提交相同。)我该怎么做?
    • 您可以还原提交。或者您可以执行git diff &lt;old&gt;..&lt;current&gt; 之类的操作,将结果存储在一个文件中,然后git apply -R 撤消所有更改,然后git commit -a 结果。但我更愿意创建一个干净的历史记录(即使它完全是假的)。
    【解决方案4】:

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

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

    但请确保您没有任何未提交的更改,否则一切都会崩溃

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-01
      • 2014-07-01
      • 2013-07-14
      • 2014-10-18
      • 2011-04-12
      • 2022-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多