# 檢視狀态
git status
git log
# 建立分支
git branch <分支名>
# 建立并切換分支
git checkout -b <分支名>
# 送出代碼
git commit -m "備注内容"
# 切換分支
git checkout <分支名>
git switch <分支名> //git 2.23版本引入
# 合并分支
git merge <分支名> // 把其他分支合并到自己身上來
git rebase <分支名> // 把自己合并到主分支前面去-讓代碼的開發路線更清晰,讓并行開發看起來像是順序開發
# 分離HEAD HEAD的原理
HEAD--幫助我們在送出樹上進行移動
可以利用checkout指令, 讓HEAD指針指向某個具體的送出記錄(比如C3,C4,C5)而不是分支名(main,bugFix)
# git 的相對引用:
^ 向上移動1個送出記錄 ^ 還有上一代的意思,一個^就是往上1代
git checkout main^ 切換到main的父節點
~<num> 向上移動多個送出記錄
^和~的使用,支援鍊式操作
-f:強制讓指針指向某一個具體的送出
git branch -f main HEAD~3
git branch -f bugFix C1 //讓bugFix指向C1節點
# 撤銷變更
git reset HEAD~1 //對遠端分支無效
git revert HEAD
# cherry-pick可以将送出樹上任何的送出記錄追加到目前所在位置(HEAD)上
# 适用場景: 送出記錄号和哈希值已知
git cherry-pick <送出号>
# 互動式 rebase
互動式rebase 指的是使用帶參數 --interactive的rebase指令 簡寫為 -i
git rebase -i HEAD~4
# git tag
git tag <标簽号> <送出号>
git tag v0 c1
# 描述離自己最近的錨點
git describe <ref> // ref可以是任何能被git識别成送出記錄的引用
//如果你沒有指定的話,Git 會以你目前所檢出的位置(HEAD)。
它輸出的結果是這樣的:
<tag>_<numCommits>_g<hash>
tag 表示的是離 ref 最近的标簽, numCommits 是表示這個 ref 與 tag 相差有多少個送出記錄, hash 表示的是你所給定的 ref 所表示的送出記錄哈希值的前幾位。
當 ref 送出記錄上有某個标簽時,則隻輸出标簽名稱
# 查找産生Bug的送出記錄
git bisect
# 兩個父節點之間的切換
git checkout HEAD^2 //切換到另一個父節點
# git 遠端倉庫
git clone
# 遠端分支
命名規範: <remote name>/<branch name> 一般遠端倉庫的名稱預設為origin
# 從遠端倉庫下載下傳記錄
git fetch
從遠端倉庫下載下傳本地倉庫中缺失的送出記錄
更新遠端分支指針
不會改變本地倉庫的狀态,也不會更新main分支
# 合并遠端分支
git cherry-pick origin/main
git rebase origin/main
git merge origin/main
# 從遠端倉庫下載下傳并合并分支
# pull操作時, 送出記錄會被先下載下傳到origin/main 分支上,再合并到本地的main分支
git pull
git pull --rebase //重要,送出代碼前一定要先做這一步
# 推送本地記錄到遠端倉庫
# push操作時,我們把工作從main推到遠端倉庫中的main分支,同時更新遠端分支origin/main
git push
git push <remote> <place> //git push origin main
git push origin <source>:<destination> //git push origin foo^:main
# 偏離的送出曆史
git 會強制你先合并遠端最新的代碼,再分享你的工作
git pull --rebase //下載下傳遠端代碼并合并
git push //再将自己的代碼推送到遠端分支
# 如何自定義遠端分支
# 方法一
git checkout -b <期望能夠跟蹤origin/main分支的本地分支> o/main
# 方法二
git branch -u o/main <本地分支名>
# git 遠端倉庫進階操作
# 推送主分支
# 合并遠端倉庫
# 遠端追蹤
# git push 的參數
git push <remote> <place> //git push origin main
git push origin <source>:<destination> //git push origin foo^:main
# git fetch 的參數
git fetch <remote> <place> //git fetch origin foo //把遠端倉庫foo分支下載下傳到本地的origin/foo分支上
git fetch <source>:<destination> //source指的是遠端倉庫的位置,destination是要放置送出的本地倉庫的位置
# 沒有source的source
git push origin :side //遠端倉庫和本地倉庫中的side分支會被删除
git fetch origin :bugFix //本地會建立一個新分支bugFix
# git pull的參數 git pull 實際上就是 fetch + merge 的縮寫
git pull origin <source>:<destination>
########################草稿區############################
# 幫助指令
show solution #檢視參考答案
git fakeTeamwork #模拟團隊合作