前言
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 checkoutgit switchgit restore
案例比較
1、分支管理
在分支管理方面,目前切換分支以及創建分支,是使用
git checkout <分支名> 和 git checkout -b <分支名>
有了 git switch 之后,對應的命令分別為
git switch <分支名> 和 git switch -c <分支名>
最簡單的調用如下所示:git switch
$ git switch my-feature
Switched to branch 'my-feature'
Your branch is up to date with 'origin/my-feature'
在這種模式下,您可以將其視為類似於的無選擇調用。如果要替換(或簡稱,),可以編寫:git switchgit checkoutgit checkout --branchgit checkout -b
創建並且切換新分支
Tinywan@DESKTOP-TEDEO2S MINGW64 /d//wiot.tinywan.com (master)
$ git switch -c my-new-feature
Switched to a new branch 'my-new-feature'
Tinywan@DESKTOP-TEDEO2S MINGW64 /d/wiot.tinywan.com (my-new-feature)
$ git branch
這里是短期的,並可以取代你的肌肉記憶。或者,從指定的提交開始(而不是分支當前已檢出的提交):-c--creategit checkout -b
$ git switch -c my-new-feature 0810beaed7
Switched to a new branch 'my-new-feature'
該文檔中還有其他一些示例,包括上述更多示例以及有關如何設置跟蹤分支,孤立分支等的一些示例。
2、文件恢復
git restore另一方面,它使確定要更改的文件,要更改的文件以及更改的位置變得容易得多。除了記住的糾結語義外,還提供了兩個選項來指定還原的更改將移至何處。如果您通過(或完全不通過任何操作),則更改將進入您的工作副本。如果通過,它們將進入您的索引。最后,如果您同時通過了兩者,則兩者都將更改為相同的內容。git checkoutgit restore--worktree--staged
git restore還可以通過可選選項更輕松地了解要還原的內容來自何處。如果未指定,則從登台區域還原內容,否則,從特定樹還原它們。注意:和之間的另一個區別是,默認為和將刪除源樹中不存在的跟蹤文件。請參閱我們的2.22博客文章中的討論。 --source--sourcegit checkoutgit restorerestore--no-overlay--overlay
例如,如果我希望文件在工作副本和索引中的內容都與三次提交之前相同,則可以這樣寫:main.c
$ git restore --source HEAD~3 --staged --worktree main.c
……更改將完全適用。的新文檔中git restore還有更多示例。
小結
該文檔中還有其他一些示例,包括上述更多示例以及有關如何設置跟蹤分支,孤立分支等的一些示例。
git restore另一方面,它使確定要更改的文件,要更改的文件以及更改的位置變得容易得多。除了記住的糾結語義外,還提供了兩個選項來指定還原的更改將移至何處。如果您通過(或完全不通過任何操作),則更改將進入您的工作副本。如果通過,它們將進入您的索引。最后,如果您同時通過了兩者,則兩者都將更改為相同的內容。
git checkoutgit restore--worktree--staged
