Git commit against tag with no branch

后端 未结 4 931
野性不改
野性不改 2021-01-30 04:00

If I check out a tagged version of my source code without creating a branch, Git indicates that I\'m not associated with any branch at all. It\'s happy to let me make changes an

相关标签:
4条回答
  • 2021-01-30 04:28

    Yes, they'll be in reflogs.

    You can name the branch at any time like this:

    git checkout -b my-branch-name
    
    0 讨论(0)
  • 2021-01-30 04:32

    To answer the second question you'd use git reset --hard yourtagname

    As for what would happen you essentially forked your branch at the tagname and stayed on the same branch. Your commits in the old fork are still there... they're just hard to see. You might have to use the reflog to find the old fork.

    0 讨论(0)
  • 2021-01-30 04:42

    Alternatively, you can merge the commit back into master without a new branch by finding its SHA1 (using git reflog as above) and then:

    git checkout master
    git merge SHA1
    
    0 讨论(0)
  • 2021-01-30 04:46

    Because your commit isn't on any branch, you can't see it in the working directory unless you checkout that specific commit, using its SHA1. You can find the commit by looking at the reflog which tracks changes in what you have checked out from the repo. If your tag was XXX you'll see something like:

    $ git reflog
    7a30fd7... HEAD@{0}: checkout: moving from master to XXX
    ddf751d... HEAD@{1}: checkout: moving from 96c3b0300ccf16b64efc260c21c85ba9030f2e3a to master
    96c3b03... HEAD@{2}: commit:  example commit on tag XXX, not on any branch
    7a30fd7... HEAD@{3}: checkout: moving from master to XXX
    

    That tells you the SHA1 that you would have to checkout in order to see your commit in the working directory.

    $ git checkout 96c3b03
    Note: moving to "96c3b03" which isn't a local branch
    If you want to create a new branch from this checkout, you may do so
    (now or later) by using -b with the checkout command again. Example:
      git checkout -b <new_branch_name>
    HEAD is now at 96c3b03... example commit on tag XXX, not on any branch
    $ git checkout -b newbranch
    $ git branch                #lists all branches
        feature1
        master
      * newbranch
    

    This all seemed a little weird to me at first, until I realized that git checkout places all the project files as of a particular commit into my file system (working directory). In effect, the working directory acts as a browser on the local Git repository. So your changes haven't been overwritten in the repository, they're just not being shown in your working directory when you've checked out the master.

    0 讨论(0)
提交回复
热议问题