2024-08-18|閱讀時間 ‧ 約 26 分鐘

新手村導讀 - 6: Git(2)

事不宜遲,接續上次的內容,這次介紹基礎的指令吧!

git pull

最基礎的指令之一,用於將遠端伺服器的內容抓下來,更新本地的內容。

*因為是拉下來再更新,因此有可能需要解衝突。

*大部分情況下, git pull = git fetch + git merge

git push

最基礎的指令之一,用於本地的內容推上遠端伺服器去更新內容。如果你推的內容跟遠端的有衝突,會跑出 error 不讓你繼續進行下去,此時可以考慮 rebase 或是搭配 -f 指令去強推分支。然後, -f 指令請慎用,因為遠端的內容會直接被覆蓋要,而且無法復原!

*完整指令: git push origin 本地分支:遠端分支 (-f)

*刪除遠端分支: git push origin :遠端分支

git merge

最基礎的指令之一,用於合併分支內容。

git fetch

這個指令會把遠端的所有分支儲存在本地,但不會進行更新。可以搭配 source 參數去銜接本地與遠端的不同分支的內容。

*儲存特定分支: git fetch origin 遠端分支

*將(遠端)分支1拉下來後,銜接(本地)分支2: git fetch origin 分支1:分支2

git branch

這個指令可以處理跟分支有關的操作,例如查詢分支、刪除分支、新建立分支等等。

*查詢分支: git branch

*當前位置新建分支: git branch 新分支名稱

*在指定位置開分支: git branch 新分支名稱 HEAD~^2~git branch 新分支名稱 Hash值

*刪除分支(不能刪除目前自己所在的分支): git branch -D 分支名稱

*強制將分支指向特定位置: git branch -f 分支 分支或Hash值

git checkout

這個指令主要用來切換分支。 git checkout 分支名稱

git rebase & git cherry-pick

基本概念是,rebase 是將 Commit 點到別的分支上,而 cherry-pick 則是將別人的 Commit 點撿來目前所在的分支進行使用。

*將分支2搬家到分支1後面: git rebase 分支1 分支2

*撿點(會直接加在目前的位置後面): git cherry-pick (Hash1) (Hash2) …

git reset & git revert

這兩個指令都是退回 Commit 點的指令。

reset 會直接退回之前的 Commit 點,而 revert 則是將內容退回指定的 Commit 點內容,但是會有新的 Commit 點

另外一個重點是,revert 只會在你目前所在的分支(以及原始拉出來的分支)生效,在其他分支上即使 hash 值相同,git revert 的效果仍不會顯現!

舉例來說:

現在 A 分支(含有 A0 這個點)合併進入 B、C 兩個分支,那麼 B、C 上面都會有 A0 這個點(同樣內容不同 Hash 值)。當我今天想在這兩個分支上都退掉 A0 時,

  1. 先從 B 拉出新的分支 B1, git revert ,併回 B 分支,這樣 B 就會有 revert 的效果。
  2. 但是要注意的事情是,現在即使將 B1 併回 C 分支也不會有效果!
  3. 因此我們需要額外從 C 拉出 C1 分支後再做一遍,最終併回 C 分支,這樣才能完美完成退版~

git tag

這個指令是在特定 Commit 設立標籤,功能簡單,指令也很簡單 git tag 標籤名稱 Hash值 ,不過實作上依舊蠻常用到的。

對於開發者本身的意義:

  1. 代表重大更新里程碑
  2. 打完標籤後就無法再對這個 Commit 點進行 git 相關的操作,可以避免有人亂動內容。

對於使用者來說:

  1. 可以快速看到自己需要哪個版本的內容
  2. 在程式內引用時可以直接指定版號,避免某天突然套件更新導致程式出現致命性錯誤。

git describe

這個指令跟標籤也有關係,主要是用於尋找特定 Commit點往前最近的標籤,畢竟實作上有時已經先鎖定需要哪部分修改內容了,但是反而找不太到版號,此時這個指令就可以派上用場啦~

Git 進度條終於跑完 2/3 了,當我開始整理筆記後才發現之前真的記錄了很多 OAO

參考資料:

  1. 經驗甘苦談
  2. Day24|【Git】認識 git tag 標籤常用指令、標籤與分支的差異 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw)
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.