git config命令
git help命令
git init命令
git add命令
git clone命令
git status命令
git diff命令
git commit命令
git reset命令
git rm命令
git mv命令
git branch命令
git checkout命令
git merge命令
git mergetool命令
git log命令
git stash命令
git tag命令
git fetch命令
git pull命令
git push命令
git remote命令
git submodule命令
git show命令
git shortlog命令
git describe命令
git rebase命令
git checkout命令
git checkout
命令用於切換分支或恢復工作樹文件。git checkout
是git最常用的命令之一,同時也是一個很危險的命令,因爲這條命令會重寫工作區。
使用語法
git checkout [-q] [-f] [-m] [<branch>]
git checkout [-q] [-f] [-m] --detach [<branch>]
git checkout [-q] [-f] [-m] [--detach] <commit>
git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <new_branch>] [<start_point>]
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>…
git checkout [-p|--patch] [<tree-ish>] [--] [<paths>…]
描述
更新工作樹中的文件以匹配索引或指定樹中的版本。如果沒有給出路徑 - git checkout
還會更新HEAD
,將指定的分支設置爲當前分支。
示例
以下是一些示例 -
示例-1
以下順序檢查主分支,將Makefile
還原爲兩個修訂版本,錯誤地刪除hello.c
,並從索引中取回。
$ git checkout master #(1)
$ git checkout master~2 Makefile #(2)
$ rm -f hello.c
$ git checkout hello.c #(3)
(1) 切換分支
(2) 從另一個提交中取出文件
(3)從索引中恢復hello.c
如果想要檢出索引中的所有C
源文件,可以使用以下命令 -
$ git checkout -- '*.c'
注意:*.c
是使用引號的。 文件hello.c
也將被檢出,即使它不再在工作樹中,因爲文件globbing
用於匹配索引中的條目(而不是在shell的工作樹中)。
如果有一個分支也命名爲hello.c,這一步將被混淆爲一個指令切換到該分支。應該寫:
$ git checkout -- hello.c
示例-2
在錯誤的分支工作後,想切換到正確的分支,則使用:
$ git checkout mytopic
但是,您的「錯誤」分支和正確的「mytopic
」分支可能會在在本地修改的文件中有所不同,在這種情況下,上述檢出將會失敗:
$ git checkout mytopic
error: You have local changes to 'frotz'; not switching branches.
可以將-m
標誌賦給命令,這將嘗試三路合併:
$ git checkout -m mytopic
Auto-merging frotz
在這種三路合併之後,本地的修改沒有在索引文件中註冊,所以git diff
會顯示從新分支的提示之後所做的更改。
示例-3
當使用-m
選項切換分支時發生合併衝突時,會看到如下所示:
$ git checkout -m mytopic
Auto-merging frotz
ERROR: Merge conflict in frotz
fatal: merge program failed
此時,git diff
會顯示上一個示例中乾淨合併的更改以及衝突文件中的更改。 編輯並解決衝突,並用常規方式用git add
來標記它:
$ edit frotz # 編輯 frotz 文件中內容,然後重新添加
$ git add frotz
其它示例
git checkout
的主要功能就是遷出一個分支的特定版本。默認是遷出分支的HEAD版本
一此用法示例:
$ git checkout master #//取出master版本的head。
$ git checkout tag_name #//在當前分支上 取出 tag_name 的版本
$ git checkout master file_name #//放棄當前對文件file_name的修改
$ git checkout commit_id file_name #//取文件file_name的 在commit_id是的版本。commit_id爲 git commit 時的sha值。
$ git checkout -b dev/1.5.4 origin/dev/1.5.4
# 從遠程dev/1.5.4分支取得到本地分支/dev/1.5.4
$ git checkout -- hello.rb
#這條命令把hello.rb從HEAD中籤出.
$ git checkout .
#這條命令把 當前目錄所有修改的文件 從HEAD中籤出並且把它恢復成未修改時的樣子.
#注意:在使用 git checkout 時,如果其對應的文件被修改過,那麼該修改會被覆蓋掉。