Git submodule update

后端 未结 4 1853
Happy的楠姐
Happy的楠姐 2020-11-21 05:11

I\'m not clear on what the following means (from the Git submodule update documentation):

...will make the submodules HEAD be detached, unless -

4条回答
  •  醉话见心
    2020-11-21 05:54

    To address the --rebase vs. --merge option:

    Let's say you have super repository A and submodule B and want to do some work in submodule B. You've done your homework and know that after calling

    git submodule update

    you are in a HEAD-less state, so any commits you do at this point are hard to get back to. So, you've started work on a new branch in submodule B

    cd B
    git checkout -b bestIdeaForBEver
    
    

    Meanwhile, someone else in project A has decided that the latest and greatest version of B is really what A deserves. You, out of habit, merge the most recent changes down and update your submodules.

    
    git merge develop
    git submodule update
    

    Oh noes! You're back in a headless state again, probably because B is now pointing to the SHA associated with B's new tip, or some other commit. If only you had:

    git merge develop
    git submodule update --rebase
    
    Fast-forwarded bestIdeaForBEver to b798edfdsf1191f8b140ea325685c4da19a9d437.
    Submodule path 'B': rebased into 'b798ecsdf71191f8b140ea325685c4da19a9d437'
    

    Now that best idea ever for B has been rebased onto the new commit, and more importantly, you are still on your development branch for B, not in a headless state!

    (The --merge will merge changes from beforeUpdateSHA to afterUpdateSHA into your working branch, as opposed to rebasing your changes onto afterUpdateSHA.)

提交回复
热议问题