# 連兔兔都能懂的 git 常用指令 ## 前言 一般在使用 git 會有分 local 和 git server 端,後者又通常稱呼為 remote 但是一個 local git repo 可以連接到很多個 remote repo 每一個連接都會有一個名稱,預設會是叫做 `origin` 可以使用下列指令查看 ```shell $ git remote -v ``` ![](https://i.imgur.com/Ug0rJg9.png) ## 取得 git 專案 使用下列指令會取得該 repo 的 default branch ==(usually from GitHub/GitLab 或自架 git server)== ```shell $ git clone [repo_url] ``` 1. 使用 SSH clone ```shell $ git clone git@github.com:tailwindcss-tw/tailwindcss.com.git ``` 2. 使用 HTTPS clone ```shell $ git clone https://github.com/tailwindcss-tw/tailwindcss.com.git ``` ## 開新支線 ```shell $ git checkout -b branch_name # 建立新 branch 然後切換過去 ``` 這行等於 ```shell $ git branch branch_name # 建立 branch 但不切換 $ git checkout branch_name # 切換到別的 branch ``` ==通常會加上前綴字樣,例如使用 git flow 就可能會加上 `feature/i18n` 來當作 branch name== ## 同步 branch 內容 ### 上傳 branch 內容 ```shell $ git push ``` 有時候會遇到 remote 和 local 版本差異的問題,如果要強制覆蓋 remote 上同名的 branch 可以使用下列指令來強制覆寫 remote branch,使用 rebase 的話就容易遇到(後述) ```shell $ git push -f ``` ### 從 remote 取得(下載)同名 branch 內容 ```shell $ git fetch origin # 更新 origin (通常是 remote 預設)的最新狀態 $ git pull # 實際下載 branch 內容 ``` 或 ```shell $ git fetch --all # 更新所有 remote 的最新狀態 $ git pull # 實際下載 branch 內容 ``` ### 合併分支 (merge) ```shell main> $ git merge branch_name ``` 把 branch_name 合併進入 main (branch) ### rebase branch (合併分支的一種方法) ```shell branch_name> $ git merge main ``` 把 branch_name 接續到 main 之後 ### merge 和 rebase 差異 假設一個 commits graph 長這樣 ![](https://i.imgur.com/md2bf43.png) 使用 merge 把 `feature/i18n` 合併進入 `main` 會變成 ```shell main> $ git merge feature/i18n ``` ![](https://i.imgur.com/uFTuesH.png) 而使用 rebase 的話則會是 ```shell feature/i18n> $ git rebase main ``` ![](https://i.imgur.com/sfFX5mE.png) ==注意兩者使用指令時所在的 branch 不同== 通常使用 rebase 會對於 remote 的 branch 來使用,例如: ```shell feature/i18n> $ git fetch origin # 記得先更新 remote 狀態 feature/i18n> $ git rebase origin/main ``` ### 使用 rebase 後與 remote 相歧 當一個 branch 已經 push 上去 remote 後,因為一些原因同個 branch 再經過修改然後再次 rebase 後就會發生 local branch 和 remote branch 相歧的情況 ![](https://i.imgur.com/prVBquC.png) 這時如果要強制更新 remote branch 可以使用先前提到的指令來強制更新 ```shell $ git push -f ``` 而如果要反過來使用 remote branch 內容來強制覆寫 local branch ```shell $ git fetch origin $ git reset --hard origin/<branch_name> ``` ==目前所在的 branch== 內容則會被 origin 的內容強制覆寫 ###### tags: `git`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up