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

Max*_*xem 32 git branch revert head

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

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

git checkout -b clean_start HASH
Run Code Online (Sandbox Code Playgroud)

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

换句话说,我想移动主人20的头部提交,然后将我的新干净分支合并到其中.

这正是我必须做的吗?通过恢复HEAD~20等,还是有一个命令可以完全移动?

cdh*_*wie 29

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

git push --force origin clean_start:master
Run Code Online (Sandbox Code Playgroud)

请注意,如果其他人已经克隆了存储库,那么从它们推送可能会撤消此操作.如果要合并本地主分支和远程主分支,但保留分支中的文件树(丢弃源的主文件树),可以这样做:

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
Run Code Online (Sandbox Code Playgroud)

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

如果你不介意在回购中工作的其他人会被打断,你可以使用第一种方法.但是如果你与已经拥有这些提交的其他人合作,第二种方法将更加万无一失,并将保留历史.


Ada*_*ruk 26

  1. 您可以专门将master指向您希望的位置:

    git update-ref refs/heads/master clean_start
    
    Run Code Online (Sandbox Code Playgroud)

    (如果您正在跟踪新的更改clean_start并希望主人指向那里)

    请注意,无论高手指向什么(大约20个提交值)将"丢失".

    你需要强制推动主人因为这个:

    git push origin master -f
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果您希望将本地主服务器保留在原来的位置并将clean_start的位置推送到远程主服务器,请执行以下操作:

    git push origin clean_start:master -f

    希望这可以帮助.

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


jtd*_*ubs 17

git的复位命令的存在是为了什么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
Run Code Online (Sandbox Code Playgroud)