Git新功能:switch、restore

這篇文章將介紹git restoregit switch兩個命令。

想要了解爲什麼新增了git restoregit switch命令,需先介紹下git checkout命令。

如果你對git還不瞭解,可以查看我的另一篇文章:教你係統學習Git

1. git checkout

1.1 切換分支

git checkout的功能根據上下文決定,這一點經常讓新手感到疑惑。

git checkout經常用來切換本地分支,即切換HEAD指向的分支。例如,從main分支切換到develop分支。

git checkout develop

也可以讓HEAD指針指向指定的提交,而非一個分支。此時,會進入分離分支狀態(detached HEAD state)。

git checkout 175b4f9d037d022b81dde5bdce3b2d536b1f8dcc

1.2 恢復文件

當爲git checkout參數添加文件時,事情開始變得奇怪起來。它會捨棄本地修改,使用分支狀態替換。例如,切換到dev分支後對test.txt文件做了一些修改,你可以使用當前分支最後提交中test.txt文件替換當前文件,即恢復到指定提交中的狀態。

git checkout -- test.txt

查看git checkout文檔,會發現該命令還有一個常被忽略的參數:

git checkout <tree-ish> -- <pathspec>

<tree-ish>代表很多不同的東西,但最常見的是代表提交哈希和分支名。默認爲當前分支,但也可以是任意分支、任意提交。

因此,當前在dev分支,想要將test.txt文件改變爲main分支的版本,可以使用以下命令:

git checkout main -- test.txt

總結來看,給git checkout命令傳遞分支、提交作爲參數,它會把所有文件修改到指定版本狀態;如果指定了文件名稱,它只會修改指定文件到指定版本。

2. git switch

雖然上面部分已經介紹了git checkout的使用細節,但確實很容易讓新手產生疑惑。git 2.23版本引入了兩個新的命令:git switchgit restore,每個命令只做git checkout的一部分工作。git checkout仍然可以使用,但這兩個命令對新手更友好。

git switch用來切換分支或提交。

git switch dev

使用git checkout時,可以傳入提交,切換到 detached HEAD 狀態。git switch默認不支持此操作,需提供-d標記:

git switch -d 175b4f9d037d022b81dde5bdce3b2d536b1f8dcc

另一點不同是,使用git checkout把創建、切換合併到一個命令時,使用-b標記:

git checkout -b new_branch

使用git switch創建並切換到新分支,使用-c標記:

git switch -c new_branch

3. git restore

git checkout傳遞文件切換文件狀態部分功能由git restore實現。使用git restore命令可以把文件恢復到指定狀態:

git restore -- test.txt

如果指定了 path,但 restore source 中不存在,則會移除文件以達到和指定版本一致的狀態。

參考資料:

  1. New in Git: switch and restore
  2. git-switch - Switch branches
  3. git-restore - Restore working tree files

歡迎更多指正:https://github.com/pro648/tips

本文地址:https://github.com/pro648/tips/blob/master/sources/Git%E6%96%B0%E5%8A%9F%E8%83%BD%EF%BC%9Aswitch%E3%80%81restore.md

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章