簡體   English   中英

git checkouts 的真正含義是什么?

[英]What do git checkouts really mean?

git 中的checkout是什么?

我知道一旦您checkout到特定分支, HEAD指向該分支。 但這到底是什么意思? 這是否意味着我可以在那個分支上工作? 如果是,那么,如果不檢查分支,我就無法處理它?

另外, remote checkout是什么意思? 它如何有用?

正如您所指出的, HEAD是一個標簽,指出您在提交樹中的位置。 當您從一個提交移動到另一個提交時,它會與您一​​起移動。 git checkout <commit>是在提交樹中移動的基本機制,將您的焦點( HEAD )移動到指定的提交。

提交可以通過多種方式中的任何一種來指定,提交哈希、分支名稱、標簽名稱、相關語法( HEAD^HEAD~1等)等等。 將 checkout 視為更改分支通常很有用,從這個角度來看,有一些選項是有效的,但它們都引用了提交。

結帳提交除了移動HEAD之外還有一些副作用。

  • 工作目錄更新為簽出提交的狀態。
  • 如果指定了分支名稱,則 checkout 會激活該分支。 活動分支將與添加的任何新提交一起移動。
    • 使用-b選項,將根據當前提交創建一個新分支,然后使其處於活動狀態。
    • 使用--track選項可以使簽出的分支知道遠程分支
    • 使用--orphan選項創建一個新分支(如使用-b )但不會基於任何現有提交。

還有更多選項,您可以在git checkout man-page 中閱讀,所有這些都圍繞從一個提交移動到另一個提交 - 除了移動HEAD之外,移動的效果有所不同。

讓我解釋一些使用文件、文件夾和分支結帳的用例,以便它可能有助於理解。

假設我們有名為devindex.html文件夾,並且所有內容都被跟蹤並且工作目錄是干凈的。

如果我不小心更改了文件名index.html並且我想撤消該操作,我將只使用git checkout index.html它將從存儲庫當前選擇的分支中恢復該文件狀態。

現在,如果我在dev文件夾中進行了一些更改並想要恢復它。 我可以使用git checkout dev但是如果已經有一個名為dev分支而不是檢查那個文件夾,它會拉下那個分支。 為了避免這種情況,我寧願做git checkout -- dev

現在這里裸雙破折號代表當前分支,並從當前選定的分支向 git 詢問文件夾dev

同樣,如果我執行git checkout alpha dev它會從 alpha 分支下拉 dev 文件夾。

這個答案是針對你的第一個問題“git checkout 真的意味着”。

“簽出”意味着您從存儲庫中獲取任何給定的提交並在工作目錄中重新創建關聯文件和目錄樹的狀態。

當您檢出不是分支頭的提交(例如git checkout HEAD~2 )時,您處於所謂的分離頭上。 您可以在此處創建提交,但是一旦切換到不同的分支,這些提交將無法通過分支名稱恢復,甚至可能在一段時間后被垃圾收集器刪除。

暫無
暫無

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

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