工具系列 | git checkout 可替換命令 git switch 和 git 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 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM