2024年9月9日 星期一

git - 修改某個 commit 點的內容

上次只是需要改之前某個點的修改訊息,

這次連 commit 的內容都要改!!!

還好也是有辦法可以修改的。

 1.首先先把目前的內容 Stash 起來。

$ cd [專案目錄]
$ git stash

2.接著將 HEAD 移動到你要修改的點。

例如要修改B點,所以要先取得A的 commit id,

A-B-C-D-E-F-G-stash

$ git rebase [A commit id] --interactive

3.然後會出現如下的畫面,然後將 B 的 pick 改成 edit 


接下來畫面會顯示如下,

提示你可以開始 amend 你的點,

做完之後再 rebase --continue 就可以了。



參考:【[Git] 修改之前某次 commit 日志和内容

2024年8月29日 星期四

git - 修改從最後一個 commit 點到之前某個 commit 點的 commit 訊息

有需求需要將一整條的 commit message 修改,
然後又不想建一個新的 branch 、 cherry pick,
這時候可以下指令修改。

過程如下:
指令是 rebase , 
HEAD~3 表示從 HEAD 的位置開始的三個 commit 點,包含 HEAD 的 commit 點。
$ cd [專案目錄]
$ git rebase -i HEAD~3

將要修改的 commit 點的 pick 改成 reword。

提示:
  1. 按 i 進入編輯模式,編輯完後,按 Esc 離開編輯模式。
  2. 按:進入指令模式,在指令模式下輸入 wq。:


接著會一個一個跳出 reword 的 commit 點的 message 讓你修改,
修改方式如上面提示一樣。

全部都改完之後就算完成了。



2024年8月14日 星期三

SQL - 為何使用 CROSS APPLY

 其實我本人一直都是慣用標準的 SQL 語法,

因為在跨DB時的相容性高;

但難免需要改到其他人寫的 SQL ,

一直以來對於 CROSS APPLY 都很懷疑,

為何要寫 CROSS APPLY ?

今天花了點時間查證一下,

第一:

基本上 CROSS APPLY, OUTER APPLY 相等於 JOIN, LEFT JOIN,

但在需要 JOIN RETURN TABLE 的 UDF 時,

如果需要傳入其他 TABLE 的欄位當條件時就只能用 APPLY。

參考資料【理解 SQL Server 的 CROSS APPLY 和 OUTER APPLY 査詢 - 第 2 部分

SELECT E.Id, E.Name, E.CountryName, TD.Name, E.CountryName

           FROM EMPLOYEE AS E

    CROSS APPLY GetDept(E.CountryName) TD

第二:

如果 JOIN 有複雜的條件的時候,

CROSS APPLY 的表現會比 JOIN 好,

參考資料【When should I use CROSS APPLY over INNER JOIN?

CROSS APPLY works better on things that have no simple JOIN condition.

This one selects 3 last records from t2 for each record from t1:

SELECT  t1.*, t2o.*
FROM    t1
CROSS APPLY
        (
        SELECT  TOP 3 *
        FROM    t2
        WHERE   t2.t1_id = t1.id
        ORDER BY
                t2.rank DESC
        ) t2o

It cannot be easily formulated with an INNER JOIN condition.

You could probably do something like that using CTE's and window function:

WITH    t2o AS
        (
        SELECT  t2.*, ROW_NUMBER() OVER (PARTITION BY t1_id ORDER BY rank) AS rn
        FROM    t2
        )
SELECT  t1.*, t2o.*
FROM    t1
INNER JOIN
        t2o
ON      t2o.t1_id = t1.id
        AND t2o.rn <= 3

, but this is less readable and probably less efficient.