前言
在 Git 術語中,“checkout”是在目標實體的不同版本之間切換的行爲。該命令對三個不同的實體進行操作:文件、提交和分支。除了“checkout”的定義之外,短語“檢出”通常用於表示執行命令的行爲。在撤消更改主題中,我們瞭解瞭如何使用來查看舊提交。git checkout
checkout分支類似於checkout舊的提交和文件,因爲工作目錄會更新以匹配選定的分支/修訂;但是,新更改將保存在項目歷史記錄中,也就是說,它不是隻讀操作。
Checking out branches
該命令允許您在由創建的分支之間導航。檢出一個分支會更新工作目錄中的文件,以匹配存儲在該分支中的版本,並告訴 Git 在該分支上記錄所有新提交。將其視爲選擇正在進行開發的哪條線路的一種方式。
git checkoutgit branch
爲每個新功能創建一個專用分支是從傳統的 SVN 工作流程中進行了巨大轉變。這使得嘗試新實驗變得非常容易,而不必擔心破壞現有功能,並且可以同時處理許多不相關的特性。此外,分支還促進了幾種協作工作流程。
git checkout git clone
該命令有時可能會與混淆。兩個命令之間的區別在於,clone 命令用於從遠程存儲庫獲取代碼,而 checkout 命令則用於在本地系統上切換已經存在的代碼版本。
Usage: Existing branches
$> git branch
main
another_branch
feature_inprogress_branch
$> git checkout feature_inprogress_branch
New Branches
從當前創建
git checkout -b <new-branch>
從特定分支創建
默認情況下將基於當前。可以傳遞一個可選的附加分支參數到。在上面的例子中,被傳遞,然後以爲基礎而不是當前。
git checkout -b <new-branch> <existing-branch>
Switching Branches
git checkout <branchname>
Git Checkout a Remote Branch
與團隊合作時,通常會使用遠程存儲庫。這些存儲庫可以是託管和共享的,也可以是另一個同事的本地副本。每個遠程存儲庫都將包含其自己的一組分支。爲了檢出遠程分支,您必須首先獲取該分支的內容。
git fetch --all
在現代版本的Git中,您可以像本地分支一樣檢出遠程分支。
git checkout <remotebranch>
舊版本的Git需要基於.remote創建一個新分支。
git checkout -b <remotebranch> origin/<remotebranch>
此外,您可以檢出一個新的本地分支並將其重置爲遠程分支的最後一次提交。
git checkout -b <branchname>
git reset --hard origin/<branchname>
Detached HEADS(分離HEAD)
現在我們已經看到了分支的三個主要用途,重要的是討論狀態。請記住,狀態是 Git 引用當前快照的方式。在內部,該命令只需更新爲指定分支或提交即可。當它指向一個分支時,Git 不會抱怨,但當您檢出一個提交時,它會切換到一種狀態。
"Detached HEAD"是Git版本控制系統中的一個術語,指的是當前所在分支不再與任何具體的分支關聯。這種情況通常發生在以下兩種情況下:
- 當您檢出(checkout)某個特定提交時,而不是檢出某個分支時。
- 當您從一個沒有命名的分支上進行操作時。
當HEAD處於“detached”狀態時,您可以對代碼庫進行修改和提交,但這些更改將無法保存到任何現有分支上。如果要保留更改並創建新的永久性分支,則需要使用git branch命令手動創建新的分支,並將其指向當前HEAD所在位置。
總之,“Detached HEAD”狀態通常被視爲一種臨時狀態,在完成必要操作後應該儘快恢復到正常模式以避免潛在問題。
git checkout``“detached HEAD”``HEAD``git checkout``HEAD``“detached HEAD”
這是一個警告,告訴你所有的操作都與項目開發的其餘部分“脫離”了。如果您在脫離狀態下開始開發某個功能,則沒有分支可以讓您返回該狀態。當您不可避免地檢出另一個分支(例如合併您的功能)時,將無法引用您的功能:HEAD。
未來:switch+restore
git checkout 這個命令承擔了太多職責,既被用來切換分支,又被用來恢復工作區文件,對用戶造成了很大的認知負擔。
Git社區發佈了Git的新版本2.23。在該版本中,有一個特性非常引人矚目,就是新版本的Git引入了兩個新命令 git switch 和 git restore,用以替代現在的 git checkout。換言之,git checkout 將逐漸退出歷史舞臺。
Git社區決定這樣做,是因爲目前 git checkout 命令承載了太多的功能,這讓新手們感到困惑。git checkout 的核心功能包括兩個方面,一個是分支的管理,一個是文件的恢復。這兩個核心功能,未來將由 git switch 和 git restore 分別負責。
詳細:工具系列 | git checkout 可替換命令 git switch 和 git restore - Tinywan - 博客園 (cnblogs.com)