jas0nhuang

[筆記] Git & 其它

Git 「稍」進階使用

分支、合併與衝突

[GIT101] Git 超新手入門筆記

同理以資料夾實作 commit,試著以資料夾方式實作 branch。
每個 branch 都是包含很多 commit 資料夾的資料夾,好饒舌!
分支常用指令:

git branch -v
git branch -d BRANCHNAME

在各分支、提交之間切換

git checkout BRANCHNAME

合併

git merge BRANCHNAME

將 BRANCHNAME 這個分支合併到現在所在的分支上。
git merge 遇到衝突時可以在 git status 裡看到那些檔案有衝突,Git 會在檔案內進行標註:

<<<<<<<<<< HEAD
SOME CONTENT
==========
SOME OTHER CONTENT
>>>>>>>>>> BRANCHNAME

>>>>>>>>>>>> 之間的部分就是有衝突需要修改的部分,改好之後就可以再次提交了。

Git / GitHub 遠端協作

猴子學 git (二) 基礎遠端操作
其實 GitHub 真的蠻貼心的,很多操作需要的指令都幫我們寫好了,只要複製貼上就好……
大部分的指令像是 push、pull……之前都蠻常使用的,也在之前部落格的文章裡記錄過了,這裡只有 fork 之前比較少用到,它的功能就是把別人的程式庫「分叉」一分到自已的程式庫裡,這樣就可以在自已的 GitHub 帳號裡修改這個程式庫了。
還有 GitHub 上 Pull request 這個功能也是第一次真的學到(這裡我也是覺得這個 Pull request 命名的很爛,從字面上看起來很容易混淆,有時候甚至有一點我要向別人 Pull 東西的感覺,其實是要 Push 給他們阿!可能新手太嫩參不透,還忘高人指點迷津),總之,這個功能就是要向別人提議把自已的修改加入他的程式裡面。
GitHub Flow 具體的以圖像表式 GitHub 上的協作流程,清楚明瞭。
其實這個協作的流程就是課程裡交作業的流程,詳情請見 week1/hw1
選擇用 GitHub、GitLab 還是 Bitbucket?
GitLab 上的 Pull request 叫作 Merge request 感覺就好懂多了,(要求合併,多清楚阿!)

人難免要反悔

  1. 想要改 commit message:git commit --amend(查個單字…amend)。但是如果已經 push 到遠端的話就沒辦法改了。
  2. 我不要 commit 了:git reset head^ 可以帶著 master 分支的指標回到上一個 commit,就好像最後一個 commit 沒有發生過一樣。這裡可以看一下 Pro Git 裡面關於 checkout 與
    reset 的內容:7.7 Git Tools - Reset Demystified
  3. 還沒 commit 但我改太爛不改了:可以用 git status 看個提示,git checkout -- <file> 就可以把對那個檔案進行的修改復原了。
  4. 分支名取太爛,我要換:git branch -m 新名字,如果瞭解 Git 底層運作的話,其實還可以直接修改 .git/refs/heads/ 資料夾裡想要修改的分支檔名,然後如果現在的 HEAD 是指向分支檔名被修改的分支的話,就要再到 HEAD 檔裡面把它參照的對象改為修改過的分支檔。
  5. 抓個遠方的分支來看看: 直接 git checkout 遠方的分支名 EASY!

Git Hook

隨事件反應的勾子。
再來翻翻 .git/ 資料夾,可以找到一個 hooks 資料夾,裡面放的就是一些 Git hook 的 sample 檔,想要使用任何一個 hook 的話,去掉後面的 .sample 那個勾子就會生效了。而勾子的功能主要就是在 Git 執行某個動作時,也同時執行某個 hook 裡面要求的動做,像是在 commit 前做檢查……等等。
在 mentor-program-4th-JAS0NHUANG 的程式庫裡面,就可以找到一些 Hooks 的應用,例如 pre-commit 會運行 husky 以進行程式碼檢查。

Learn Git Branching 真的很好玩

之後再慢慢玩吧!