[TOC] ### 1. 前言 ---- git checkout 命令用于創(chuàng)建、切換分支或恢復(fù)工作樹(shù)文件。 最常用的兩種用法 ``` # 切換分支 git checkout <branch> # 創(chuàng)建并切換到新分支 git checkout -b <branch> ``` ### 2. 創(chuàng)建分支 ---- 當(dāng)我們需要以當(dāng)前分支為起點(diǎn)創(chuàng)建一個(gè)新的分支時(shí),主要會(huì)用到以下兩個(gè)命令 ``` # 創(chuàng)建分支 git branch <branch> # 切換到新分支 git checkout <branch> ``` `-b` 創(chuàng)建并切換到新分支 (上面兩個(gè)命令的合集) ``` git checkout -b <branch> ``` `-B` 重置分支(刪除已存在的分支且重新創(chuàng)建,分支不存在也不會(huì)報(bào)錯(cuò)) ``` git checkout -B <branch> ``` 基于遠(yuǎn)程庫(kù)分支創(chuàng)建分支 ``` # 語(yǔ)法格式 git checkout -b <new-branch> origin/<old-branch> # 使用示例: 以遠(yuǎn)程庫(kù)中的 liang 分支為起點(diǎn),在本地創(chuàng)建一個(gè) dev 分支 git checkout -b dev origin/liang ``` 基于指定標(biāo)簽創(chuàng)建分支 ``` # 切換到標(biāo)簽對(duì)應(yīng)的提交記錄 git checkout <tagname> # 創(chuàng)建并切換到新分支 git checkout -b <branch> ``` 基于指定 commit id 創(chuàng)建分支 ``` # 切換到指定提交記錄 git checkout <commit id> # 創(chuàng)建并切換到新分支 git checkout -b <branch> ``` ### 3. 切換分支 ---- 使用 checkout 切換分支時(shí),先從本地庫(kù)查找分支,在本地庫(kù)沒(méi)找到時(shí),就去遠(yuǎn)程庫(kù)中查找,在遠(yuǎn)程庫(kù)也沒(méi)有找到就會(huì)報(bào)錯(cuò) ``` # 切換分支 git checkout <branch> # 查找順序 本地分支 --> 遠(yuǎn)程分支 --> 提示分支不存在 ``` ![](https://img.itqaq.com/art/content/a96913ae8d89dd5547032d404bf66ffb.png) **切換分支后的提示信息** 當(dāng)我們切換到 master 分支后,出現(xiàn)這個(gè)提示說(shuō)明: 本地分支和上游分支的最新提交記錄是同一個(gè) ``` # 您的分支 “origin/master” 是最新的 Your branch is up to date with 'origin/master'. ``` 將一個(gè)遠(yuǎn)程倉(cāng)庫(kù)中的分支 liang 簽出到本地時(shí)的提示 ``` # 本地庫(kù)中的分支 liang 的上游分支是遠(yuǎn)程倉(cāng)庫(kù)中的分支 liang Branch 'liang' set up to track remote branch 'liang' from 'origin'. # 切換到了一個(gè)新的分支 liang Switched to a new branch 'liang' ``` 當(dāng)本地庫(kù)有了新的提交記錄 ``` # 本地分支比遠(yuǎn)程分支多了一次提交記錄 # 可以使用 git push 將本地的提交記錄推送到遠(yuǎn)程庫(kù) Your branch is ahead of 'origin/liang' by 1 commit. (use "git push" to publish your local commits) ``` `-q, --quiet` 不顯示任何提示信息,如下圖所示 ``` git checkout -q liang ``` ![](https://img.itqaq.com/art/content/673510ef03178db10ed1f7512274ddc4.png) ### 4. 撤銷(xiāo)更改 ---- 用于讓工作區(qū)中的文件回到最近一次 `git add` 或 `git commit` 的狀態(tài) ``` # 工作區(qū)所有文件撤銷(xiāo)更改 git checkout -- . # 工作區(qū)某些文件撤銷(xiāo)更改 git checkout -- <file1> <file2> ``` 場(chǎng)景一、本地庫(kù)中已有 user.txt,在工作區(qū)修改了該文件,但是沒(méi)有提交到暫存區(qū),此時(shí)撤銷(xiāo)更改是從版本庫(kù)中恢復(fù)內(nèi)容 ![](https://img.itqaq.com/art/content/926635789a0152a55893627e9c55432a.png) 場(chǎng)景二、本地庫(kù)中已有 user.txt,在工作區(qū)修改了該文件,并且已提交到暫存區(qū),此時(shí)撤銷(xiāo)更改是從暫存區(qū)中恢復(fù)內(nèi)容 ![](https://img.itqaq.com/art/content/4851a5d34b5ae81956480d0abe0c7e74.png)