博文位址
我的GitHub | 我的部落格 | 我的微信 | 我的郵箱 |
---|---|---|---|
baiqiantao | bqt20094 | [email protected] |
目錄
- Git 使用技巧
- git 工作流程
- git rebase -i
- git cherry-pick
- 三個設定級别
- 日志格式
- 預置的日志格式
- 自定義日志格式
- author 和 committer
- HEAD 的含義
- 删除滿足條件的分支

Git 的三個區域:
- Working Tree(workspace):目前的工作區域
- Index/Stage:暫存區域,使用 git add xx,就可以将 xx 添加到 Stage 裡面
- Repository:送出的曆史,即使用 git commit 送出後的結果
【s】合并多個送出:
- 執行
或git rebase -i HEAD~影響的最少commit數
git rebase -i 前一個commitId
- 将
前面的需要合并的那條commit
改為pick
,儲存後退出s
- 會提示你修改 commit 日志,修改完儲存後退出
假如我們隻是合并了第 2 條和第 3 條的commit,但是第 1 條的 commitId 也變了。
【d】删除多個送出:
-
git rebase -i HEAD~影響的最少commit數
git rebase -i 前一個commitId
-
需要删除的那幾條commit
pick
d
【r】修改多個送出:
-
git rebase -i HEAD~影響的最少commit數
git rebase -i 前一個commitId
-
需要修改的那幾條commit
pick
r
- 每個改為 reword 的 commit 都會提示你修改 commit 日志,修改儲存後退出
注意,修改後會生成新的 commitId
cherry-pick 官方文檔
cherry-pick 的翻譯是 擇優挑選
git cherry-pick <commitid> <commitid> # 挑選多個指定的 commit
git cherry-pick <start-commit>..<end-commit> # 指定範圍,(左開右閉]
git cherry-pick <start-commit>^..<end-commit> # 指定範圍,[左閉右閉]
git cherry-pick <branch name> # 挑選 branch 最頂端的送出
start-commit:離目前時間最早的送出,不包含
end-commit:離目前時間最近的送出,包含
如果 cherry-pick 多個 commit 時遇到沖突:
-
:繼續進行下個操作git cherry-pick --continue
-
:結束 cherry-pick 操作,但是不會影響沖突之前多個送出中已經成功的git cherry-pick --quit
-
:停止本次操作,回到 cherry-pick 前的狀态,包括多個送出中已經成功的git cherry-pick --abort
Git 的設定檔案有三個級别:local、global、system
- 位于某個由Git控制的
下隐藏的項目
目錄下的.git
檔案,包含了具體到某個項目的配置。config
- 位于使用者目錄下的
檔案 ,如.gitconfig
,包含了具體到某個使用者配置的值。如果你傳遞參數選項C:\Users\Administrator\.gitconfig
給--global
,它将讀寫這個檔案。git config
- 位于Git安裝目錄下的
檔案,如gitconfig
,包含了适用于系統所有使用者和所有庫的值。如果你傳遞參數選項C:\Program Files\Git\mingw64\etc\gitconfig
--system
git config
級别 | 影響範圍 | 配置檔案位置 | 優先級 |
---|---|---|---|
| 本倉庫 | | 最高 |
| 目前使用者的所有倉庫 | | 中 |
| 目前系統所有使用者的所有倉庫 | | 最低 |
其實還有一個 worktree
,估計是新增的,不常用,也不知道幹嘛的
按指定格式顯示日志資訊
--pretty
,可選項有:
-
:顯示 3 行(commitId、Author、Date) + 送出說明,預設--pretty=medium
-
:在一行顯示,僅顯示 commitId 和 送出說明--pretty=oneline
-
:顯示 2 行(commitId、Author) + 送出說明--pretty=short
-
:顯示 3 行(commitId、Author、Commit) + 送出說明--pretty=full
-
:顯示 5 行(commitId、Author、AuthorDate、Commit、CommitDate) + 送出說明--pretty=fuller
-
:沒啥用--pretty=email
-
--pretty=raw
-
:自定義日志格式--pretty=format:<string>
git log -3 --pretty=fuller
文法規則:
--pretty=format:<string>
------------------------------------------------ 内容 ------------------------------------------------
其中
<string>
部分可包含以下内容:
-
送出的完整哈希字串,%H
送出對象的簡短哈希字串%h
-
樹對象的完整哈希字串,%T
樹對象的簡短哈希字串%t
-
父對象的完整哈希字串,%P
父對象的簡短哈希字串%p
-
作者(author)的名字,%an
送出者(committer)的名字%cn
-
作者的電子郵件位址,%ae
送出者的電子郵件位址%ce
-
作者修訂日期,%ad
送出日期;可以用%cd
選項定制格式-date=
-
%ar
送出日期;按多久以前的方式顯示%cr
-
送出說明%s
------------------------------------------------ 顔色 ------------------------------------------------
git config --global color.ui true //啟用預設的顔色設定
git config --global color.ui false //關閉預設的顔色設定
git config --global color.diff.meta "blue black bold"
- 可以針對具體的内容進行設定如:color.branch、color.diff、color.interactive、color.status
- 顔色可用值有:normal、black、red、green、yellow、blue、magenta、cyan、white
- 字型可選值有:bold、dim、ul、blink、reverse
------------------------------------------------ 案例 ------------------------------------------------
git log -3 --pretty=format:"%Cred%h %Cgreen[%cr] %Cred%an %Creset%s %Creset"
格式
%Cred%h %Cgreen[%cr] %Cred%an %Creset%s %Creset
的含義:
-
:紅色的簡短哈希字串%Cred%h
-
:綠色的送出日期,按多久以前的方式顯示%Cgreen[%cr]
-
:紅色的作者(author)的名字%Cred%an
-
:預設的白色的送出說明%Creset%s
-
:其他内容都使用預設的格式%Creset
參考
-
是實際的修改者(patch 的作者),author
是實際的送出者(把 patch 應用到 repository 裡的人)committer
- 很多項目限制隻有少數人可以送出 patch,但大家(patch 的作者)都可以把 patch 發送給這些人
-
隻能通過 commit 得到,通過committer
或者git commit --reset-author
可以修改 Author(一般不會修改)--author="Name"
- 典型場景,如果你通過
合入了别人的一個修改(沒有沖突),然後cherry-pick
到倉庫,此時push
是别人,author
是你自己committer
作者是指最後一次檔案的人,而送出者是指
修改
該檔案的人
送出
-
最後一次送出HEAD
-
指最後一個送出的父送出(等同于HEAD^
)HEAD~1
-
倒數第 n 次送出HEAD~n
git branch | grep 'dev' | xargs git branch -d //删除分支名包含 dev 的分支
指令解釋:
-
:用于列出本地所有分支git branch
-
:管道指令,用于将一串指令串聯起來,前面指令的|
可以作為後面指令的輸出
輸入
-
:搜尋過濾指令,使用正規表達式搜尋文本,并把比對的行列印出來grep
-
:參數傳遞指令,用于将标準輸入作為指令的xargs
傳給下一個指令參數
2019-7-14
本文來自部落格園,作者:白乾濤,轉載請注明原文連結:https://www.cnblogs.com/baiqiantao/p/11111287.html