git的操作原理
一個人 v.s 多人修改時
一個人在做檔案存擋及版本控制的,是否會一直把同樣檔案,複製一份修改,然後檔名就會出現像下面一樣
- banner.html
- banner_v2.html
硬碟裡就充斥著許多些許更改的檔案,但由於是自我管理,所以自己會知道哪個檔案是最新的,哪個檔案修改了什麼。
然而在多人管理時,會出現時間、內容的差異,可能大家都是用同一份檔案在修改,就會出現檔案名稱一樣,但內容不一樣的衝突發生,那最後又要以哪份檔案當作合併的檔案呢?這樣的情況下不僅會覆蓋掉別人辛苦寫的code,也可能導致檔案雜亂不堪。
git的存在就是為了解決這樣的內容,git的資料夾結構如下:
-master 主要檔案
-branch 在git底下可以開很多分支檔案,稱作branch,每個branch中,git會將每個branch資料夾的檔名,轉成hashes亂碼存起來,因此每份檔名都不同。
無論你在branch修改了什麼,都不會動到master的主要檔案,git可以管理好所有的版本,存在著不同進度支線的檔案,等完成後再合併起來。
git的使用流程
git init
在桌面先開一個測試資料夾 new裡面新增html,css,js等相關檔案, 打開 Terminal、將當前目錄改到 new,輸入 git init,會發現多了一個 .git 的隱藏資料夾。
git status
可看現在git的狀態
這邊畫面會顯示,檔案被分成兩個區域,分別是 Stage (有版控) 、 Untracked (沒版控)。
git add .
全部加入版本控制:
把資料夾裡面所有的檔案加入git 的版本控制
單純選擇哪些檔案加入版本控制,如下:
- 加入版控:
git add 檔案名稱
- 取消版控:
git rm —cached 檔案
git commit -m “first commit”
commit 的時候一次完成:git commit -m “要在這個檔案寫下什麼note”
也可以輸入 git commit
會進入 vim 編輯你的版本訊息 commit message
小小叮嚀,進入vim後要離開可以按 :q
覺得太麻煩也可以使用add+commit一起的語法
git commit -am “message”
git remote add origin 加上github上面的網址
git push -u origin master
git的指令
- git init:初始化 git。
- git status:git 目前版本狀態查詢。
- git add:git add +檔案,將檔案加入版本控制。例:git add 123,將檔案名稱123加入版本控制。
- git add .:一次將目前所有檔案都加入版本控制。
- git rm —cached:git rm —cached +檔案,將檔案移除版本控制。
- git commit:新建版本(就像新建一個資料夾),輸入 git commit 後就會進入到編輯器vim,在裡面可以新增 commit message (版本敘述,就像是資料夾名稱一樣),一樣是:q!或是:wq跳回。
- git commit –m “版本敘述”:不進入vim,直接在 terminal 新增 commit message。例:git commit –m “ first virtion”。
- git commit –am “版本敘述”:將所有檔案加入版本控制並建立版本(git add + git commit –m”版本敘述”)的綜合功能。
- git log:查看版本歷史紀錄。每個版本上方會寫commit 後面接一串英數交雜,這個就是版本(編)號。
- git log —oneline:查看簡單的版本歷史紀錄,此時的版本號會是簡易的前七碼。
- git checkout:git checkout + 完整的版本號。將版本更改到版本號的那個版本。
- git checkout master:將版本更改到最新的版本。
- .gitignore:不想要被版本控制的檔案。先用touch 建立 .gitignore 檔,再將其他不想被版本控制的檔案加入 .gitignore 檔(透過 vim .gitignore,再輸入不想被版本控制的檔名,按 :wq離開),這樣即便之後一次用 git commit –am,.gitignore 檔也不被被版本控制。
- git diff:再更改後的檔案再次加入版本控制前,可用 git diff 看出版本更改的東西在哪。
- git branch –v:確認主幹及分支。
- git branch + 分支名稱:新增分支並命名。
- git branch –d +分支名稱:刪除分支。
- git checkout + 分支名稱:移動到該分支。
- git merge +分支名稱:git merge A,將 A 分支合併進目前所在的分支。
- git push + 遠端主機(git hub)名稱(通常叫做 origin) + 本地分支名稱:將本地已經 commit 的版本上傳更新到 git hub。若之後有在本地新增 branch,也是一樣用此語法。
- git pull +遠端主機(git hub)名稱(通常叫做 origin) + 遠端分支名稱:將遠端的分支下載下來(通常發生在多人協作時,需要將別人修改過上傳到 github 的分支再次下載下來使用)。
- git clone +網址:將遠端的 repository 下載下來。
- git commit --amend:更改已經 commit 的 commit message。會進入到編輯器裡,在裡面直接更改並儲存離開。
- git reset HEAD^:(已經 commit)回到 commit 前的那個狀態(還保留此次修改的版本,只是尚未 commit),通常發生在 commit 後但又發現有錯需要更正內容。
- git reset HEAD^ --hard:(已經 commit)回到上一個版本的狀態(此次 commit 的內容完全消失)。
- git reset +版本號:(已經 commit )回到該版本號的狀態(等同於放棄目前最新的狀態)。
- git checkout --:(尚未 commit)回到上一個版本的狀態(等同於放棄此次修改的東西)。
- git branch –m + 新的 branch 名稱:(必須在欲修改的那個 branch 上)修改 branch 名稱。
- git checkout + 遠端的 branch 名稱:將遠端的branch下載下來。
- git diff:查看檔案與上一個版本有什麼不同