1. 程式人生 > >Git中HEAD和ORIG_HEAD指標指的是什麼

Git中HEAD和ORIG_HEAD指標指的是什麼

一次版本回退後,在歷史記錄裡面看到了這樣一張圖:

master和dev指標指向的是本地的master分支和dev分支,origin/master和origin/dev指向的是遠端倉庫的master分支和dev分支,這個很好理解。

HEAD指標代表當前工作路徑,HEAD與master指向同一id說明當前處在master分支,這個也不難理解。

關鍵是ORIG_HEAD指標是個什麼東西?翻了翻官方的說明文件,沒有發現對這個指標的說明。

搜尋了一下,略微明白了一點。

針對某些危險操作,Git通過記錄HEAD指標的上次所在的位置ORIG_HEAD提供了回退的功能。當你發現某些操作失誤了,比如錯誤的reset到了一個很早很早的版本,可以使用git reset --hard ORIG_HEAD

回退到上一次reset之前。

Git在1.8.5版本之後,加入了[email protected]{}功能,它通過一個連結串列記錄HEAD的移動路徑。

輸入$ git reflog,結果類似於:

$ git reflog
ea34578 [email protected]{0}: reset: moving to HEAD^
d628164 [email protected]{1}: commit: xxx
ea34578 [email protected]{2}: commit: xxxx
cb926e7 [email protected]{3}: commit
: xxxx

每一次移動HEAD指標,Git都會將移動的路徑通過連結串列串起來,連結串列頭部的[email protected]{0}即HEAD指標。

但是[email protected]{1}並不一定是ORIG_HEAD!注意到,ORIG_HEAD僅僅是當進行危險操作(比如merge)時才會變更為HEAD指標的原值,而[email protected]{}連結串列則記錄了每次HEAD的移動(包括commit)。

考慮以下情況:

  • 1.commit -> 2.merge -> 3.commit

此時,[email protected]{0}、[email protected]

{1}、[email protected]{2}分別指向3、2、1,而ORIG_HEAD指向的是1而非2。

顯然,有了reflog命令後HEAD連結串列比不知道什麼變過的ORIG_HEAD更好用,因此如果你使用的是1.8.5版本之後的Git,推薦使用HEAD{}連結串列來代替ORIG_HEAD指標。

相關推薦

GitHEADORIG_HEAD指標的是什麼

一次版本回退後,在歷史記錄裡面看到了這樣一張圖: master和dev指標指向的是本地的master分支和dev分支,origin/master和origin/dev指向的是遠端倉庫的master分支和dev分支,這個很好理解。 HEAD指標代表當前工作路徑,HEAD與m

git rebase revert

git  revert  可以理解成 回滾的意思。如通過 git log 可以執行 git  revert d550d24d90db1fd9d3954bff3b21ff53375c72ba git  中 rebase  和 merge 的區別: rebase和merge

git HEAD 概念

參考資料 本文講述的 是 git 命令中的 HEAD ,適用於 github ,不適用於 gerrit 本文不對git進行介紹,只是收集一些和 HEAD 相關的連結 例項

關於C#Lambda'函式指標'的簡單認識

char (*Body)(char a,char a); delegate char vest (char a, char b); C#雖然對deleagte關鍵字做了大量的操作但是本質是改不了的(本人是這麼理解的),它就是個記錄函式地址的工具C#為了更方便語言的

程式設計師必會技能系列(2)gitmergerebase比較-3

git中有兩個合併分支的方法,一個是git merge,另一個是git rebase。 一、git merge 講解 1、畫圖講解git merge 用merge合併分支時不會改變歷史(通俗的說就是commit號不會變)。在git中merge會創造一個

Git pull clone 的區別

etc 沒有 git code pos merge git merge 分支 commit git pull git clone clone 是本地沒有 repository 時,將遠程 repository 整個下載過來。 pull 是本地有 r

理解githeadmaster

2018年10月31日 21:59:19 小石頭5 閱讀數:13 標籤: git

tp90tp99是什麽性能指標

.com lan minimum inter -m blank tin percent tar 原文: https://www.zhihu.com/question/41110088 https://www.google.com.hk/#safe=st

關於git自己的分支主分支有沖突的解決方案(git烏龜git

eset 更新 關於 pan 我們 沒有 log 關於我 解決沖突 闡述一個案例,最近在開發中遇到一個問題。自己在代碼的主分支拉了一個分支,開始快樂的開發修改了。同事小明也在主分支拉了一個分支,也在快樂的修改。小明的開發速度很快,一個問題很快就解決了,並且把自己的代碼,提交

前端開發提到的“腳手架”到底什麼,CLI?gulp gulp-cli有什麼區別

一般來說,腳手架是幫你減少「為減少重複性工作而做的重複性工作」的工具. gulp和gulp-cli的區別可以看這個task - what does gulp-"cli" stands for? . 它跟前端常說的腳手架(scaffold)不是一個東西. CLI只是Command Line Interface

資料分析過程常見的一些指標概念解釋(使用者生命週期分析)

一些使用者生命週期分析中經常遇到的一些名詞的解釋。參考新增連結描述 會話 會話就是session,也就是使用者的一次開啟和啟動。會話是行為資料記錄的必要維度,會話的準確性直接影響對使用者行為的解讀以及部分關鍵統計指標的準確性。 判定: 從開啟產品到關閉產品視為一次會話;

Git 的forkPull Request

這兩個東西是用來幹嘛的? 為開源專案貢獻自己的程式碼 你使用開源專案的時候發現一個bug並且你機智的解決了,那麼你就可以告訴作者“hi 我幫你修復了一個bug!”,作者看到你的修復後覺得不錯,就同意了加入你的程式碼,這樣你的程式碼也會開源被更多人使用! fork

【Java】 劍offer(53-3) 陣列數值下標相等的元素 《劍Offer》Java實現合集 《劍Offer》Java實現合集

  本文參考自《劍指offer》一書,程式碼採用Java語言。 更多:《劍指Offer》Java實現合集   題目   假設一個單調遞增的數組裡的每個元素都是整數並且是唯一的。請程式設計實現一個函式找出陣列中任意一個數值等於其下標的元素。例如,在陣列{-3, -1,1,

#Linuxgit簡單的小問題

linux中: 1. 進入資料夾的命令 cd 資料夾名 (當該資料夾名稱中帶有空格時,應該用雙引號將資料夾名稱括起來,不然系統會將其當成多個cd的引數而報錯,或按Tab鍵自動補全) 2.檢視本檔案下面的所有有檔案資訊 ls -al 即可 du常用的選項:   -h:以

Linux檔案描述符fb檔案指標FILE*的聯絡與區別

檔案描述符: linux中,當一個程序開啟一個檔案或者是建立一個新檔案時,核心向程序返回一個檔案描述符來標示該檔案。 檔案描述符是一個非負整數,實際上它是一個索引,指向核心為程序所維護的一個檔案記錄表。 任何程式執行起來都會開啟三個預設的流,標準輸入流,標準輸出流,標準錯誤流通

C++陣列指標之間的關係梳理

C++中陣列和指標是兩個十分常用且關係密切的資料結構,“陣列即指標,指標即陣列”的言論一直層出不窮。從本質上講,陣列和指標是不同的,陣列是具有確定數量的元素,而指標只是一個標量值。但是,在某些情況下陣列和指標又能相互轉換。下面,將從多個角度分析陣列和指標。 1. 陣列和指標互相轉換 陣列

對c語言指標陣列陣列指標的認識

1.陣列:一批具有同名的同屬性的資料就組成了一個數組。(“[ ]”也是陣列型別的一部分)     由此可知:(1)陣列是一組有序資料的集合;(2)陣列中的每一個元素都屬於同一個資料型別。  定義一維陣列的一般形式:型別符  陣列名【常量表達式】(陣列也

Offer 陣列數值下標相等的元素

題目: 一個長度為n-1的遞增排序陣列中的所有數字都是唯一的,並且每個數字都在範圍0到n-1之內。在範圍0到n-1的n個數字中有且只有一個數字不在該陣列中,請找出這個數字。 樣例 輸入:[0,1,2,4] 輸出:3 解答: 二分查詢,O(logn),迴圈解法: class S

maven的groupIdartifactId到底的是什麼

---------------原文------------------- 轉載自百度知道一位網友的回答 地址:https://zhidao.baidu.com/question/1639120287056394340.html 具體回答如下: groupid和art

結構體連結串列陣列指標不同表達形式

int getMaxLengthOfItems(MEC_MENU *menu,int count){     int i;     int maxLen = strlen(menu[0].item);     for(i = 0; i < c