[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