[Git] 安裝與使用
Git 設置
Git 下載與安裝
- Windows
- Mac
Mac 安裝可能會等很久,需耐心等待。
- 安裝 Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- 等待安裝,直到
Press RETURN to continue or any other key to abort出現,按下Enter。 - 繼續等待安裝,直到出現
Installation successful!。 - 測試 Homebrew 是否正確安裝:
brew --version。 - 安裝 Git
brew install git
Git 的初次設定
下載完,可以先用 git --version 確認是否安裝成功。
按照開始 - 初次設定 Git 進行設定。最主要需要設定使用者名稱與電子郵件:
git config --global user.name "Jeremy"
git config --global user.email jeremy@example.com
git config --list # 確認設定資訊
Git 基本操作
要在專案中使用 Git,要先在專案中建立本地儲存庫:
git init
之後當專案中程式碼編輯完需要紀錄時就可以直接進行下列動作:
- 追蹤查詢狀態
git status
- 檔案更新,準備丟到暫存區。
.代表所有變動檔案通通都丟過去,可以用檔案名取代.。
git add .
- 提交到本地儲存庫
git commit -m "Your commit message"
Git 與 GitHub
push 本地 repo 到 GitHub
當已經在 GitHub 上建好一個儲存庫:
git remote add origin https://github.com/{user-name}/{repo-name}.git
git branch -M main
git push -u origin main
關於這一串指令,GitHub 在剛創完 repo 會自行產生,複製即可。
在第一次執行完畢後,往後如果有程式碼變動要再推到遠端儲存庫來你只需要輸入git push。
clone GitHub 上的 repo 到本地
git clone https://github.com/{owner-name}/{project-name}.git
.gitignore
關於那些不想讓 Git 紀錄的檔案,比如一大包的 node_moules 資料夾、含有私人隱私資訊 (比如資料庫連線字串) 的 .env 檔案,可以在專案下建立一個 .gitignore 檔案,裡面填入不要 Git 紀錄的檔案。
這裡要注意 .gitignore 務必優先於 Git 存在於專案中,不然如果先裝 Git,裝的當下其實 Git 就把整個檔案記住了,這時才設定 .gitignore 就得多做一些步驟把那些不想被紀錄但已經被紀錄的檔案移除。很多 env 變數都是這樣被不小心丟到雲端 repo 上的。
如果你一開始忘記把 .env 加入 .gitignore,可以用以下指令移除:
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch .env" HEAD
然後再透過 git push --force 來強制推送。
Git 實務開發常用的指令
與分支相關
git branch: 檢查本地目錄下有哪些分支。git branch develop: 創建 XXX 分支。git branch -d develop: 刪除 XXX 分支。-d:只能刪除已經合併的分支。-D:強制刪除分支。
與分支切換相關
git switch develop: 切換路徑到 XXX 分支。- 同
git checkout develop。
- 同
git checkout -b develop: 建立並更換路徑。- 同
git switch -c。
- 同
與遠端 repo 相關
git remote -v: 查詢連線的遠端 repo。git remote remove origin: 解除跟遠端 repo 的連線。
與變更相關
git log --oneline: 查詢 commit 紀錄 (行列式)。git reset --hard <commit>: 回到指定 commit。git reset --soft HEAD~1: 回到上一個 commit,並保留變更。
git stash: 暫存變更。git stash list: 查看暫存清單。git stash apply stash@{0}: 恢復某暫存。git stash drop stash@{0}: 刪除某暫存。
git merge xxx: 合併 xxx 分支到目前分支。git rebase xxx: 將目前分支的 commit 移到 xxx 分支後面。git merge --no-edit xxx: 合併時使用預設 commit。
git add -p 拆解 commit
假設你一口氣變更了很多程式碼,現在準備提交,卻發現剛剛的變更裡包含太多功能,而通常我們會希望單一功能 (目的) 就單獨一個 commit,這時候就可以使用 git add -p 來拆解變更。
git add -p 執行下去後,git 會先自動拆解每個變更並且逐個問你是否要加入這個變更到 commit 中,可以用這些指令來操作:
y:加入這個變更到 commit 中。n:不加入這個變更到 commit 中。s:拆解這個變更。q:退出git add -p。d:跳過當前文件中的所有剩餘片段。a:加入當前文件中的所有剩餘片段。
如果是新增的檔案,git add -p 會抓不到,可以先用 git add [file_name] 加入暫存區。
Trouble Shooting
- 如果
git clone了一份專案,解除原先的遠端 repo 儲存後,要接到自己的遠端 repo 時出現錯誤! [remote rejected] main -> main (pre-receive hook declined)。- 先刪除該專案本地的 git repo。
Remove-Item -Path .git -Recurse -Force- 檢查是否刪除乾淨:
git status- 重新安裝本地 git repo:
git init