搞清楚 Git 與 GitHub 的差別並學會必會操作
什麼是 Git?
Git 是一個軟體,可藉由它產生一個數據庫(repository),並且做到分散式版本控制。由於可在多處放置同一份程式碼、歷史紀錄追蹤與回朔,讓協同開發變得容易。(關於不同版本控制系統的介紹,請參閱
Git 官方教學文件)
什麼是 GitHub?
Github 是一個遠端數據庫,其他還有 Bitbucket 和 Gitlab。
優勢比較:
- GitHub:擁有 GitHub Pages 功能,可擁有私人數據庫,免費方案是 3 人以下
- Bitbucket:可擁有私人數據庫,免費方案是五人以下團隊
- GitLab:自架 Git 伺服器,有提供 web 視覺化管理介面,常用於企業內部開發
基本終端機指令
– 前往資料夾:cd <路徑>
– 到目前資料夾上一層:cd ..
– 到目前資料夾最外層:cd ~
– 查看當前位置:pwd
– 查看當前資料夾內檔案:ls(cd + 空白鍵 + tab鍵)
– 創建資料夾(工作目錄):mkdir <demo>
– 新增檔案:touch <index.html>
– 刪除檔案:rm <index.html>
– 複製檔案:cp <index.html>
– 移動檔案:mv <index.html>
– 清除終端機畫面:clear
git 設定
– 查看 git 版本:git — version
– 輸入姓名:git config — global user.name “Ray”
– 輸入個人的 email:git config — global user.email “ray@gmail.com”
– 查詢使用者名稱:git config user.name
– 查詢使用者信箱:git config user.email
– 查詢 git 設定內容:git config — list
git 初始化與提交
– 初始化數據庫:git init
– 查看 git 狀態:git status
– 將當前資料夾內檔案加入索引:git add .
– 查看工作目錄與索引內檔案的不同:git diff
– 提交更新:git commit -m “修改內容”
git 切換、還原與查看紀錄
– HEAD 切換到指定版本:git checkout <git log 雜湊碼>
– 將整個目錄復原到最新的 commit 狀態:git reset — hard
– 加入索引的檔案還原到工作目錄:git reset HEAD
– 本地數據庫還原到前兩個版本:git reset HEAD^^
– 本地數據庫還原到前一個版本,並清除工作目錄:git reset HEAD^ — hard
– 本地數據庫還原到指定 commit:git reset <commit 編號> — hard
– 還原合併前狀態:git reset — hard ORIG_HEAD
– 查看 commit 歷史紀錄:git log
– 查看 commit 詳細歷史紀錄:git reflog
– 觀看線圖:git log — oneline -graph
git 設定遠端數據庫與更新
– 查詢所有遠端數據庫名稱:git remote
– 查詢所有遠端數據庫名稱與網址:git remote -v
– 註冊遠端數據庫:git remote add <origin> <遠端數據庫網址>(origin 為預設遠端數據庫名稱)
– 更新遠端數據庫(將本地分支和遠端分支進行合併):git push <origin> <master>(如要在 push 時順便將遠端數據庫設為預設,讓下次要傳到同個遠庫時只需輸入 git push,即輸入 git push -u origin master)
– 下載檔案到本地數據庫(對本地分支没有影響):git clone <網址> / git fetch <網址>(簡單來說,clone 指令通常只會用在一開始,之後的更新使 fetch/pull 指令;fetch 指令並不會將你本地數據庫中的 master branch 更新到最新的狀態,可以把 git fetch 想成是在下載資料,並不會更新任何的檔案。)
– 更新本地數據庫(將遠端分支和本地分支進行合併):git pull(git fetch + git merge <origin> <master>)
git 分支與合併
– 查看分支:git branch
– 建立分支:git branch <分支名稱>
– 在特定 commit 上加分支:git branch <新分支名稱> <commit 編號>
– 刪除指定分支:git branch -d <分支名稱>
– 切換到指定分支最新版本:git checkout <分支名稱>
– 將指定分支合併到目前分支後:git merge <分支名稱>
– 合併後成為一個新 commit(master 在開啟分支並在分支上提交 commit 後,master 都沒有更動時的合併):git merge <分支名稱> — no-ff
– 合併衝突(Merge Conflicts):合併時,若檔案裡的某一行都被參與合併方修改,將發生合併衝突,檔案會停留在工作目錄上,解決衝突後就能提交(多人協作時,需要先 pull,解決衝突後再 push)
常見合作開發流程
Git flow
- 在 master 建立開發用新分支(黃)
- 在開發用分支上針對功能再另開分支(桃),完成後合併回開發用分支(黃)
- 正式部署前,將程式碼合併在測試分支(綠)上做討論與測試
- 將程式碼合併在 master 分支上
- 當正式版發生問題,會在修復用分支(紅)上修改程式碼,修復後合併在 master 分支上
GitHub flow
- 在 master 建立新分支
- 在新分支上開發功能
- 申請合併(Pull Request)
- 討論與檢視程式碼
- 部署測試
- 將分支合併到 master
感謝您的閱讀,我試著將生活與自己所學到的知識,以平易近人的方式傳達給正在努力進步的同好,甚至是領域之外卻有興趣的人。如果喜歡我的文章,歡迎贊助我,你的鼓勵也是我進步的動力。