【问题标题】:Make git master HEAD point to current HEAD of branch使 git master HEAD 指向当前分支的 HEAD
【发布时间】:2010-11-24 22:03:37
【问题描述】:

我不得不承认我没有玩过 gits 的高级功能,但在我当前的项目中我不得不这样做。

情况: 有人试图实现一些功能并将它们提交给主人,现在我被要求做这个其他人试图做的事情(但失败了),因此,我做的第一件事就是

git checkout -b clean_start HASH

哈希是在当前主服务器之前大约 20 次提交的正确 SHA1 哈希,并且有效。我现在对该分支进行了一些更改,现在我想将远程存储库的当前主分支(具有其他人所做的更改)更改为我的本地分支。

换句话说,我想将 master 20 提交的头部移回,然后将我的新干净分支合并到其中。

这正是我必须做的吗?使用 revert HEAD~20 等,或者是否有一个命令可以使头部移动?

【问题讨论】:

    标签: git branch revert head


    【解决方案1】:

    如果远程存储库接受强制推送,您可以这样做:

    git push --force origin clean_start:master
    

    请注意,如果其他人克隆了存储库,他们的推送可能会撤消此操作。如果您想合并本地 master 分支和远程 master 分支,但保留分支中的文件树(丢弃原始 master 的文件树),您可以这样做:

    git merge -s ours --no-commit origin/master
    git commit  # Separate step so that you can use your own commit message.
    git checkout master
    git merge clean_start  # Fast-forward
    git push origin master
    

    这将创建一个合并提交,其中两个分支(您的 master 和 origin 的 master)作为其父级,但树将与您当前的分支提示相同。换句话说,它将创建一个没有发生实际代码合并的符号合并。

    如果您不介意在 repo 中工作的其他人会被打断,您可以使用第一种方法。但是,如果您与已经有这些提交的其他人一起工作,则第二种方法将更加万无一失,并且会保留历史记录。

    【讨论】:

    • 是的,我忘了他是从第二个分支开发的,而不是master。我也更新了我的其他命令列表以弥补这种疏忽。
    【解决方案2】:
    1. 您可以明确地将 master 指向您希望它所在的位置:

      git update-ref refs/heads/master clean_start
      

      (如果您正在跟踪clean_start 中的新更改并希望大师指出那里)

      请注意,无论 master 指向什么(大约 20 次提交)都将“丢失”。

      因此,您将需要强制推送 master:

      git push origin master -f
      
    2. 如果您想将本地 master 留在原处并将 clean_start 的位置推送到远程 master,只需执行以下操作:

      git push origin clean_start:master -f

      希望这会有所帮助。

      PS。首先运行gitk --all &,这样您就可以在执行此操作时直观地看到发生了什么。

    【讨论】:

      【解决方案3】:

      git reset 命令用于更改 HEAD 指向的内容。

      在你的情况下,你可以这样做:

      git checkout master              # switch to the master branch
      git reset --hard clean_start     # point HEAD to the clean_start branch
      git push -f origin master:master # force push the new HEAD to server
      

      【讨论】:

      • 我认为这是最好的答案,因为它也解决了本地问题:你肯定希望本地/master 指向新的 HEAD
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 2022-07-02
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-15
      相关资源
      最近更新 更多