checkout 命令和reset命令的區別(轉)
基本用法
上面的四條命令在工作目錄、暫存目錄(也叫做索引)和倉庫之間復制文件。
- git add files 把當前文件放入暫存區域。
- git commit 給暫存區域生成快照並提交。
- git reset -- files 用來撤銷最後一次git add files,你也可以用git reset 撤銷所有暫存區域文件。
- git checkout -- files 把文件從暫存區域復制到工作目錄,用來丟棄本地修改。
你可以用 git reset -p, git checkout -p, or git add -p進入交互模式。也可以跳過暫存區域直接從倉庫取出文件或者直接提交代碼。
- git commit -a 相當於運行 git add 把所有當前目錄下的文件加入暫存區域再運行。git commit.
- git commit files 進行一次包含最後一次提交加上工作目錄中文件快照的提交。並且文件被添加到暫存區域。
- git checkout HEAD -- files 回滾到復制最後一次提交。
Checkout
checkout命令用於從歷史提交(或者暫存區域)中拷貝文件到工作目錄,也可用於切換分支。
當給定某個文件名(或者打開-p選項,或者文件名和-p選項同時打開)時,git會從指定的提交中拷貝文件到暫存區域和工作目錄。比如,git checkout HEAD~ foo.c會將提交節點HEAD~(即當前提交節點的父節點)
- HEAD當前提交節點
- HEAD~當前提交節點的父節點
- HEAD~2當前提交節點的父節點的父節點
- HEAD~3當前提交節點的父節點的父節點的父節點
當不指定文件名,而是給出一個(本地)分支時,那麽HEAD標識會移動到那個分支(也就是說,我們“切換”到那個分支了),然後暫存區域和工作目錄中的內容會和HEAD對應的提交節點一致。新提交節點(下圖中的a47c3)中的所有文件都會被復制(到暫存區域和工作目錄中);只存在於老的提交節點(ed489)中的文件會被刪除;不屬於上述兩者的文件會被忽略,不受影響。
如果既沒有指定文件名,也沒有指定分支名,而是一個標簽、遠程分支、SHA-1值或者是像master~3類似的東西,就得到一個匿名分支,稱作detached HEAD(被分離的HEAD標識)。這樣可以很方便地在歷史版本之間互相切換。比如說你想要編譯1.6.6.1版本的git,你可以運行git checkout v1.6.6.1(這是一個標簽,而非分支名),編譯,安裝,然後切換回另一個分支,比如說git checkout master。
Reset
reset命令把當前分支指向另一個位置,並且有選擇的變動工作目錄和索引。也用來在從歷史倉庫中復制文件到索引,而不動工作目錄。
如果不給選項,那麽當前分支指向到那個提交。如果用--hard選項,那麽工作目錄也更新,如果用--soft選項,那麽都不變。
如果沒有給出提交點的版本號,那麽默認用HEAD。這樣,分支指向不變,但是索引會回滾到最後一次提交,如果用--hard選項,工作目錄也同樣。
如果給了文件名(或者 -p選項), 那麽工作效果和帶文件名的checkout差不多,除了索引被更新。
轉載:https://blog.csdn.net/shimazhuge/article/details/77168307
checkout 命令和reset命令的區別(轉)