代码之家  ›  专栏  ›  技术社区  ›  Maxem

使git master head指向当前分支的head

  •  32
  • Maxem  · 技术社区  · 14 年前

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

    情况: 有人试图实现一些特性,并把它们交给了主控,现在我被要求做另一个人想做的事情(但失败了),因此,我做的第一件事是

    git checkout -b clean_start HASH
    

    hash是一个正确的sha1 hash,在当前主控形状之前大约有20个提交,并且有效。现在我对这个分支做了一些更改,现在我想将远程存储库的当前主分支(由其他人进行更改)更改为本地分支。

    换言之,我想把20大师提交的头部移回来,然后将我新的干净分支合并到其中。

    这正是我必须做的吗?使用回退头~20等,还是有命令可以精确地移动回退头?

    3 回复  |  直到 11 年前
        1
  •  29
  •   cdhowie    14 年前

    如果远程存储库接受强制推送,则可以执行此操作:

    git push --force origin clean_start: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
    

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

    如果您不介意在回购中工作的其他人会被打断,您可以使用第一种方法。但是,如果你和其他已经有这些承诺的人一起工作,第二种方法将是更愚蠢的证明,并将保持历史。

        2
  •  26
  •   jokklan    11 年前
    1. 您可以将master特别指向您希望它与之一起的位置:

      git update-ref refs/heads/master clean_start
      

      (如果您正在跟踪 clean_start 想让大师指向那里)

      当心大师所指的一切(大约20个承诺值)都将“丢失”。

      您需要强制大师的推动,因为:

      git push origin master -f
      
    2. 如果您想将本地主机留在原来的位置,并将干净的启动位置推到远程主机,只需执行以下操作:

      git push origin clean_start:master-f

      希望这有帮助。

      PS.运行 gitk --all & 首先,这样你就可以在视觉上看到正在发生的事情。

        3
  •  17
  •   jtdubs    14 年前

    这个 git reset 存在用于更改头指向的命令。

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

    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