前言
未來幾年內不太會有改變的版控工具,使用者比較沒有地域性跟語言的問題不分前後端,GIT是工程師技能。如果面試的公司沒在用Git代表他們的專案沒有在做控管,代表這間公司在專案開發上沒有未來。
Git算是技術門檻比較高的軟體,版本多,功能多,易學難精(業界有少數當作FTP傳檔使用)
- Git適合誰:編輯、作家、企劃、翻譯...(大量使用文字工作管理檔案的人)
- Binary 二進位檔,壓縮檔和非純文字檔對於git來說很難分辨。
- 備份就跟遊戲存檔一樣的意思,在做比較關鍵修改之前需確實存檔,git也可記錄修改足跡,知道每條code的作者
- git用專業一點的說法是"分散"版本控制軟體,修改記錄不需要透過中央伺服器讓小組中的成員都可以收到版本紀錄
簡介
Git不等於GitHub (GitHub跟其對手Gitlab都是用RoR寫的)
Git的優點:支持本地和遠端操作(不需依賴網路),當小組都使用Git便容易與他人共同協作
- 圖形介面方便
在終端機上安裝Git (MacOS)
- 檢查git版本 $git --version
- 確認有無自己的使用者名稱以及email $git config --list
如果正確會出現在程式碼中可以找到
user.name=使用者名稱> [color=#f0a]
使用者名稱user.email=使用者帳號
@mail
.com
終端機操作初始化
- 在電腦內開一個資料夾
- $cd
資料夾路徑
(切換路徑) - $mkdir demo (在此路徑開一個demo)
- $pwd (取得所在位置)
- $git init (初始化)
- $ls -al (出現目錄檔案) $ls -al ( 想要找到被刪除的檔案,可以看到隱藏的資料夾及檔案)
- $rm -rf (刪除目錄版控)
[color=#f0a] $rm -rf / (從根目錄強迫刪除所有東西包括電腦系統可能GG )
工作目錄 ->暫存區域 -> 儲存庫(本地) /(遠端)
-> git add -> git commit
git add (類似開一間倉庫)
$touch index.html (touch新增檔案 在終端機內加入某個檔案 不一定要這樣新增檔案
)
$git status (確認檔案是否被git追蹤 index.html出現紅色代表未被追蹤)
$git add . (讓剛剛新增的檔案進入暫存區 '類似開一間倉庫'讓所有檔案被追蹤)
$git add index.html (單獨讓某個檔案被加入追蹤 會出現綠色new file: index.html代表已追蹤)
git commit (類似在倉庫門口開表單)
- $git commit -m "
檔名
"
(檔名一定要記得加 不然會進入VIM 如進入 shift+冒號後輸入q 退出)
$git help commit 尋找commit指令用法
rwx | r-x | rwx |
---|---|---|
user | group | other |
$chmod 700 (700 777跟二進位有關)
$chmod 777
$chmod +x #(一次性開放權限)
$chmod -x #(一次性關閉權限)
ugx = user group other
$chmod g+x #(開放group+others權限)
觀念網站:鳥哥的linux私房菜
Commit之後
$git log (檢查commit過程)
git log --oneline (在終端機裡面檢查)
$git log --oneline --graph (在終端機裡面圖形化檢查)
$git checkout 檔名
(把刪掉的檔名
檔案復原)
$git checkout . (把刪掉的檔案復原最後一次的狀態)
千萬不能刪到.git的檔案
$git blame 檔名.檔案格式 (檢查code痕跡)
$git blame -L 5,10 檔名.檔案格式 (單一檢查某code痕跡第5~10行)
[time=Tue, Mar 3, 2020 3:00 PM]
分支 (開其他版本編寫)
- 一開始內建的分支master
磁頭(當前分支)
Head ->master -> commit 1 (執行commit 1)
Head ->master -> commit 2 (執行commit 2 master會跟著commit 2)
$git branch (檢查目前位置)
$git branch 檔名
(開分支)
$git branch -f 檔名
(強迫轉移到某分支上的檔案)
$git branch -d (刪除分支 所在位置不能再分支上)
$git branch -D (非常確認刪除分支 所在位置不能再分支上)
$git checkout (切換HEAD所在位置)
$git checkout 檔名
(如果檔案被刪除可以拿回來那個檔案)
$git checkout . (如果檔案被刪除可以拿回所有檔案)
$git checkout 檔名
HEAD~1
(以HEAD為基準切換HEAD以前幾步的所在位置)
$git merge (合併分支)
$git merge
cat
$git mergedog
-mcat
狗往前推一步 (狗是主詞) 把貓刪掉無影響
先看所在目錄位置 merge是快轉合併 會改變master的位置
1.合併分支可看成在移動貼紙 貼紙所在位置不能改其檔名
2.建立分支->貼貼紙
3.刪除分支->撕貼紙
4. 無法刪除 commit
Git的分支模型要搞懂
- 執行branch 跟 merge的時候 最後的動作會讓HEAD轉移到最後執行檔案處
發生衝突Conflict
兩種方法
- 要merge發現衝突時需檢查衝突點,可一邊在GUI看比較清楚
$git status
看出衝突位置去檔案內修改檔案,可選擇其中一個修改,修改完存檔後
$git add檔名
(讓檔案回到暫存區)
$git commit -m檔名
- Rebase方法 (更動master的位置 嫁接) 可以讓GUI順眼但不容易辨認歷史軌跡
Git 不會破壞檔案只能不停建設Rebase更動master位置後檔案脫離後會隱形
Reset (恢復狀態往前往後都可)
$git reset c3 (c4,c5.....都會隱形,並且被丟回工作區域 W )
$git reset c3 --mixed ("預設"被丟回工作區域)
$git reset c3 --soft (丟回暫存區)
$git reset c3 --hard (完全不要)
$git reset c4^ (退到c3)
$git reset c4^^ (退到c2)
$git reset c4~1 (退到c3)
$git reset HEAD^ --hard (退到上一步)
$git reset commit亂數編碼
Reset 跟 Checkout 的不同
$git checkout (切換HEAD所在位置)
$git Reset (切換Master所在位置,整個current branch一起搬過去!)
找隱藏的commit亂數編碼
$git reflog (尋找歷史軌跡的commit亂數編碼)
$git reflog