# Git程式版本管控 - 由簡單到難(筆記) ###### tags: `進度條線上課程 Progress Bar` `Git程式版本管控 - 由簡單到難` ## Git 與Github Desktop GUI基本使用介紹 ### 1 Git課程基本介紹 Git 是一種分散式版本的版本控制系統 **Git 的優點 :** **1.免費、開源** **2.速度快、檔案體積小** 版控系統大多是記錄每個版本之間的差異,而不是完整的備份整個目錄,所以整個目錄的大小就不會快速的增加。 **3.分散式系統** CVS 或是 SVN 之類的集中式的版控系統(Centralize Version Control),都需要有一台專用的伺服器,所有的更新都需要跟這台伺服器溝通。也就是說,萬一這台伺服器壞了,或是沒有網路連線的環境,版本控制功能就沒辦法使用。 Git 是一款分散式的版控系統(Distributed Version Control),雖然通常也會有共同的伺服器,但即使在沒有伺服器或是沒有網路的環境,依舊可以使用 Git 來進行版控,待伺服器恢復正常運作或是在有網路的環境後再進行同步,不會受影響。而且,事實上在使用 Git 的過程中,大多的 Git 操作也都是在自己電腦本機就可以完成。 **Git 的缺點** **1.易學難精** > [git維基百科](https://zh.wikipedia.org/wiki/Git) > [為你自己學 Git](https://gitbook.tw/) > [git 指令](https://silverwind1982.pixnet.net/blog/post/286048390) ___ ### 2 [Mac] 安裝Github Desktop ___ ### 3 [Windows] 安裝Github Desktop **1.到[Github Desktop](https://desktop.github.com/)下載**  **2.skip this step(跳過這一步)**  **3.設定**  **4.finish(結束)**  ___ ### 4 .git介紹與建立Repo **1.本地端新增repository(倉庫)**  **2.設定**  ___ ### 5 提交第一個commit與介紹Readme **1.新增檔案,修改內容,存檔**  **2.提交commit(遞交)**  **3.查看history(歷史)**  ___ ### 6 反悔、還原(revert)commit 的幾種方式與解決conflict **方法一 : 1.revert(還原),回到上一步,會新增一個history,commit紀錄,適合多人專案**  **2.1.如revert(還原)失敗,處理步驟如下**  **2.2取消changes**  **3.1.如revert(還原)後出現衝突(Conflict),處理步驟如下**  **3.2.到檔案編輯程式**  **3.3.確定程式內容**  **3.4.重新提交commit**  **方法二 : 1.Undo(撤消),可以回到上一步,但不會有history,多人專案不建議用**  ___ ### 7 簡述遠端Repo與Github的關係 將repository,放置在遠端的網路空間,最簡單的方式,是把它壓縮成zip檔,直接放在網站上,讓大家下載zip檔,那zip檔有沒有包含history過往的歷史紀錄,就要看有沒有把.git檔壓縮進去,如果有壓縮進去,zip檔就會大一點,不過有時候,我們並不喜歡做打包這個動作,並放置在網路空間上,比如google的雲端硬碟,就會有權限上的設置等等,如需要綁定email,可能需要對方的email之類的事情,那並不是很方便去控管程式,所以在多人協作上,是不方便的。所有的git資料都存在.git資料夾裡面,那如果這個檔案夾是在遠端的話,那大家都能共用那一個資料夾,只要大家都去看遠端的.git資料夾,就知道大家的工作到哪裡,當然還是會有衝突(Conflict)會發生,但整理情況比用zip檔去做管理好,git的開發本來就是為了處理團隊開發的問題,說那麼多只是要帶出Github,這網站的功能,所以Github就是可將.git放在在遠端的平台,網路空間(遠端伺服器),***Github就是提供遠端服務的廠商***。 ___ ### 8 建立Github帳號、方案介紹與變更主要Email **1.建立Github帳戶**  **2.填寫相關資訊,username會影響自己的網址** ** 3.選擇免費,送出,其他設定都可以之後,調整**  **4.驗證email**  **5.如要改email,去Settings**  **6.新增email**  **8.驗證email**  **9.改email**  **10.改email**  **10.修改成功**  >[github](https://github.com/) ___ ### 9 使用Github Desktop上傳建立Git Repository到Github上 **1.將本端repository,上傳到Github,Github Desktop先連線設置**  **2.登入Github帳號**  **3.確定登入Github**  **4.如需修改本地端email,去下圖設定修改**  ___ ### 10 使用Github Desktop Clone 與加入共同開發者(Collaborators) **1.將Github上的資料Clone下來,複製url**  **2.使用Github Desktop Clone下來,填寫相關資訊,Clone**  **3.加入共通開發者,輸入開發者名稱**  **4.開發者email驗證**  **5.查看開發者名稱**  ___ ### 11 使用Fetch 與 Pull 同步專案 **1.點選Fetch,查看是Pull或push**  **2.點選Pull下來到本地端**  **3.如何移除repo**  **4.點選remove**  ___ ### 12 分支Branch介紹、本地端與遠端的新增與刪除 **1.新增branch**  **2.填寫資訊**  **3.如要刪除branch,如下圖**  ___ ### 13 合併(Merge)目標分支(Branch),解決簡易合併衝突(Conflict) **1.master合併dev,大魚吃小魚**  **2.點選dev,合併**  **3.按undo,可以回上一步**  ___ ## 使用Git終端機指令發揮所有威力 ### 1 [Mac]在Mac上面安裝Git指令 ___ ### 2 [Mac] 基本終端機介面使用與git指令測試 ___ ### 3 [Windows]在Windows上面安裝Git指令 **1.下載git**  **2.點選檔案開啟**  **3.下一步**  **4.下一步**  **5.下一步**  **6.下一步**  **7.下一步**  **8.下一步**  **9.下一步**  **10.下一步**  **11.下一步**  **12.下一步**  **13.安裝完成**  >[git](https://git-scm.com/) ___ ### 4 [Windows] git與mingw64基本指令  ``` //基本指令 pwd //知道所在位址 ls //知道資料夾有甚麼內容 ls -a //知道資料夾有甚麼內容外,跟列出隱藏檔 clear //清空指令畫面 touch //touch後加,新增的檔案名,新增檔案 cd Desktop/ //cd後加要切換的資料夾名稱,比如Desktop/,切換到桌面 git config --global user.name "gh_tony" //設定使用者 git config --global user.email "tony@demo.com" //設定email git config --global --list //查看使用者跟email git init //初始化 git log //查看git紀錄,會把所有commit列出來,後面有可以加入commit號 git status //查看檔案狀態,哪個有加入版本管理,哪個沒有 git add . (全部檔案) or git add <file> //設定準備上傳的檔案 git commit -m "first added commit" //設定確定上傳的檔案 ``` ___ ### 5 Git倉庫(Repo)版本紀錄原理與.git內容簡介 ___ ### 6 Git Object影片說明與使用方式 ___ ### 7 [補充] 深入探討Git Object與Git原理 ___ ### 8 [補充] 傳統Diff與Path版本管理和Git在根本上的不同,以及為何Git不擅長處理大型檔案 ___ ### 9 Git config 為不同的Repo設定不同的Author ``` mkdir //建立資料夾,指令後新增資料夾的名稱 //global代表全域,如無特別設定,會預設使用它 git config -l //可以看到git許多的設定 git config user.name "gh_tony" //會更改個別repo的,提交(commit)作者 ``` ___ ### 10 重做復原git reset(包含 --hard 與--soft) **git reset在Github Desktop上就是Undo功能,但在使用上有許多不同的情境 1.情境1,單純回到上一步**  **2.情境2,整理commit,分開commit等等**  **3.情境3,不要這個commit時,回上一步,如下圖指令`git reset --hard HEAD^`**  4.情境4,不要這個commit時,回上一步,但突然又要了`git reset --hard 輸入那個commit的身分證號`  **5.情境5,回到前幾個commit**  **6.情境6,回到一個commit,但修改的程式繼續保留`git reset --soft HEAD^`**  ``` //指令 git reset //全部回到上一步 git reset <file> //將<file>回到前一步 git reset --hard HEAD^ or git reset --hard HEAD~1 //回到第一步前 git reset --hard HEAD~n //回到第n步 git reset --hard <commit_id> //回到<commit_id>,這一步 git reset --soft HEAD^ //回到一個commit,但修改的程式繼續保留 ``` ___ ### 11 git checkout 與建立branch (包含 git reflog) **git checkout常用在有branch時,git checkout本身是在將目前HEAD切到某commit_id狀態下,可以為commit_id取名,會新增一個branch(分支)** **1.將當下HEAD切到某commit_id狀態下**  **2.為此HEAD取名,會新增一個branch**  **3.假設切到master下**  **4.查看目前是哪一個branch** ** 5.查看HEAD做了甚麼動作**  ``` //指令 git checkout <commit_id> //切到<commit_id>下 git checkout -b <new_branch_name> //為當下HEAD取名 git checkout <branch_name> //切到某branch下 git branch //查看當下branch git reflog //查看HEAD做過甚麼動作 ``` ___ ### 12 簡單的Git分支策略與合併、刪除分支(branch) **1.新增一個branch**  **2.刪除一個branch**  **3.將shooping(merge)合併到dev**  ``` //指令 git checkout -b <new_branch_name> //新增branch git checkout -D <branch_name> //刪除branch git merge branch_name<> //合併branch ``` ___ ### 13 多重檔案的commit 原則以及追查變化方式(log, show, status, diff) ``` git log //在本機端,顯示目前已經 commit 的所有修改內容,後續可以增加參數來進行過濾 git show //在本機端,顯示目前 branch 最新 commit 的修改內容 git status //在本機端,顯示目前的檔案修改情況(包含新增及刪除) git diff //在本機端,顯示目前在 工作目錄 的修改內容 git diff --cached //在本機端,顯示目前在 暫存區 的修改內容 ``` ___ ### 14 利用專案來介紹.gitignore寫法 ``` //git紀錄的是檔案 .keep //無內容隱藏檔,為了將空資料夾也記錄到版控 .gitignore //忽略檔案,有些檔案我不想放在 Git 裡面,可以放跟目錄或子目錄 ! //相反 * //所有 ``` ___ ### 15 git mv 與 方便追蹤commit的方式 ``` git mv <file> <new_name> //重新命名檔案,或搬移檔案 ``` ___ ### 16 git rm 與刪掉檔案讓gitignore運作正常(git rm --cached) ``` git rm <file> //來告知 git,哪些是我們將要刪除的檔案 git rm --cached //刪掉檔案讓gitignore運作正常 ``` ___ ### 17 用 git rebase 來整理commit ``` //用來調整commit順序跟commit的內容 git rebase ``` ___ ### 18 利用git cherry-pick來合併單次commit ``` git cherry-pick //單次合併commit ``` ___ ### 19 git tag的使用意義,與Branch之間的差異 ``` //標籤,應該要是固定版本,比如是在master git tag -a <tag_name> -m "tag_敘述" ``` ___ ### 20 git stash的使用方式與概念 ``` git stash //暫存被修改的檔案 ``` ___ ## Git 遠端版本管理 ### 1 Git remote章節簡介 **Git remote只的是遠端,可以是github,也可以是一個資料夾** ___ ### 2 git 遠端倉庫的介紹與實作(git init --bare) ### 3 git remote 新增、改名、改路徑 ### 4 git push 與 pull 分支,解決merge commit 問題 ### 5 git pull多重分支,與同步遠端紀錄 ### 6 git pull與fetch的差異與使用時機,git pull -f 的注意事項 ### 7 為什麼要用git init --bare ### 8 git ls-remote, git remote show 與 git remote prune ## 利用Github做遠端倉庫與解決疑難雜症 ## 常見的Git團隊方式 ## GitKraken GUI介面教學
×
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