1. 程式人生 > >checkout 命令和reset命令的區別(轉)

checkout 命令和reset命令的區別(轉)

方便 匿名 版本號 spa article tail 添加 效果 eset

基本用法

技術分享圖片

上面的四條命令在工作目錄、暫存目錄(也叫做索引)和倉庫之間復制文件。

  • 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~(即當前提交節點的父節點)

中的foo.c復制到工作目錄並且加到暫存區域中。(如果命令中沒有指定提交節點,則會從暫存區域中拷貝內容。)註意當前分支不會發生變化。

  • 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命令的區別(轉)