PHP 也有 Day #41

Git釐清 – 大家都會用Git,但是很多時候因為不熟悉而造成專案重建之類的鳥事相信大家都遇過,釐清Git的分支與Reset如何使用觀念上會清楚許多

講者介紹 : 高見龍 / 五倍紅寶石 執行長

外部參考連結 :

https://community.laravel-dojo.com/phptheday/2018-12-20

https://ubin.io/git-talk-x/   取得密碼 : password

工商時間 :

為你自己寫Git : https://gitbook.tw/

線上教學課程 : https://iamcoding.tw/

網址縮小燈 : https://ubin.io/

Concepts : https://concepts.app/zh-hant/

本章節重點 :

  1. 關於分支 :釐清分支的正確觀念、commit 、head與master
  2. 關於Reset : 不要被英文翻譯誤導,這裡的reset本意就是goto、become的意思

關於分支:

  1. 分支中,一個圈圈就是一個commit,分支不是一條一條而是一片一片的貼紙,貼在圈圈上,標記目前分支最後一個commit在哪裡
  2. 分支無法合併,可以合併的是分支所指向的commit(也就是圈圈)。
  3. 分支正確的樣子不要被軟體所誤導,其實並不是很多條,而是一條直線,如下圖

 

git branch

關於Reset:

  1. Reset 就是goto, become 的意思,簡單說就是把貼紙貼到某個commit節點上
  2. Git reset C3(變成C3那個節點) –harf(多出來的檔案都不要)(後面的參數會決定檔案的去留)

 

關於Checkout:

  1. Git checkout . (目錄回到最近的commit狀態)(從暫存區拿資料回來)
  2. Git checkout 代名詞(或commit序號)或檔案(可以指定就會某個檔案或者回到某個commit)

 

如何拆掉commit重做:

  1. Git reset HEAD^(回到現在的上一步)(分支往前移一格)等同拆掉目前的commit,其中^代表往前一步,往前兩步可以用^^依此類推,如果步數太多可以用 ~100就是100步的意思 git reset ^^
  2. 後悔了要重做回到剛剛的狀態可以 git reset C4 –hard(假設拆掉之前是C4,就是回到拆掉之前),如下圖

git reset

 

關於合併節點:

C合併D與D合併C的差異在於,誰合併誰誰就往前走,

ex : C合併D,則C往前走,如果要取消就是把C倒退回去原本的節點(也就是git reset XXX)

git merge

 

關於Rebase指令:

rebase指的是節點往前拉直,拉直後要回到原來的節點該如何做?有兩種做法

  1. Git Reset ORIG_HEAD ,回到上個紀錄點上,但是ORIG_HEAD只會紀錄最後一次,如果要回到很多步以前要用下一個方法
  2. Git reflog,列出Git的每個動作,然後用reset回到節點上

 

如果Hard reset該怎麼辦?

同上點的做法,Git reflog找到commit序號,然後reset

 

如果分支還沒合併就刪掉了該怎麼辦?

刪除分支只是將貼紙拿下來分支看不到而已,其實還在,一樣可以用reflog找序號,貼回去

指令 : Git branch new_dog 053(把new_dog分支貼在053節點上)

git branch

 

QA時間 :

  1. 什麼是Git Cherry pick?
    1. 把其他分之傑點剪過來合併
  2. Checkout vs Reset
    1. Checkout只移動head, Reset會聯同master都移動
  3. Merge vs Rebase
    1. 從結果看是相同的,Merge會有新的brench最後合併起來,Rebase不會
  4. 何時該commit?
    1. 做完一個小功能commit或者下班前,做完某件事情滿意了就commit
  5. 什麼是Revert?
    1. 取消某一個commit
  6. 什麼是Fork?
    1. 以github為例,fork可以複製整個專案到個人帳號中
  7. 什麼是PR?
    1. pull request,帶merge,原作可以選擇merge commit, squash mergr, rebase mergr