主頁 > 企業開發 > Git未能在標簽上創建分支

Git未能在標簽上創建分支

2021-10-24 01:13:57 企業開發

我有以下分支:

xxx@box:~/src$ git branch
  jira_6500
* main
xxx@box:~/src$ git rev-parse main
bfd271932228f8ce33b68b82ffee5ee3b2386a17
xxx@box:~/src$ git rev-parse jira_6500
bfd271932228f8ce33b68b82ffee5ee3b2386a17
xxx@box:~/src$

我嘗試從標簽創建一個新分支v2.6.0-rc3,如下所示:

xxx@box:~/src$ git rev-parse v2.6.0-rc3
ff8db8992102ca7ce76f55169d06173c888c9447

xxx@box:~/src$ git checkout -b test001 v2.6.0-rc3
Switched to a new branch 'test001'
xxx@box:~/src$ git branch
  jira_6500
  main
* test001

然后我檢查新分支的 rev 哈希。我希望和標簽一樣v2.6.0-rc3但事實并非如此。它與jira_6500分支相同

xxx@box:~/src$ git rev-parse test001
bfd271932228f8ce33b68b82ffee5ee3b2386a17

我做了與下面的執行緒相同的事情。我記得我以前這樣做過。

rev 哈希值怎么會出錯?

如何從標簽創建新分支?

uj5u.com熱心網友回復:

你的分支創建作業,你會希望它的方式。您所看到的原因與 Git 標簽的內部結構有關,這有點奇怪。

Git 在其小小的 gitty 心臟中,都是關于commits 的,這些commits由哈希 ID 編號,通常以十六進制表示:bfd271932228f8ce33b68b82ffee5ee3b2386a17例如。

為了使提交作業,Git 需要另外兩個內部支持物件,Git 將它們稱為treeblob這些也有哈希 ID。您通常不會看到這些哈希 ID:它們不會“泄露”太多。(不過,Blob 哈希 ID 確實顯示index:git diff輸出的行中如果您查找它們,您可以找到樹哈希:這些都不是隱藏的。它們只是不像提交哈希 ID 那樣全部出現在您的面前。 )

標簽,在 Git 中,標記一個提交——但你在這里有一個選擇:一個輕量級標簽直接保存一個提交哈希 ID,所以如果你有 commit bfd27...,你可以創建一個輕量級標簽來存盤該哈希 ID。不過,如果您想存盤更多資訊,Git 有一個支持物件,稱為標記物件或帶注釋的標記物件我們讓 Git 創建這些物件之一,存盤額外的資料——例如 PGP 簽名或其他什么——并且該物件獲得自己唯一的哈希 ID,例如ff8db8992102ca7ce76f55169d06173c888c9447.

該標簽物件本身存盤,與注釋資料一起,所述提交散列ID, bfd271932228f8ce33b68b82ffee5ee3b2386a17由于這些哈希 ID 各自唯一標識對應的物件,因此 Git 可以通過讀取標記物件并找到存盤的提交哈希 ID ,使用標記IDff8db...來查找提交物件。(這是不可能的:bfd27...在我們創建任何指向它的標簽之前,提交是一成不變的,因此我們以后不能這些標簽 ID添加提交中。所以,像往常一樣使用 Git,我們必須向后作業,從較新的物件到較舊的物件。)

使用git rev-parse v2.6.0-rc3,您可以獲得帶注釋的標簽物件的哈希 ID。從這里 Git 可以找到提交。標簽名稱可以直接指向一個提交——同樣,這使它成為一個輕量級標簽——或者指向一個標簽物件,使標簽名稱成為一個帶注釋的標簽。Git 可以通過任何一種方式找到提交。

與標簽名稱不同,分支名稱受到限制:它們可能僅包含某些(現有)提交的哈希 ID 所以當創建一個新的分支名稱時,如果你給 Git 一個帶注釋的標簽物件的哈希 ID,或者一個決議帶注釋的標簽物件的名稱,Git 會繼續跟隨帶注釋的標簽物件到它的目標,這需要是一個犯罪。1

所以這正是你在這里看到的。創建分支名稱跟隨標記到標記提交。其他分支名稱也指向同一個提交——這很好也很正常。當您使用git checkout“打開”這些分支名稱之一git switch并進行提交時,Git 將照常進行新提交,并且作為 的最后一步git commit,將新提交的哈希 ID 寫入當前分支名稱,導致分支前進。

使用git checkout v2.6.0-rc3簽出標簽git switch --detach v2.6.0-rc3將使 Git 進入分離的 HEAD模式,其中HEAD包含提交的原始哈希 ID。在這種情況下,進行新提交會將新提交的哈希 ID 直接存盤在特殊名稱中HEAD,而不是任何分支名稱中。這意味著重新附加(使用分支名稱而不是提交哈希 IDHEAD覆寫HEAD存盤槽)會“丟失”新提交,這就是您通常不會在 detached-HEAD 模式下執行新作業的原因。2

這里還有最后一件事要提,那就是git rev-parse有一堆句法技巧來處理這個問題。它們都包含在gitrevisions 檔案中,但在此處快速概述相關內容很有用:

  • git rev-parse v2.6.0-rc3只為您提供v2.6.0-rc3決議為的任何 ID :在這種情況下,refs/tags/v2.6.0-rc3決議為帶注釋的標簽。

  • git rev-parse v2.6.0-rc3^{commit}找到:關聯提交v2.6.0-rc3也就是說,如果這是一個標簽,它會剝離標簽并要求結果是一個提交。

  • git rev-parse v2.6.0-rc3^{tree}找到與關聯v2.6.0-rc3:也就是說,如果這是一個標簽,它會剝掉標簽;如果這是一次提交,它會查找存盤該提交中的頂級樹它要求最終結果是樹的哈希 ID。

  • git rev-parse v2.6.0-rc3^{}找到與 關聯的散列 ID v2.6.0-rc3,如果是標簽,則剝離標簽(然后成功停止并生成散列 ID,無論找到的物件是什么型別)。

In this case, git branch test001 v2.6.0-rc3 or git checkout -b test001 v2.6.0-rc3 has the same effect internally as you'd get using v2.6.0-rc3^{commit} with git rev-parse.

These syntax tricks work with most Git commands: wherever some hash ID might be required, you can use a name, and whatever name you supply goes through the same process git rev-parse uses to turn it into a hash ID.


1Annotated tags can be made to point directly tree or blob objects. If you do this, you cannot use them to create a new branch name. Annotated tag objects may also contain, as their target hash ID, the hash ID of another annotated tag object; in this case, Git continues indirecting until it finds the final object. This repeated indirection is called peeling tags, with the concept taken from the idea of peeling an onion, layer by layer, until you find out what is inside. Of course, in the case of an onion, when you've peeled away all the layers, there is nothing left but the smell. ??

2The exceptions here include:

  • git rebase uses this mode deliberately to build a new commit chain. Once done, git rebase forces the to-be-rebased branch name to point to the last of the new commits.

  • If you like, you can work in this mode for a while, then create a new branch name yourself, or force some existing branch name to point to the new commit.

  • If you do work in detached-HEAD mode by mistake, you can use git reflog to find the commit you want and create a branch name (or tag name!) that finds it.

Git mostly just provides the mechanism here, and you can build anything you like on top of that.

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/332855.html

標籤:混帐 git分支 git标签

上一篇:我在GIT分支中只有一次提交。如何洗掉那個提交?

下一篇:致命:無法訪問“https://xxxx.git/”:服務器證書驗證失敗。CAfile:/etc/ssl/certs/ca-certificates.crtCRLfile:無

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more