溫故而知新,可以為師矣。
Git 布局
- 工作區---->暫存區---->本地倉庫---->遠端倉庫
Create Repository
- git init PATH
- git add PATH
- git commit -m CONTENTS
一次性 pull/push 所有分支
- git pull/push origin '*:*'
Revoke
- HEAD 表示當近一次 commit 版本,HEAD^ 或 HEAD~1 表示上一次送出,HEAD^^ HEAD~2(波浪線) 表示上上次送出...依次類推;也可以用 [email protected]{N} 或 哈希值等形式直接定位(根據 reflog 顯示的曆史 HEAD 記錄)
- git status
- git diff [--staged/--cached] [COMMIT] [-- PATH]:預設是比較工作區與 HEAD 之間的差異,添加 --staged 或 --cached 則是預設比較暫存區與 HEAD 之間的差異,兩種情況均可以指定要比較的 commit hash,可以用 -- filename 的形式指定要比較的具體檔案
- git diff [BRANCH_0] [BRANCH_1] —— 比較個分支最新送出之間的差異
- git reset [--hard] COMMIT [PATH] —— 根據 git log 或 git reflog 查到的 SHA1 值,在版本之間進行全局檔案或指定檔案的狀态回退,reset 的作用是将倉庫中的檔案恢複至暫存區(--soft,預設值)或工作區(--hard)
- git reflog —— 暫時記錄最近的每一條 git 操作記錄内容及其 HASH,即 HEAD 的變動記錄,該記錄不會永久儲存
- git checkout [COMMIT] -- PATH —— 撤銷工作區中單個檔案的修改,恢複到上一個最新狀态(可能是暫存區或本地倉庫中的狀态,以時間戳為準),必須添加 '--',否則會被了解為切換分支,可以指定從哪個次送出狀态恢複
- git reset 與 git checkout 的差別:reset 隻能恢複已經 commit 到版本庫中的狀态,checkout 可以恢複到暫存區中的狀态是,reset 會同時将 git log 中對應的記錄删除
- git rm [PATH] —— 同時删暫存區及工作區中的檔案,添加 --cached 選項僅删除暫存區中的檔案
- git mv [PATH] [PATH] —— 重命名,同時作用于暫存區及工作區
- git revert COMMIT —— 從遠端倉庫撤銷已 push 的送出
- git commit --amend -m "CONTENTS" —— 修改最近一次送出的備注内容
- git rebase BRANCH —— 重新標明本分支的起點,同時不丢失曆史送出記錄
Remote Repository
- git remote add TAG [email protected]:USERNAME/PROJECTNAME.git —— 其中 TAG 指為遠端倉庫打的标簽,以此辨別每個倉庫
- git push [-u] [REPOSITORY_TAG] [BRANCH] —— 将本地倉庫檔案推送至遠端,初次推送時添加 -u 選項将本地倉庫分支與遠端倉庫分支關聯
- git fetch —— 下載下傳遠端倉庫代碼但不合并,人工檢查無誤後 git merge
- git pull —— 下載下傳同時合并
- git pull --rebase —— 拉取遠端代碼的同時,更新本地倉庫起點
Branch Management
- git branch BRANCH_NAME [BASE_BRANCH] —— 基于 BASE_BRANCH 建立新分支,預設基于目前所在分支
- git checkout BRANCH_NAME —— 切換分支
- git checkout -b BRANCH_NAME —— 建立一個分支同時切換過去
- git merge [--no-ff] BRANCH_NAME —— 合并目錄分支到目前分支,git 預設是 fast forward 合并模式,此模式下合并後,被合并的分支上原先的操作計錄都将消失,添加 --no-ff 選項表示不使用 fast forward 模式,分支的相關記錄得以保留
- git branch -d BRANCH_NAME —— 删除已經被合并過的分支
- git branch -D BRANCH_NAME —— 删除沒有被合并過的分支
- git stash —— 将目前工作區中已被 git add 但未送出的檔案隔離儲存(不是放到暫存區),并處于不可見狀态,即 git status 不會提示更改未送出
- git stash list —— 顯示被隔離儲存起來的狀态清單
- git stash apply [STASH] —— 恢複隔離區的指定 stash
- git stash pop [STASH] —— 同 apply,但會同時從 stash 清單删除該條目
- git stash drop [STASH] —— 手動删除某個 stash 條目,預設都是針對最新的 stash
- git stash clear —— 清除所有stash 條目
- git remote [-v] —— 顯示遠端倉庫資訊,-v 顯示詳細資訊,如倉庫位址等
- git branch BRANCH_NAME UPSTEAM —— 建立分支的同時關聯到遠端分支
- git branch -r —— 顯示遠端分支
- git branch -a —— 同時顯示遠端與本地分支
- git branch --set-upstream-to=origin/develop develop —— 建立與連程分支的關聯,若不指定分支名稱,則關聯目前所在分支到遠端(如:origin/master 等)
Tags(助記符,友善人類記憶,畢竟 hash 值不好分辯)
- git tag TAGNAME [-a -m CONTENTS] [COMMIT_HASH] —— 預設是給最近一次送出打标簽,可以指定目标 commit 的 hash 值,還可以添加标簽說明(-a -m "...")
- git tag —— 顯示所有标簽清單
- git show TAGNAME —— 可顯示與指定标簽關聯的 commit 相關資訊
- git tag -d TAGNAME —— 删除本地标簽
- git push REMOTE_REPOSITORY TAGNAME —— 将标簽關資訊推送至遠端倉庫
- git push REMOTE_REPOSITORY --tags —— 推送所有标簽資訊推送至遠端倉庫
- git push REMOTE_REPOSITORY :refs/tags/TAGNAME —— 用于删除遠端标簽,先要 git tag -d 删除本地标簽,然後執行此操作删除遠端标簽
Alias(設定 git 指令别名)
- 示例:git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
删除與重命名遠端分支:
- git push --delete origin dev //删除遠端分支
- git push --delete origin tag TagName //删除遠端标簽
- git remote prune origin //清除本地顯示的,但遠端倉庫中已不存在的僵死分支
- git fetch -p //效果同上
- git branch -m dev develop //将本地分支 dev 分支重命名為 develop
轉載于:https://www.cnblogs.com/hadex/p/6615463.html