這篇筆記記錄了我在git學習中常常用到的指令,方便在未來進行查閱。此篇文章也會根據筆者的學習進度持續更新。
網站分享
Git 常用命令大全
Learn Git Branching
基礎
$ git init? ? ?//在當前位置配置一個git版本庫
$ git add <file>? ? ?//將文件添加至暫存區
$ git add .? ? ? ? ? //將文件夾中的所有內容添加至暫存區
$ git commit? ? ? ? ?//將暫存區的內容提交至庫中
$ git commit -m "<注釋內容>"? ? ?//提交的同時添加注釋(即提交信息)
$ git status? ? //查看暫存區中的內容
$ git log? ? //查看提交記錄
其實每一個提交記錄都可以看作一個“快照節點”,像一個相片一樣記錄的當前庫內容的所有細節,方便我們恢復到對應提交節點的內容。
每一個這樣的節點對應一個又長又復雜的哈希值,用來索引這些提交。
這個過程中可能會進入Vim編輯器,在按下ESC后切換至命令行模式,輸入“:wq”即可保存并退出。
git log展示是可能會進入less分頁器,按下q鍵即可退出。
分支
在我們的提交樹中,總是有一個名為HEAD的指針指向我們的提交,其所指的地方常常使我們指令所作用的地方。HEAD 總是指向當前分支上最近一次提交記錄。大多數修改提交樹的 Git 命令都是從改變 HEAD 的指向開始的。
$ git branch? ? ? //展示所有分支,帶*的是HEAD所在的位置
$ git branch <branch_name>? ? ? //創建分支,默認為當前提交上
$ git branch <branch_name> <hash>? ? ? //在指定提交節點上創建分支
$ git branch -d <branch_name>? ? ? //將分支刪除
$ git branch -f <branch_name> <hash>? ? ? ?//將分支強制移動到某提交上
其實HEAD的實質也是一個哈希值,一般在需要用到哈希值時,可以使用相對位置。如HEAD~就是HEAD的父提交節點。HEAD~2就是父的父。HEAD^就是父。HEAD^2是第二個父(多個父節點時)。在使用merge合并兩個分支后,“將目標分支并入當前分支”的“當前分支”就是第一個父parent,“目標分支”就是第二個父,即^2。
$ git merge <branch_name>? ? ? //將目標分支并入當前分支(多條路徑)
$ git rebase <branch_name>? ? ? //將目標分支嵌入當前分支(一條路徑)
$ git rebase <branch_name_1> <branch_name_2>? //將分支1嵌入分支2
在并入分支時可能會產生沖突,命令行中顯示“MERGING”的字樣,這是需要手動在對應文件做出更改,然后再通過add指令和commit指令重新提交。
$ git checkout <branch_name>/<hash>? ? ? ? //將HEAD移動至目標提交(檢出)
$ git checkout?-b <branch_name>? ? ? ? //創建新分支并檢出,即HEAD到此分支上
$ git reset <hash>? ? ? ? ?//真撤銷
$ git revert <hash>? ? ? ? //假撤銷,相當于是做了一個回到上一提交的提交
$ git log --oneline --graph --decorate --all? ? ? //可視化查看提交樹
修改提交
$ git commit --amend? ? ? ? ? //可以修改提交信息,可通過該命令添加遺漏文件
$ git commit --amend -m "<新的提交信息>"? ? ? ? //直接修改提交信息
$ git cherry-pick <hash>? ? ? ? //將對應的提交節點復制為新的提交節點
$ git cherry-pick <hash1> <hash2>? ? ? ? //依次生成新創建,<hash>可以是分支或HEAD
$ git rebase -i <hash>? ? ? ? ? //修改范圍內的提交
這個指令會讓我們進入Vim編輯器,此時按下“i”、“a”、“s”進入編輯模式,按ESC退出該模式。在編輯模式可以對各個節點進行替換刪除等操作,將每個提交前的“pick”替換為其他指令可以產生對應的效果,這些指令都寫在下方的注釋中。
標簽
因為分支是需要我們不斷操作移動的,而不是固定在某一提交上的,所以就需要用“標簽”來標識重要的提交。標簽的內容通常就是版本號,格式一般為 [ v <主版本號> . <次版本號> . <修訂號> ] ,修訂號的更新通常是修復了某些bug或者優化了某些內容,次版本號更新會添加一些功能但與老版本兼容,主版本號通常用于重大更新,調整范圍較大,新老版本不兼容。一般非正式發布的都采用v0.x.x,第一個正式發布的項目一般為 v1.0.0 。
$ git tag? ? ? ? ? //查看所有標簽
$ git tag <tag_name>? ? ? ? //默認在HEAD提交節點上添加標簽(無注解,稱為輕標簽)
$ git tag -a <tag_name>? ? ? ? ?//啟用編輯,添加注解(稱為注解標簽)
$ git tag -am "<注解>" <tag_name>? ? ? ? //創建標簽的同時添加注解(-m用于編輯信息)
$ git tag <tag_name> <hash>? ? ? ? //指定提交節點
$ git tag -d <tag_name>? ? ? ? //刪除標簽
$ git describe? ? ? ? ? ?//描述離默認的HEAD最近的標簽信息,只能描述注解標簽
$ git describe <hash>? ? ? ?//描述離目標提交最近的標簽信息
小結
這篇文章將會作為動態筆記記錄,我將把我在日常開發中可能用到的指令更新在這里,方便查閱與使用。
如有補充糾正歡迎留言。