開始之前
mkdir demo
創建一個叫做demo的資料夾
cd
cd加一個空白鍵後,再按下tab鍵會列出當前目錄的清單cd demo
前往demo這個資料夾cd ..
回資料夾的上一層cd ~
回到電腦最外層,像是根目錄Home之類的。touch index.html
新增index.html這個檔案git init
初始化git,創建git儲存庫。
基礎操作
git add .
將所有檔案加入索引,準備加入版本控管。git status
或git sta
查看現在索引的狀態,哪些檔案未被追蹤或已經追蹤。git commit -m'輸入一些備註'
將索引內容建立一個新的版本控管,未來可能會有很多個。git add app
跟git add .
差別在於只將app資料夾的檔案加入索引。
狀況一:終端機畫面好亂想清空
clear
狀況二:想查看過去版本的內容(HEAD)
HEAD為目前所在位置的指標。
git checkout [前四碼]
回到以前得某個指定版本狀態,查看過去的內容。git checkout master
還原最新版本。
復原檔案
狀況一:某個檔案改壞了,需要復原到上一個(最新)Commit紀錄
git checkout 檔案名稱
將這個檔案復原回最新一個(上一個)版本。
狀況二:整個工作目錄都亂了,想要還原整個工作目錄的檔案和索引
git reset --hard
將整個目錄復原到最新的Commit狀態,例如:
Commit1 –> 編輯 –> Commit2 –> 編輯發現壞了
使用git reset --hard
回到
Commit1 –> 編輯 –> Commit2
復原索引
狀況一:git add .
後希望某個檔案不要加入追蹤了
觀念提醒
- 要使用 Git 版本控管,你必須先建立「工作目錄」與「版本庫」。(mkdir, git init)
- 你要先在「工作目錄」進行開發,你可能會建立目錄、建立檔案、修改檔案、刪除檔案、… 等操作。
- 然後當你想提交一個新版本到 Git 的「儲存庫」裡,一定要先更新「索引」狀態。(git add, git mv, …)
- 然後 Git 會依據「索引」當下的狀態,決定要把那些檔案提交到 Git 的「儲存庫」裡。(git status)
- 最後提交變更時 (git commit),才會把版本資訊寫入到「物件儲存區」當中 (此時將會寫入 commit 物件)。
資料來源-保哥
branch 分支
git branch
查看目前有哪些分支。git branch 分支名稱
建立一個新的分支。git checkout 分支名稱
前往這個分支。git merge 分支名稱
假設我有兩個分支:master和branch,今天我要將branch合併(merge)至master時,請注意必須將目前分支指回master建議搭配GUI(source tree)使用。
push 推送分支到遠端數據庫(reomte)
數據庫可能會有很多個,像是開發用或正式發布用的。git reomte
查詢目前有哪些遠端數據庫名稱,以github來說會取得預設的名稱origingit push [origin] [branch_name](你要推的分支)
透過以上方法將分支推到github上
pull分支(遇到衝突時)
當有多人協作的專案時,會有不同時間上傳的不同版本問題,因此產生衝突。
git pull
需先透過git pull
將最新版本pull下來,此時會自動進行merge,並跳出一個視窗:
在此輸入:wq!
儲存並退出即可,此為Vim是Git預設的編輯器,查看下方Vim介紹。
Vim
Vim是Git預設的編輯器,這邊是希望你寫一些備註說明為什麼要合併,預設說明如上截圖(不含#號部分內容)。主要會用到的指令:
Normal模式:
i
(insert)或a
(append)或o
(新增一行)進入Insert模式:w
存檔:q
離開:wq
存檔然後離開
Insert模式:(在這邊我們用來編輯Commit訊息)
esc鍵
或ctrl+[
退回Normal模式
fetch
git pull = git fetch + git merge
pull就是將遠端的分支和你本地的分支進行合併(merge)的動作,
但有時候你不希望pull
下來導致自己的數據庫太亂又擔心有衝突時,可以先使用下面這個指令。
git fetch
可以等到你看過沒問題後,再進行合併(merge)的動作。
所以如果不滿意呢?不需要撤销, git fetch 對本地分支没有影響。