天天看點

拾遺:Git 常用操作回顧

溫故而知新,可以為師矣。

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

git