把一些會用到的指令都紀錄在這裡。
幫助你理解的小提示
Git 把檔案分成兩種:
- Untracked 不加入版本控制(可想成是代表「檔案還沒被放到資料夾」裡面)
- Staged 加入版本控制(可想成是代表「檔案已經放到資料夾」裡面了)
設定縮寫
1 | git config --global alias.co checkout |
如果想刪除的話可以到 ~/.gitconfig
中做修改。
基本指令
git init
,初始化。初始化後 Git 就會知道我們要對這個專案做版本控制
.gitignore
,要忽略的檔案(不要加入版控的檔案)。它自己也應該要加到版控裡面,這樣別人才知道有哪些檔案被忽略。
git status
,查看目前的狀態
git add
,把檔案加入版本控制(每一次都要做的動作。可想成是把檔案放到 temp 資料夾)git add .
,把目前資料夾底下所有檔案都加入版本控制
git rm --cached
,我現在又不想要對 xx 檔案做版本控制(從 Staged 變成 Untracked)
git commit
,新建一個版本(可想成是「用亂數幫資料夾命名」的動作,代表這個版本建立完成。)git commit -am
,一個快速提交的方法。可以同時執行加入版本控制與提交的動作。但要注意,這不適用於「新建立的檔案」,換句話說就是「只有被更改或刪除的檔案」才適用)
git restore
,不要保留更新的內容
git log
,查看歷史紀錄(你建立了幾個版本)git log --oneline
,比較簡短的資訊(內容太長會被 terminal 腰斬)
git reflog
查看 HEAD 經過的每個版本,可以利用這個來查詢所有的 commit 紀錄(HEAD 只要走過,必留痕跡)git reflog --grep-reflog=<patter>
用關鍵字來搜尋
git checkout
,回到某一個版本(切換到某個資料夾)。要切換版本時,可以指定每個版本號碼的前 7 碼就行了(因為也很難重複)
git checkout master
,回到 master 這個分支的最新版本(注意是 master 這個分支的最新版)
git diff
,看這一次跟上一次的差別。如果沒有指定檔案的話會顯示所有被更新的檔案(注意,只有「在 commit 之前」才可以查看。)
分支指令
git branch -v
,查看目前 Git 中的所有分支,參數 -v 是附上每條分支的 HEAD 所在版本
git branch <branch-name>
,建立新的分支
git branch -d <branch-name>
,刪除分支
git branch -m <new-name>
更新分支名稱
git checkout <branch-name>
,切換到哪個分支(就跟切換 commit 版本的概念一樣)
git checkout -b <branch-name>
建立分支後直接切換過去
git merge <branch-name>
,把 xx 分支「合併進來」。
關於合併的觀念做個補充。如果單看合併這個字,你可能會搞不太清楚意思。
假設現在有兩個分支,master 跟 new-feature,而你人在 master 分支上。那合併可能會有兩種情況:
- 把 master「合併出去」
- 把 new-feature「合併進來」
而 git merge 實際上是採用第二種作法,也就是「合併進來」,所以 master 會把 new-feature 合併進來。
進階指令
git merge <branch>
合併分支
git rebase <base> <merged branch>
合併
git rebase -i <基準點>
使用互動模式來更改歷史紀魯
遠端指令
git remote add origin https://github.com/
,新增遠端的 repository,這邊是建一個叫做「origin」的遠端(你也可以取其它名字,但是簡單的事情,不要搞得太複雜)。
至於連結的部分是用來表示 origin 這個遠端 repository 的「位置」(畢竟它不是你本機的東西,所以你總要告訴 Git 你要把它放在哪裡吧)。
git push origin master
,把「本地端」的 master 推到 origin 上並建立 master 分支(遠端)git push origin master:cat
,把「本地端」的 master 推到 origin 並建立 cat 分支(遠端)git push orign :cat
把「遠端」的 cat 分支移除
git pull origin master
,把「origin」的 master 拉下來,跟目前我所在的分支內容同步
關於 push 跟 pull 要注意兩件事:
- 搞清楚 push 跟 pull 的差別: push 的 master 是指「本地端的 master」,pull 的 master 是指「遠端的 master」
- 如果 pull 下來的檔案跟本地的檔案有修改到同樣的內容,那也會發生 Conflict。(可以把 pull 想成是把遠端的 master 跟本地的 master 做合併,提到合併,就會有可能引發 Conflict)
- push 可以指定你要 push 哪一個分支到遠端,所以你不一定要在那個分支上才能 push,但是 pull 一定要在你要同步的那個分支上。