此篇參照名稱(ref)」 簡單來說就是 Git 物件的一個「指標」
可以把「參照名稱」想像成 Git 物件絕對名稱的別名 (Alias)
Git 參照名稱又有區分「一般參照」與「符號參照」,兩者的用途一模一樣,只在於內容不太一樣。「符號參照」會指向另一個「一般參照」,而「一般參照」則是指向一個 Git 物件的「絕對名稱」。
Git(11) http://ithelp.ithome.com.tw/articles/10136234
[一般參照]
git branch 取得所有分支名稱,並得知目前「工作目錄」是指向哪個分支。
git log --pretty=oneline 取得該分支的所有版本紀錄。
//預設這些分支的「參照名稱」(即自己命名的分支名稱)會指向分支的「最新版」
type .git\refs\heads\newbranch1 檔案名稱一樣雜湊碼id,是指向版本歷史紀錄中的「最新版」。
git cat-file -p [id] 取得該 commit 物件的內容
等同於
git cat-file -p 分支名稱(參照名稱)
git show [id] 取得該版本的變更紀錄
所有的「參照名稱」都只是個檔案,一律放在git/refs目錄下
* 本地分支:**.git/refs/heads/**
* 遠端分支:**.git/refs/remotes/**
* 標 籤:**.git/refs/tags/**
其實分支全名應該要連前面路徑都寫進來,不過git可以使用分支名稱(參照名稱)就可以做指令git cat-file -p [xxx] 查詢,這就是這篇的重點。
查詢會用下面順序來找
* .git/<參照簡稱>
* .git/refs/<參照簡稱>
* .git/refs/tags/<參照簡稱;標籤名稱>
* .git/refs/heads/<參照簡稱;本地分支名稱>
* .git/refs/remotes/<參照簡稱>
* .git/refs/remotes/<參照簡稱;遠端分支名稱>/HEAD
保哥有舉例Git的搜尋順利,可以再連過去看。
http://ithelp.ithome.com.tw/articles/10136234
[符號參照]
不過用上面的方式要看當前分支的雜湊碼,要輸入type .git\refs\heads\newbranch1 ,但一開始不知道哪個分支,就要先用git branch得知自己的分支,然後有記說 .git\refs...才能得到結果,太麻煩...所以又有另一種作法,用「符號參照名稱」(Sysref),就會把這一長串顯示出來。
type .git\HEAD
保哥筆記:
在 Git 工具中,預設會維護一些特別的符號參照,方便我們快速取得常用的 commit 物件,且這些物件預設都會儲存在 .git/ 目錄下。這些符號參考有以下四個:
* HEAD
* 永遠會指向「工作目錄」中所設定的「分支」當中的「最新版」。
* 所以當你在這個分支執行 git commit 後,這個 HEAD 符號參照也會更新成該分支最新版的那個 commit 物件。
* ORIG_HEAD
* 簡單來說就是 HEAD 這個 commit 物件的「前一版」,經常用來復原上一次的版本變更。
* FETCH_HEAD
* 使用遠端儲存庫時,可能會使用 git fetch 指令取回所有遠端儲存庫的物件。這個 FETCH_HEAD 符號參考則會記錄遠端儲存庫中每個分支的 HEAD (最新版) 的「絕對名稱」。
* MERGE_HEAD
* 當你執行合併工作時 (關於合併的議題會在日後的文章中會提到),「合併來源」的 commit 物件絕對名稱會被記錄在 MERGE_HEAD 這個符號參照中。
另外撿了幾個指令,感覺比較好用的:
git update-ref [name] [commit id] 可以幫任一版本commit命名
git update-ref -d [name] 刪除該命名
git show-ref 顯示所有最新版本id和參照名稱
可以把「參照名稱」想像成 Git 物件絕對名稱的別名 (Alias)
Git 參照名稱又有區分「一般參照」與「符號參照」,兩者的用途一模一樣,只在於內容不太一樣。「符號參照」會指向另一個「一般參照」,而「一般參照」則是指向一個 Git 物件的「絕對名稱」。
Git(11) http://ithelp.ithome.com.tw/articles/10136234
[一般參照]
git branch 取得所有分支名稱,並得知目前「工作目錄」是指向哪個分支。
git log --pretty=oneline 取得該分支的所有版本紀錄。
//預設這些分支的「參照名稱」(即自己命名的分支名稱)會指向分支的「最新版」
type .git\refs\heads\newbranch1 檔案名稱一樣雜湊碼id,是指向版本歷史紀錄中的「最新版」。
git cat-file -p [id] 取得該 commit 物件的內容
等同於
git cat-file -p 分支名稱(參照名稱)
git show [id] 取得該版本的變更紀錄
所有的「參照名稱」都只是個檔案,一律放在git/refs目錄下
* 本地分支:**.git/refs/heads/**
* 遠端分支:**.git/refs/remotes/**
* 標 籤:**.git/refs/tags/**
其實分支全名應該要連前面路徑都寫進來,不過git可以使用分支名稱(參照名稱)就可以做指令git cat-file -p [xxx] 查詢,這就是這篇的重點。
查詢會用下面順序來找
* .git/<參照簡稱>
* .git/refs/<參照簡稱>
* .git/refs/tags/<參照簡稱;標籤名稱>
* .git/refs/heads/<參照簡稱;本地分支名稱>
* .git/refs/remotes/<參照簡稱>
* .git/refs/remotes/<參照簡稱;遠端分支名稱>/HEAD
保哥有舉例Git的搜尋順利,可以再連過去看。
http://ithelp.ithome.com.tw/articles/10136234
[符號參照]
不過用上面的方式要看當前分支的雜湊碼,要輸入type .git\refs\heads\newbranch1 ,但一開始不知道哪個分支,就要先用git branch得知自己的分支,然後有記說 .git\refs...才能得到結果,太麻煩...所以又有另一種作法,用「符號參照名稱」(Sysref),就會把這一長串顯示出來。
type .git\HEAD
保哥筆記:
在 Git 工具中,預設會維護一些特別的符號參照,方便我們快速取得常用的 commit 物件,且這些物件預設都會儲存在 .git/ 目錄下。這些符號參考有以下四個:
* HEAD
* 永遠會指向「工作目錄」中所設定的「分支」當中的「最新版」。
* 所以當你在這個分支執行 git commit 後,這個 HEAD 符號參照也會更新成該分支最新版的那個 commit 物件。
* ORIG_HEAD
* 簡單來說就是 HEAD 這個 commit 物件的「前一版」,經常用來復原上一次的版本變更。
* FETCH_HEAD
* 使用遠端儲存庫時,可能會使用 git fetch 指令取回所有遠端儲存庫的物件。這個 FETCH_HEAD 符號參考則會記錄遠端儲存庫中每個分支的 HEAD (最新版) 的「絕對名稱」。
* MERGE_HEAD
* 當你執行合併工作時 (關於合併的議題會在日後的文章中會提到),「合併來源」的 commit 物件絕對名稱會被記錄在 MERGE_HEAD 這個符號參照中。
另外撿了幾個指令,感覺比較好用的:
git update-ref [name] [commit id] 可以幫任一版本commit命名
git update-ref -d [name] 刪除該命名
git show-ref 顯示所有最新版本id和參照名稱
沒有留言:
張貼留言