Skip to content

git常用指令

目錄
基礎設定
版本控制
查看狀態
還原(移動節點)
分支
分支衝突
與他人協作
問題紀錄

基礎設定

初次設定

git config –global user.name <your name>

git config –global user.email <your email>

查詢設定

git config --list

指令縮寫

git config --global alias.<縮寫> <原指令>

比如 branch => br , checkout => co

以上設定全部可以在 ~/.gitconfig 中找到, 當然也能直接修改

版本控制

基本流程

git init (限第一次)

第一次時初始化,會製造.git資料夾存放所需參數 (參考git實作原理)
當不想被監控時,rm掉這個資料夾即為一個方法

git add .

表示加入所有檔案進入監控系統 (add 會放入staging area中,可以視為被記錄前的暫存區)
git add 也可以接<file>,自行選擇想監控的檔案
(註: 檔案沒有被監控的情況下,若未來想要復原到過去版本,未監控檔案(untracked file)會消失)

git commit -m "message"

表示正式加入git紀錄節點,未來可以隨時回復到此狀態,同時git強迫一定要加上訊息來記錄這個commit節點做了甚麼(message處可以替換)

建立.gitignore 檔案

裡面可以放不想被監控的檔案的路徑
參考這裡

查看狀態

git status

#查看狀況(add、unstaging)

git log

#查看commit 狀況

git log –all –graph –decorate

#則可以以樹狀圖的方式呈現分支

git diff

#可以查看與HEAD之間更新了甚麼
也可以在diff中間加入<hashcode>進行比較
<hashcode>可以在log中找到,關於hash可以參考原理筆記

還原(移動節點)

git checkout <hashcode> or <name>

<name>可以填入 master或之後的branch name

分支

分支可以說是git強大的地方之一,允許分支間獨立發展、合併,比如程式要有測試版、開發版、debug版…等等平行開發(parallel development)時非常好用

git branch <name>

#建立叫做<name>的分支
如果不加上<name>會顯示所有分支

-d 參數會刪除該分支
-D 則會強制刪除,用於發生不可思議的力量導致無法刪除時使用

git branch

#顯示所有分支

git checkout <name>

#切換分支,且在切換前會要求所有變動都commit了,否則可以使用-f參數強制切換

git merge <name>

#當下分支與 <name>分支合併
但有時不是那麼理想,會發生衝突(conflict)
比如這個分支在file A加字, 那個分支在file B刪字
此時就需要決定要採用哪邊的

解決分支衝突

純文字檔、程式碼:
可以先使用git status查看情況
然後使用git merge –abort 暫停merge 狀態
接著會在衝突的檔案中發現comflict marker
修正好後git merge –continue 即可完成

二進位檔、圖檔:
先決定要保留誰的,然後使用checkout更新即可 git checkout –ours # 留下merge基礎的 git checkout –theirs # 留下merge對象的

git 與 github

github是放置程式的遠端資料庫,aka 工程師的FB
git可以將程式推上github,也可以將程式pull下來

  • 流程
1. 在Github上新增respository
2. 建立readme檔(非必要)
3. 基本三連(init add commit)
4. 加入遠端支點
5. 推上去

實際流程

0. git clone URL  (第一次以後用pull,未建立respository也不需要此步驟)     
1. echo “what you want to say“ > README.md     
2. git init
3. git add README.md
4. git commit –m \<message>
5. git  remote add \<origin> URL(專案的)    (第一次才需要)
6. git push -u \<origin> \<branchname>

註 origin在這裡就只是一個變數,代表著專案的url 註2 沒有branch情況下,就打主分支master

與他人協作

github之所以興盛的原因之一就在其開源,可以領教各路神人幫忙修專案

  • 概念
    以畫畫為例
    概念上就是把別人展出的畫作影印複製一份回家
    然後修修改改
    最後想要放回別人展出的地方,就需要去請求原作者同意
    若作者同意,就可以把你改良好的畫作展出給別人看了

步驟

  1. 可以把它人專案 fork 到自己那
  2. 然後clone自己家那份,修改好後 add、commit,然後推回自己家
  3. 最後對作者發pull request,可以在此與作者溝通 (通常簡稱PR)
  4. 作者如果接受,按下merge pull request 就可以合併此次commit

問題紀錄

  1. 推github被reject? 通常就是沒有執行第0步,沒有先pull專案下來

  2. 如何更新fork對象的repository?

# 原版取個小名叫upstream
git remote add upstream 原版本URL.git

# 將原版的更新全部抓下來
git fetch upstream

# merge it 
git rebase upstream/master

# 回推上自己的repository
git push origin master --force

fetch VS pull
pull 目前可以理解為 fetch + merge

參考資料

高見龍老師的 為你自己學 Git
https://gitbook.tw/
政大蔡銘峰老師課程
github教學