Git 版本控制

Ayden Lin
Ayden Lin
Published in
6 min readJun 29, 2018

Git 是什麼? 為什麼大家都在使用…? Git 適合什麼角色使用?為什麼版控會這麼重要?

相信這些疑問你我都曾經想過

而且如果你是工程師,在求職過程中,你可以輕易地在「求職網站」上看到許許多多的職缺中,10間公司有7至8間的職務內容大部分都會寫著

「熟悉Git版控」、「有Git使用經驗」…等

於是,Git漸漸地變成大家 “必須會” 的條件,在這年代 “不得不會

Git 適合什麼角色使用?

任何人都可以,不管是PM、會計、助理…等,都可以很輕易的把所有異動都記錄下來,甚至當做備份使用

為什麼版控會這麼重要

想想以前沒有版控的情況下,當我們要進行新功能開發時,以往我們都用傳統的方式這樣做

  1. 整個資料夾備份並加上日期
    例如: project_folder → project_folder_20180101
  2. 或者複製該檔案並加上日期
    例如:news.php → news_bk20180101.php

以上這兩個方式,大家應該不陌生吧

久而久之你會發現目錄或檔案 “怎麼” 變得這麼多
===========
/project_folder/
/project_folder_20180101/
/project_folder_20180405/

/news/news.php
/news/news_bk20180101.php
/news/news_bk20180307.php
==============

然後…

完全忘記 project_folder_20180101news_bk20180307.php備份的原因

如果今天有使用版控系統,每一次的異動紀錄都會被記錄下來,而且在原本的目錄下,你不會在看到這麼多備份的檔案、資料夾,這些會被記錄在 .git q目錄裡

接觸過版控之後

相信之後在做每個專案時,會多了很多安心感
寫壞了,回朔一下就好了呀~
每一次的 commit 都是你的心路歷程

趕緊來做一下筆記,順便讓自己可以做複習

安裝步驟省略…

查看版本

git --version

須設定以下兩行設定,不然沒辦法 commit

git config --global user.name "你的名字"
git config --global user.email "你的信箱"

如果你忘記當初設定了什麼name、email,可以下這行指令

git config --global --list

如果要看其他 config 設定

顯示config system 上的設定
git config --system --list
會秀出所有config上的設定
git config --local --list
會秀出所有config上的設定 (global, system, local)
git config --list

建立初始容器/數據庫

git init

查詢目前目錄變化狀態

查看全部
git status
查看單擋
git status 檔案名稱

比較

比較全部
git diff
比較檔案與目前的commit差異
git diff 檔案名稱
比較 commit 間的差異
git diff commit1 commit2
比較 commit 的檔案差異
git diff commit1:檔案名稱 commit2:檔案名稱

將檔案加入/更新索引的方式

全部加入/更新索引(懶人法)
git add .
單檔
git add 檔案名稱

提交

簡易方式
git commit -m "do something…"
預設
git commit

如果在合併中遇到衝突或特別的問題,當你處理完後要做 commit 時,盡量不要自行使用「-m “xxxx”」,而是直接打「git commit」即可,這樣子系統會預設帶入一些資訊給你,然後再透過 vim 做編輯即可,當然還要稍微了解一下 vim 如何操作

顯示歷史 commit 紀錄

顯示詳細資訊
git log
顯示最後2筆
git log -2
顯示簡易資訊
git log --oneline
顯示簡易的線圖 (如果你沒有安裝像是章魚、source tree...等)
git log --oneline --graph

查看分支所有操作記錄

git reflog

常用的還原

「索引(index)」、「目錄(working directory)」、「數據庫(repository)」

HEAD、HEAD~1(HEAD^)、HEAD~2(HEAD^^)…等

將「數據庫」、「索引」、「目錄」回到最後一次的 commit
git reset --hard
將「數據庫」、「索引」回到最後一次的 commit
git reset --mixed(預設,可不打)
將「數據庫」回到最後一次的 commit
git reset --soft
將所有索引還原HEAD~2的 commit (不包含目錄)
git reset [--mixed] HEAD~2

單一檔案還原索引 (不包含目錄)
git reset [--mixed] HEAD 檔案名稱
還原至前次下指令前的狀態
git reset --hard ORIG_HEAD

分支

新增分支
git branch 新分支名稱
切換分支
git checkout 分支名稱
新增分支並切換到新分支
git checkout -b 新分支名稱
刪除分支
git branch -d 分支名稱
合併分支(假設 feature 要合併到 develop,要先將分之切至 develop)
1. git checkout develop
2. git merge feature

如果在其他分支的 commit 想拿來使用

複製其他分支 commit 過來合併,
git cherry-pick 6nedya
先複製過來,但不先做 commit
git cherry-pick 6nedya --no-commit

臨時要去別的地方查看資料不想做 commit 時,可以使用 stash 暫存

放到暫存區
git stash
顯示暫存區所有資料清單
git stash list
取出最後放進暫存區的資料
git stash pop
取出最後放進暫存區的資料 (且暫存區會繼續保留)
git stash apply
清空所有 statsh
git stash clear

遠端

複製遠端
git clone https://gitlab.com/xxx/xxx.git
如果已經有資料夾
git remote add origin https://gitlab.com/xxx/xxx.git
push到遠端
git push origin 分支名稱
pull遠端
git pull origin 分支名稱
顯示遠端資訊(含URL)
git remote -v
重新設定遠端連結
git remote set-url origin https://github.com/xxx/xxx.git

--

--