圖解 Git 各種用法,一目了然!
時間:2021-10-29 13:59:22
手機看文章
掃描二維碼
隨時隨地手機看文章
[導讀]關注、星標公眾號,直達精彩內容來源:marklodato.github.io/visual-git-guide/index-zh-cn.html基本用法上面的四條命令在工作目錄、暫存目錄(也叫做索引)和倉庫之間復制文件。gitadd*files*?把當前文件放入暫存區(qū)域。gitc...
關注、星標公眾號,直達精彩內容
基本用法
上面的四條命令在工作目錄、暫存目錄(也叫做索引)和倉庫之間復制文件。
- git add *files*把當前文件放入暫存區(qū)域。
- git commit給暫存區(qū)域生成快照并提交。
- git reset -- *files*用來撤銷最后一次git add *files*,你也可以用git reset撤銷所有暫存區(qū)域文件。
- git checkout -- *files*把文件從暫存區(qū)域復制到工作目錄,用來丟棄本地修改。
- git commit -a相當于運行git add把所有當前目錄下的文件加入暫存區(qū)域再運行。git commit.
- git commit *files*進行一次包含最后一次提交加上工作目錄中文件快照的提交。并且文件被添加到暫存區(qū)域。
- git checkout HEAD -- *files*回滾到復制最后一次提交。
約定
后文中以下面的形式使用圖片。
命令詳解
Diff
有許多種方法查看兩次提交之間的變動。下面是一些示例。
Commit
提交時,git用暫存區(qū)域的文件創(chuàng)建一個新的提交,并把此時的節(jié)點設為父節(jié)點。然后把當前分支指向新的提交節(jié)點。下圖中,當前分支是main。在運行命令之前,main指向ed489,提交后,main指向新的節(jié)點f0cec并以ed489作為父節(jié)點。
Checkout
checkout命令用于從歷史提交(或者暫存區(qū)域)中拷貝文件到工作目錄,也可用于切換分支。
HEAD標識處于分離狀態(tài)時的提交操作
當HEAD處于分離狀態(tài)(不依附于任一分支)時,提交操作可以正常進行,但是不會更新任何已命名的分支。(你可以認為這是在更新一個匿名分支。)
Reset
reset命令把當前分支指向另一個位置,并且有選擇的變動工作目錄和索引。也用來在從歷史倉庫中復制文件到索引,而不動工作目錄。
Merge
merge 命令把不同分支合并起來。合并前,索引必須和當前提交相同。如果另一個分支是當前提交的祖父節(jié)點,那么合并命令將什么也不做。另一種情況是如果當前提交是另一個分支的祖父節(jié)點,就導致fast-forward合并。指向只是簡單的移動,并生成一個新的提交。
Cherry Pick
cherry-pick命令"復制"一個提交節(jié)點并在當前分支做一次完全一樣的新提交。
Rebase
衍合是合并命令的另一種選擇。合并把兩個父分支合并進行一次提交,提交歷史不是線性的。衍合在當前分支上重演另一個分支的歷史,提交歷史是線性的。本質上,這是線性化的自動的 cherry-pick
技術說明
文件內容并沒有真正存儲在索引(.git/index)或者提交對象中,而是以blob的形式分別存儲在數(shù)據(jù)庫中(.git/objects),并用SHA-1值來校驗。索引文件用識別碼列出相關的blob文件以及別的數(shù)據(jù)。對于提交來說,以樹(tree)的形式存儲,同樣用對于的哈希值識別。樹對應著工作目錄中的文件夾,樹中包含的 樹或者blob對象對應著相應的子目錄和文件。每次提交都存儲下它的上一級樹的識別碼。