簡體   English   中英

git-checkout和git-reset有什么區別?

[英]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

將頭部更改為不同的提交/標簽...如果您當前處於以下狀態,則可以重置頭部:

  1. 在樹枝上。
  2. 分離狀態。

    但是git reset不會使您進入分離狀態。

git-checkout

  1. 要么用於創建分支並在其中簽出提交
  2. 在分支之間切換
  3. 使您處於分離狀態(如果您自己檢出了提交)。

最后一種用途是關於我的問題的用途。 有時,您不想重置您的當前分支以嘗試舊的提交。 但是,要進入具有特定提交的分離狀態並使用該舊狀態。 只有get checkout才能使您進入該狀態,而這不能通過git reset來實現,因為它僅重置分支(如果處於分離狀態,也可以重置),而不能使您處於分離狀態。

頭部脫落的情況並不常見。 但是,確保您不做任何事情可能很有趣。

使用git-reset無法獲得超脫的情況,因為它的作用是將當前分支(可能是您的舞台區域和工作目錄,具體取決於您使用的選項)移至命令所在的位置。

git-reset不僅移動HEAD。 它會將您的branchHEADStaged 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.

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