Moving master head to a branch

橙三吉。 提交于 2020-01-22 13:53:25

问题


I have several feature branches and a master branch. Feature2 is done. Normally I would rebase (working with a remote SVN repo and would like to keep the history, so no regular merge) and ff-merge. But since master hasnt changed since I branched, I would like to move the master head (at E) to G. Using git branch -f master G does not result in any visible changes, I assumed this is because G is on a different branch.

Is it safe to use git update-ref -f master G here instead? Should I stick with rebase/ff-merge? Something even better?

feature1      C-D  
             /
master    A-B-E            
               \                      
feature2        F-G  

Thank you.


回答1:


A regular merge of G into master will do the trick, no need to rebase:

    feature1      C-D  
                 /
    master    A-B-E            
                   \                      
    feature2        F-G

git checkout master
git merge feature2

    feature1              C-D  
                         /
    master, feature2  A-B-E-F-G



回答2:


You don't have to merge the branches, a reset is enough. Assuming master is checked out:

git reset --hard feature2



回答3:


No merging required - just rename the branches. Since you don't care about feature2 ('is done') nor the existing master (at 'E') you just need the following.

git branch -d master
git branch -m feature2 master

Simple is better?

Remember there are two key concepts involved:

  1. The Git commit graph, and
  2. The Git references

When you do a merge (of various flavors and including rebase) you are changing the commit graph. The changes involve adding nodes, adding links or perhaps moving links. References (including branches and tags) only point to commits and thus changing a reference just changes the pointed-to commit - not the structure of the graph.

So, in your case, there is no needed change to the structure, just a changing of the references.

A one line version is:

git branch -f master feature2

which keeps the feature2 branch around (unlike the prior two-liner which axes feature2).




回答4:


The update-ref is safe. A branch head is nothing more than a little "read me!" tag hung on a commit. It's purely by convention that git picks it up and hangs it on a different commit for you at times.

Using git branch -f master G does not result in any visible changes

What does git log --decorate --oneline --all say? git show master?




回答5:


It might be best to perform a non fast forward merge of feature 2 into master by using git merge --no-ff feature2 if you have checked out onto the master branch. You should end up with the following

feature1      C-D  
             /
master    A-B-E-----H          
               \   /                   
feature2        F-G 


来源:https://stackoverflow.com/questions/10753330/moving-master-head-to-a-branch

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!