簡體   English   中英

Git提交沒有分支的標記

[英]Git commit against tag with no branch

如果我在沒有創建分支的情況下檢查我的源代碼的標記版本,Git表示我根本沒有與任何分支相關聯。 我很高興讓我做出改變並檢查它們。 這些變化在哪里? 如果我切換回'master',它們就會消失(被master中的東西覆蓋),我似乎無法再找到它們。 是什么賦予了? 如果Git允許我對基本上是匿名分支的內容進行更改,那么我肯定可以取回它們嗎?

因為您的提交不在任何分支上 ,所以除非您使用其SHA1簽出該特定提交,否則您無法在工作目錄中看到它。 您可以通過查看跟蹤從repo中檢出的內容的更改的reflog來查找提交。 如果您的代碼是XXX您會看到以下內容:

$ 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

這告訴你SHA1你必須checkout出才能在工作目錄中看到你的提交。

$ 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

這一切對我來說似乎有點奇怪,直到我意識到git checkout將所有項目文件作為特定提交放入我的文件系統(工作目錄)。 實際上,工作目錄充當本地Git存儲庫上的瀏覽器。 因此,您的更改尚未在存儲庫中被覆蓋當您檢出主服務器時 ,它們只是沒有顯示在您的工作目錄中。

是的,他們將在reflogs中。

您可以隨時命名分支,如下所示:

git checkout -b my-branch-name

或者,您可以通過查找其SHA1(使用上面的git reflog)將提交合並回master而不使用新分支,然后:

git checkout master
git merge SHA1

要回答第二個問題,你可以使用git reset --hard yourtagname

至於會發生什么,你基本上將你的分支分叉到標記名並保持在同一個分支上。 你在舊叉子里的提交仍在那里......他們很難看到。 您可能必須使用reflog來查找舊的fork。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM