[英]What is the difference between git-checkout and git-reset?
我在樹枝上有兩個標簽。 每當我執行git reset old_tag
它將頭更改為old_tag
並說我落后1次提交(這是預期的)。 但是, git checkout old_tag
給出了一個獨立的頭。
據我了解, git reset
僅更改頭指針。 至於git checkout
我總是使用它來切換分支或簽出新分支中的某個提交。 但是我從來沒有用它本身來檢查提交,而沒有分支。 因此,如果始終提供獨立的頭,為什么首先允許它自己簽出提交?
更新:粗體部分是我的問題和提到的重復問題之間的區別。
從文檔中獲取 :
git-checkout-切換分支或還原工作樹文件。 或完美描述為:
更新工作樹中的文件以匹配索引或指定樹中的版本。 如果沒有給出路徑,則git checkout還將更新HEAD以將指定的分支設置為當前分支。
git-reset-將當前的HEAD重置為指定狀態
根據評論中的討論,已達成以下目標:
git-reset
:
將頭部更改為不同的提交/標簽...如果您當前處於以下狀態,則可以重置頭部:
分離狀態。
但是git reset不會使您進入分離狀態。
git-checkout
:
最后一種用途是關於我的問題的用途。 有時,您不想重置您的當前分支以嘗試舊的提交。 但是,要進入具有特定提交的分離狀態並使用該舊狀態。 只有get checkout
才能使您進入該狀態,而這不能通過git reset
來實現,因為它僅重置分支(如果處於分離狀態,也可以重置),而不能使您處於分離狀態。
頭部脫落的情況並不常見。 但是,確保您不做任何事情可能很有趣。
使用git-reset
無法獲得超脫的情況,因為它的作用是將當前分支(可能是您的舞台區域和工作目錄,具體取決於您使用的選項)移至命令所在的位置。
git-reset
不僅移動HEAD。 它會將您的branch
, HEAD
和Staged Area
到您命令的位置。
您僅使用以下命令移動分支和HEAD:
git reset --soft tag/SHA1/branch2
使用以下命令移動分支,HEAD和舞台區域:
git reset --mixed tag/SHA1/branch2 //It is the default option
使用以下命令移動分支,HEAD,舞台區域和工作目錄:
git reset --hard tag/SHA1/branch2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.