Git 入門筆記
Git 可以幫助我們更有效的進行版本控制,便於多人協作、管理多個版本。
我一開始傻傻的以為它的運作模式是幫助我們儲存每一次所變更的檔案,使用時還一直很擔心我如果改了什麼內容不就會被覆蓋掉嗎?但實際上它所儲存的是我們每次所進行的變動(當你真正使用後便可以從過程中所顯示的 ++--
了解這一切XD),如此一來既可有效進行版本控管,又不會佔太大的空間,究竟要多天才才能創造出這種方法呢?(沒錯,過去我就是手動使用了多個資料夾來管理各種版本,弄到最後直接亂掉...)
如何安裝
Windows
至 Git官網 下載並安裝,完成後使用 Git Bash。
MacOS
打開 terminal,輸入 git --version
,MacOS 10.9 以上會自動引導安裝,若無則可參考 官網說明 進行操作。
Git 常用指令
指令 | 功能 | 說明 |
---|---|---|
git init | 初始化 | 在資料夾內使用,會產生檔名為 .git 之隱藏檔案,會將需要被 git 所控制的檔名寫入檔案中 |
git status | 狀態查詢 | 查看目前狀態 commit 前: untracked 尚未加入版本控制 staged 已加入版本控制 |
git add 檔名 | 加入版本控制 | |
git add .(或資料夾名稱) | 加入版本控制 | 資料夾下所有檔案都加入版本控制 |
git rm --cached 檔名 |
取消加入版本控制 | |
git commit | 新建一個版本 | 送出後會進入 vim 編輯器 若 commit message 內容較長可以寫在裡面 內容較短則使用 git commit -m "message here (使用 -m 前 無論新舊檔案都要記得 add ) |
git commit -am "message" |
快速新建版本 | 效果等同 git add . + git commit -m -am 只對先前 add 過的檔案有效,新的檔案必須手動 add 後才能 -am |
git log | 歷史紀錄 | |
git log --oneline |
單行歷史紀錄 | |
git checkout 版本代碼 |
切換到某個版本 | |
git checkout master | 切換到 master 這個 branch 的最新狀態 |
基本操作流程統整
初始化
- 對要控制的資料夾下
git init
git add
將檔案加入版本控制,用git status
檢查 - 可以把資料夾中不需要進行版本控制的檔案寫入
.gitignore
檔(記得要把這個檔案加入版本控制資料夾裡面) - 通常會將使用者相關檔案、作業系統產生檔案等與專案本身較無關的檔案加入
如果不自己寫入 .gitignore,就要在每次 commit 時手動忽略
### commit - 通常會在完成一個小進度的時候才進行 commit
- 如果修改的檔案已經 add 過,在後續 commit 時就可以使用
git commit -am "message"
- commit 後可用
git diff
指令觀看這一次改了什麼地方
Branch 分支
為什麼需要 branch?
在發展新功能與進行 bug fixing 時,可以分頭進行(平行),做完了確定後再合併。
指令 | 功能 | 說明 |
---|---|---|
git branch -v | 看現在有哪些 branch | |
git branch branch name |
新建 branch | |
git branch -d branch name |
刪除既有 branch | |
git checkout -b branch name |
新增 branch 之後直接切換過去 | |
git merge branch name |
將 branch 併回 master | 合併後就可以把 branch 刪掉 merge 時若遇到衝突,手動解決衝突後再 commit |
Github
把 code 放上 Github
新增一個 repo 之後會跑出教學說明。
已經有 repo 的做法
git remote add origin https://github位址
git push (-u) origin master
push 最新狀態
git push origin master / branch 名稱
pull 已 push 之檔案
git pull origin master
把別人的 repo 抓下來
git clone 網址 //抓到本地
fork 則是直接複製一份 repo 到自己的 github 上。
在 github 上要求 merge
點擊 Compare & pull requests
特殊狀況
更改送出的 commit message
git commit --amend
刪除 commit
git reset HEAD^
HEAD 表示最新的 commit,^
則是代表前一個
git reset HEAD^ --hard //全都不要了,就像根本沒發生過
git reset HEAD^ --soft(預設) //commit 不要了,但修改過的檔案狀態還是在
還沒 commit,將檔案回覆到之前的狀態
git checkout -- 檔案名稱
git checkout --. //所有檔案
更改 branch 的名字
git branch -m 新名稱
把遠端的 branch 抓下來
git checkout branch 名稱
Hook
發生某事的時候讓程式自動通知我。
Git hook
.git 資料夾 -> hooks 資料夾,裡面的小程式會有說明文字
最常使用到「在 commit 之前檢查」的功能
exit 1
:不送出 commit
exit 0
:送出 commit