iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 26
1
# Outline
一、前言
二、概念

# TL;DR

一、前言

git-stash 是一個我很常用到的功能,它能很方便的將我手頭上的進度暫存起來。通常會在手頭上的程式開發到一半,還不足以成為一個 commit,卻被夥伴請求其他事情時用到,可能是幫忙夥伴測試、或是找錯等等。每次遇到這類情境,我就會先將當前的變動都給 git stash 起來,等事情告一段落,再將這些暫存給套用回來。事實上,stash 這個詞本上就是貯藏的意思呢!

那究竟這麼好用的貯藏功能在 Git 中是怎麼運作的呢?就讓我們來研究看看吧!

二、概念

2-1. 參考資訊

在 Git 中,任何 Stash 的資訊都會被儲存在 .git/logs/refs 這個純文字檔案中,也就是以 reflogs 的形式儲存。另外也會將最近一次 stash 以類似其他 Git Reference 的形式將 SHA-1 值存在 .git/logs/refs 中。

2-2. 儲存結構

既然有 SHA-1 值,那 Stash 本身其實就是一個 Git Object。若去查找該 Git Object 的內容,就會發現 Git Stash 就是一個 Commit Object。

2-3. 多重祖先

Stash 不僅是一個單純的 Commit Object,還是像 Merge Commit 一樣擁有多個 Parents Commits!

正常的 Stash 就會有兩個 Parents Commit,分別指向當初執行 git-stash 的 Commit,以及指向另一個紀錄當時 index 的 Commit Object。

若是在 git-stash 時有包含 untracked 或是 ignore 的檔案,那麼就會有另一個 Parents Commit 指向記錄這些檔案的 Commit Object。


上一篇
Integrate:Branch By Abstract
下一篇
Git Pack
系列文
Git 其然,Git 其所以然31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言