參考資料: 從博物館寄物櫃理解變數儲存模型
<<
相當於數學乘法;>>
相當於數學除法;位元運算比邏輯運算快。&&
整體運算,舉例: true && false
因為前面已成立,後面不理會;false || true
因前面假值故看後面為 true。這邊有邏輯運算的短路性質。&
位元運算,舉例:1010 & 1111 = 10 (10源自於 2^1+2^3)
a++
v.s.++a
=
賦值;==
判斷相等;===
除判斷相等外,加以判斷型態是否相同,以此為主不會錯。''+''
;數字與字串相加會自動變為數字;當然IT的事件不容混淆,所以可用兩個功能將字串轉為數字,私以為場景應該是不管使用者輸入什麼都轉為數字型態相加的意思,分別為Number
、parseInt(a,10)
此處10表10進位為預設。需要再延伸了解的地方:兩者差異為何? '' v.s. "" (看腳本的寫法與JS定義是否不同)
-2^7 ~ 2^7-1
i.e. -128~127陣列 [] V.S 物件 {}
物件中可存放屬性、陣列、物件、function
var students: [ ]
{
name:'Peter'
score: 100
address: 'taipei'
phone: "010020030"
} 此為第一組
student.push(Peter)
console.log(students[0]) /*可拿出該物件欲取的東西console.log(students[0].name)*/
/*若不混用陣列物件的話, 可以將前面student.push(Peter) 此行拿掉, 並可寫成
console.log(Peter.name) 或 console.log(Peter['name'])
*/
obj 等號: 理解變數
兩個變數存的值一樣卻不相等,不是等號的問題,而是記憶體存放位置不同,JS 無法將記憶體位置給出,只能給該位置的值給我們。
舉例說明:將obj與obj2 指涉到同一個記憶體位置,判斷相等,後來改變obj2的鍵值,卻不會因此改變原記憶體位置的值,原因是因為新的鍵值存放的是不同記憶體的位置。
說明第二種情況:
var obj = { a:1 }
var obj2 = obj
obj2.a = 2
此時會發現 obj {a:2} 且 obj2 {a:2} 兩者居然相同,因為同一記憶體位置可以 nfs server 理解。設定 nfs server 位置在 /opt/public 將遠端的路徑掛載到此位置 (也可在同一台自己測試),我將 /opt/abc 掛載到 /opt/public 無論哪一端對該目錄下有所異動,兩邊均會同時影響。
function passornot(score) {
if (score == 100) {
console.log('you are no1!')
} else if (score >= 60) {
console.log('pass')
} else {
console.log('fail')
}
}
passornot(59)
function count(high,kg) {
var HIGH=(high/100)
var BMI=(kg/(HIGH*HIGH))
console.log(BMI)
if (BMI >= 35) {
console.log('重度肥胖')
} else if (BMI >= 30) {
console.log('中度肥胖')
} else if (BMI >= 27) {
console.log('輕度肥胖')
} else if (BMI >= 24) {
console.log('過重')
} else if (BMI >= 18.5) {
console.log('正常範圍')
} else {
console.log('體重過輕')
}
}
count(180,75)
ctrl + c
, 否則吃光資源.1.不須知道執行結果, 只做事用印出即可
2.需回傳值(需做計算的話), 用 return
3.一碰到return就會返回, 所以 return 應放在最下面一行, 如若不然, return 後放的語句不執行.
小寫 97-122
大寫 65-90
大小寫轉換 = +- 32
a < n < z
; ASCII code: string.fromCharCode(charCodeAt(0)) ; 所有字串轉大小可善用工具 .toUpperCase()**
為JS 表示次方之意參考資料: 從博物館寄物櫃理解變數儲存模型
<<
相當於數學乘法;>>
相當於數學除法;位元運算比邏輯運算快。&&
整體運算,舉例: true && false
因為前面已成立,後面不理會;false || true
因前面假值故看後面為 true。這邊有邏輯運算的短路性質。&
位元運算,舉例:1010 & 1111 = 10 (10源自於 2^1+2^3)
a++
v.s.++a
=
賦值;==
判斷相等;===
除判斷相等外,加以判斷型態是否相同,以此為主不會錯。''+''
;數字與字串相加會自動變為數字;當然IT的事件不容混淆,所以可用兩個功能將字串轉為數字,私以為場景應該是不管使用者輸入什麼都轉為數字型態相加的意思,分別為Number
、parseInt(a,10)
此處10表10進位為預設。需要再延伸了解的地方:兩者差異為何? '' v.s. "" (看腳本的寫法與JS定義是否不同)
-2^7 ~ 2^7-1
i.e. -128~127陣列 [] V.S 物件 {}
物件中可存放屬性、陣列、物件、function
var students: [ ]
{
name:'Peter'
score: 100
address: 'taipei'
phone: "010020030"
} 此為第一組
student.push(Peter)
console.log(students[0]) /*可拿出該物件欲取的東西console.log(students[0].name)*/
/*若不混用陣列物件的話, 可以將前面student.push(Peter) 此行拿掉, 並可寫成
console.log(Peter.name) 或 console.log(Peter['name'])
*/
obj 等號: 理解變數
兩個變數存的值一樣卻不相等,不是等號的問題,而是記憶體存放位置不同,JS 無法將記憶體位置給出,只能給該位置的值給我們。
舉例說明:將obj與obj2 指涉到同一個記憶體位置,判斷相等,後來改變obj2的鍵值,卻不會因此改變原記憶體位置的值,原因是因為新的鍵值存放的是不同記憶體的位置。
說明第二種情況:
var obj = { a:1 }
var obj2 = obj
obj2.a = 2
此時會發現 obj {a:2} 且 obj2 {a:2} 兩者居然相同,因為同一記憶體位置可以 nfs server 理解。設定 nfs server 位置在 /opt/public 將遠端的路徑掛載到此位置 (也可在同一台自己測試),我將 /opt/abc 掛載到 /opt/public 無論哪一端對該目錄下有所異動,兩邊均會同時影響。
function passornot(score) {
if (score == 100) {
console.log('you are no1!')
} else if (score >= 60) {
console.log('pass')
} else {
console.log('fail')
}
}
passornot(59)
function count(high,kg) {
var HIGH=(high/100)
var BMI=(kg/(HIGH*HIGH))
console.log(BMI)
if (BMI >= 35) {
console.log('重度肥胖')
} else if (BMI >= 30) {
console.log('中度肥胖')
} else if (BMI >= 27) {
console.log('輕度肥胖')
} else if (BMI >= 24) {
console.log('過重')
} else if (BMI >= 18.5) {
console.log('正常範圍')
} else {
console.log('體重過輕')
}
}
count(180,75)
ctrl + c
, 否則吃光資源.1.不須知道執行結果, 只做事用印出即可
2.需回傳值(需做計算的話), 用 return
3.一碰到return就會返回, 所以 return 應放在最下面一行, 如若不然, return 後放的語句不執行.
小寫 97-122
大寫 65-90
大小寫轉換 = +- 32
a < n < z
; ASCII code: string.fromCharCode(charCodeAt(0)) ; 所有字串轉大小可善用工具 .toUpperCase()**
為JS 表示次方之意cp -r week1 week1-copy.file
將目錄week1 複製一份成 week1-copy.file 目錄名稱,
一般可用於備份一份檔案,讓我們方便本地測試又不會動到原本好的檔案。
此處 -r
是代表複製目錄,若複製僅檔案,不需要 -r
。
補充知識:盡量不要將副檔名取作.cp,雖然同行為了方便常常順手複製成相同檔案名 .cp ,但有鑑於資安考量容易讓人順藤摸瓜,所以養成習慣比較好。
觀察執行動作後的即時 log 可用到,一有動作便會源源不絕產生,可同時開兩個視窗一邊執行動作、一邊觀察 log 觀察有無異常。
一般可用於查詢歷史紀錄,或可蒐集歷史操作並轉換成檔案,
可以是 history > 20210415-history.txt
,
就是將目前為止擷取到的所有歷史操作指令輸出成檔名 20210415-history.txt 的檔案。
>
舉例如同上面寫的 history > 20210415-history.txt
>>
若每一次執行 >
,會複寫掉上一次的檔案,如果上次的還要保留繼續往後增加,則可以用 >>
舉例: echo 123 > qq.file
echo 456 >> qq.file
那麼 cat qq.file
結果就會是
123
456
<
方向相反可以理解成指涉對象相反,
舉例:while read LINE ; do cat $LINE done; done <qq
,
上方例子為將qq檔案中的內容一行一行列印出來,
前面例子是 <
檔案名稱寫在輸出符號左邊,這邊用在結尾。
<<
轉向附加輸出,以指涉對象相反來理解,可與 >>
作對照。
那麼,如果受限於轉向輸出指令會與數學的大於小於符號讓電腦混淆、或者在權限受到限制時,
仍需要用到輸出成檔案指令的話,
可用 tee 結合 pipeline | tee
,
例如: ls | tee test.txt
此時會將目前目錄下所有內容輸出重新定向到文件 test.txt 中。
cp -r week1 week1-copy.file
將目錄week1 複製一份成 week1-copy.file 目錄名稱,
一般可用於備份一份檔案,讓我們方便本地測試又不會動到原本好的檔案。
此處 -r
是代表複製目錄,若複製僅檔案,不需要 -r
。
補充知識:盡量不要將副檔名取作.cp,雖然同行為了方便常常順手複製成相同檔案名 .cp ,但有鑑於資安考量容易讓人順藤摸瓜,所以養成習慣比較好。
觀察執行動作後的即時 log 可用到,一有動作便會源源不絕產生,可同時開兩個視窗一邊執行動作、一邊觀察 log 觀察有無異常。
一般可用於查詢歷史紀錄,或可蒐集歷史操作並轉換成檔案,
可以是 history > 20210415-history.txt
,
就是將目前為止擷取到的所有歷史操作指令輸出成檔名 20210415-history.txt 的檔案。
>
舉例如同上面寫的 history > 20210415-history.txt
>>
若每一次執行 >
,會複寫掉上一次的檔案,如果上次的還要保留繼續往後增加,則可以用 >>
舉例: echo 123 > qq.file
echo 456 >> qq.file
那麼 cat qq.file
結果就會是
123
456
<
方向相反可以理解成指涉對象相反,
舉例:while read LINE ; do cat $LINE done; done <qq
,
上方例子為將qq檔案中的內容一行一行列印出來,
前面例子是 <
檔案名稱寫在輸出符號左邊,這邊用在結尾。
<<
轉向附加輸出,以指涉對象相反來理解,可與 >>
作對照。
那麼,如果受限於轉向輸出指令會與數學的大於小於符號讓電腦混淆、或者在權限受到限制時,
仍需要用到輸出成檔案指令的話,
可用 tee 結合 pipeline | tee
,
例如: ls | tee test.txt
此時會將目前目錄下所有內容輸出重新定向到文件 test.txt 中。
在目前工作中有接觸一些概念,其實前後台也區分成前後端,闡述如下:
前台前端是給一般使用者看得
前台後端是一般使用者看不到的; 技術人員看的
後台前端是給技術人員看的
後台後端是給技術人員看的
感覺很繞口,簡單說前端可透過CSS, HTML, JS 調整修改在葉面上可及時看到調整的部分,例如 顏色、字體、大小、排版等等; 後端的部分像是資料庫連線、發請求、回應請求、流量處理等等這些是調整以後看不到畫面的,需透過看log或者報錯誤才會知道調整是否異常(較抽象)
請以抽象概念理解:
將電腦上的作業系統、電腦的主機、瀏覽器看成是一層一層疊加上去的畫面。
在目前工作中有接觸一些概念,其實前後台也區分成前後端,闡述如下:
前台前端是給一般使用者看得
前台後端是一般使用者看不到的; 技術人員看的
後台前端是給技術人員看的
後台後端是給技術人員看的
感覺很繞口,簡單說前端可透過CSS, HTML, JS 調整修改在葉面上可及時看到調整的部分,例如 顏色、字體、大小、排版等等; 後端的部分像是資料庫連線、發請求、回應請求、流量處理等等這些是調整以後看不到畫面的,需透過看log或者報錯誤才會知道調整是否異常(較抽象)
請以抽象概念理解:
將電腦上的作業系統、電腦的主機、瀏覽器看成是一層一層疊加上去的畫面。
git clone
,但看玩家如何玩出自己的一片天。git commit
git push
,下一次登入遊戲時,玩家身分登陸經由遊戲server 驗證身分,將玩家上次的存檔及裝備等等的同步給玩家,可理解成 git pull
。git merge
然後再度 git pull
下一個任務副本。git add .
將此次異動檔案全部加入此次要 commit 的範圍,就是加入版本控制的意思。git commit -m "此次修改內容描述"
以上兩行可合併寫成 git commit -am "此次修改內容描述"
git push origin mybranch
將此次commit資料,同步到雲端〈通常為 github 或 bitbucket,看 repo 放哪裡〉git pull origin mybranch
將雲端資料同步至本地端git checkout branchname
切換任務線,比方說穩定版本通常稱為 master 或為 main,業界常分為三大branch,像是測試階段的 stage branch,模擬正式環境的preprod branch,正式環境的production 或 master,或者專給開發使用的 develop branch。從哪個大分支切分支出來,自己可以從本地端操作,可用 git checkout -b newbranch
git merge newbranch
當確認此次修 bug 告一段落,或者開發功能完成了,就要合併分支讓下一位用的人可以拿到最新最穩定的副本,此時可以先切換到大分支,人在其位謀其政嘛!在執行
git checkout commit-sha值
可於 git log
查到你欲回復到某個版本的狀態 commit
,而此亂數sha值就可用於 checkout
;而另一種 checkout 的用法是切換分支。
git checkout stage
以後,將剛剛自己修改的分支內容〈已經過 commit 且 push 到 newbranch 遠端後〉,就可執行 merge: git merge newbranch
;而在執行 git merge
指令以後,可能發生兩種情況,一種是發生衝突 conflict、另一種是提醒你遠端還有檔案,你沒有同步到。
git push origin mybranch
同步到遠端。git pull origin mybranch
將遠端資料同步到本地端。git log
可看到歷史紀錄,也可以看到每一次 commit 的 sha 值;可將每次 commit 視為一個個資料夾,每一次資料夾透過 git pull
進行同步,會保有舊有的進度並且是最新版本。
git log -oneline
可以看簡短的紀錄。
git reset sha
當要回復到前面功能穩定的版本,可以用此指令回復之前狀態,執行後可能會提示兩種情況:untracked 與 被刪除或移動的檔案列表,會顯示紅色,需要處理成沒有紅色的狀況,可用 git status
檢視;因為雖然回復到之前的版本,但這段時間有調整的檔案卻仍存在,所以才會出現此種情況。
以上介紹是單兵作業,若同時多工作業,要能好好協作且不衝突掣肘,就可善用 branch,例如當在開發新功能尚未完成時,此時某處需要修bug,不需要等待對方可各自同時進行作業且不干擾對方,可用不同資料夾理解,資料夾 A = branch A 負責開發新功能,資料夾 B = branch B 負責修 bug,這兩個資料夾的檔案均從已經穩定確認功能還可使用的branch (資料夾) 複製一份出來使用,所以不會對前面穩定版造成影響,且若 bug 怎樣都修不好,或者是部門對於開發的這個功能想要放棄不想保留,避免影響目前運行時,可用倒版方式回到之前可用的版本。舉例:
git branch
看到目前所在的 branch 為 master
git branch A
從穩定版 master 新建分支 A
git branch B
從穩定版 master 新建分支 B
git checkout -b branch-name
從所在分支新建分支 newbranch 且切換分支到 newbranch
可理解成一個個資料夾複製原本那一份改資料夾名稱,就保有原本的檔案且修改時又不會汙染穩定版的檔案唷。
.gitignore
檔案中。改過檔案後,可輸入 git diff
看到異動情況。
git branch -v
可看到目前本地端所有 branch
git branch -d branch-name
刪除指定 branch,會有本地端及遠端的差異。
fork
可於github上操作,一般用於無權限取得資料時,可用 fork 方式回自己的 github 使用,可理解成用叉子叉一個蛋糕回自己盤子的概念,但在github上對方是不會受到影響的,不會像蛋糕一樣少一塊。
操作說明: https://sealman234.github.io/2019-10-29-learn-git-branching/
git 小遊戲: https://learngitbranching.js.org/?locale=zh_TW
git clone
,但看玩家如何玩出自己的一片天。git commit
git push
,下一次登入遊戲時,玩家身分登陸經由遊戲server 驗證身分,將玩家上次的存檔及裝備等等的同步給玩家,可理解成 git pull
。git merge
然後再度 git pull
下一個任務副本。git add .
將此次異動檔案全部加入此次要 commit 的範圍,就是加入版本控制的意思。git commit -m "此次修改內容描述"
以上兩行可合併寫成 git commit -am "此次修改內容描述"
git push origin mybranch
將此次commit資料,同步到雲端〈通常為 github 或 bitbucket,看 repo 放哪裡〉git pull origin mybranch
將雲端資料同步至本地端git checkout branchname
切換任務線,比方說穩定版本通常稱為 master 或為 main,業界常分為三大branch,像是測試階段的 stage branch,模擬正式環境的preprod branch,正式環境的production 或 master,或者專給開發使用的 develop branch。從哪個大分支切分支出來,自己可以從本地端操作,可用 git checkout -b newbranch
git merge newbranch
當確認此次修 bug 告一段落,或者開發功能完成了,就要合併分支讓下一位用的人可以拿到最新最穩定的副本,此時可以先切換到大分支,人在其位謀其政嘛!在執行
git checkout commit-sha值
可於 git log
查到你欲回復到某個版本的狀態 commit
,而此亂數sha值就可用於 checkout
;而另一種 checkout 的用法是切換分支。
git checkout stage
以後,將剛剛自己修改的分支內容〈已經過 commit 且 push 到 newbranch 遠端後〉,就可執行 merge: git merge newbranch
;而在執行 git merge
指令以後,可能發生兩種情況,一種是發生衝突 conflict、另一種是提醒你遠端還有檔案,你沒有同步到。
git push origin mybranch
同步到遠端。git pull origin mybranch
將遠端資料同步到本地端。git log
可看到歷史紀錄,也可以看到每一次 commit 的 sha 值;可將每次 commit 視為一個個資料夾,每一次資料夾透過 git pull
進行同步,會保有舊有的進度並且是最新版本。
git log -oneline
可以看簡短的紀錄。
git reset sha
當要回復到前面功能穩定的版本,可以用此指令回復之前狀態,執行後可能會提示兩種情況:untracked 與 被刪除或移動的檔案列表,會顯示紅色,需要處理成沒有紅色的狀況,可用 git status
檢視;因為雖然回復到之前的版本,但這段時間有調整的檔案卻仍存在,所以才會出現此種情況。
以上介紹是單兵作業,若同時多工作業,要能好好協作且不衝突掣肘,就可善用 branch,例如當在開發新功能尚未完成時,此時某處需要修bug,不需要等待對方可各自同時進行作業且不干擾對方,可用不同資料夾理解,資料夾 A = branch A 負責開發新功能,資料夾 B = branch B 負責修 bug,這兩個資料夾的檔案均從已經穩定確認功能還可使用的branch (資料夾) 複製一份出來使用,所以不會對前面穩定版造成影響,且若 bug 怎樣都修不好,或者是部門對於開發的這個功能想要放棄不想保留,避免影響目前運行時,可用倒版方式回到之前可用的版本。舉例:
git branch
看到目前所在的 branch 為 master
git branch A
從穩定版 master 新建分支 A
git branch B
從穩定版 master 新建分支 B
git checkout -b branch-name
從所在分支新建分支 newbranch 且切換分支到 newbranch
可理解成一個個資料夾複製原本那一份改資料夾名稱,就保有原本的檔案且修改時又不會汙染穩定版的檔案唷。
.gitignore
檔案中。改過檔案後,可輸入 git diff
看到異動情況。
git branch -v
可看到目前本地端所有 branch
git branch -d branch-name
刪除指定 branch,會有本地端及遠端的差異。
fork
可於github上操作,一般用於無權限取得資料時,可用 fork 方式回自己的 github 使用,可理解成用叉子叉一個蛋糕回自己盤子的概念,但在github上對方是不會受到影響的,不會像蛋糕一樣少一塊。
操作說明: https://sealman234.github.io/2019-10-29-learn-git-branching/
git 小遊戲: https://learngitbranching.js.org/?locale=zh_TW
git clone
,但看玩家如何玩出自己的一片天。git commit
git push
,下一次登入遊戲時,玩家身分登陸經由遊戲server 驗證身分,將玩家上次的存檔及裝備等等的同步給玩家,可理解成 git pull
。git merge
然後再度 git pull
下一個任務副本。git add .
將此次異動檔案全部加入此次要 commit 的範圍,就是加入版本控制的意思。git commit -m "此次修改內容描述"
以上兩行可合併寫成 git commit -am "此次修改內容描述"
git push origin mybranch
將此次commit資料,同步到雲端〈通常為 github 或 bitbucket,看 repo 放哪裡〉git pull origin mybranch
將雲端資料同步至本地端git checkout branchname
切換任務線,比方說穩定版本通常稱為 master 或為 main,業界常分為三大branch,像是測試階段的 stage branch,模擬正式環境的preprod branch,正式環境的production 或 master,或者專給開發使用的 develop branch。從哪個大分支切分支出來,自己可以從本地端操作,可用 git checkout -b newbranch
git merge newbranch
當確認此次修 bug 告一段落,或者開發功能完成了,就要合併分支讓下一位用的人可以拿到最新最穩定的副本,此時可以先切換到大分支,人在其位謀其政嘛!在執行
git checkout commit-sha值
可於 git log
查到你欲回復到某個版本的狀態 commit
,而此亂數sha值就可用於 checkout
;而另一種 checkout 的用法是切換分支。
git checkout stage
以後,將剛剛自己修改的分支內容〈已經過 commit 且 push 到 newbranch 遠端後〉,就可執行 merge: git merge newbranch
;而在執行 git merge
指令以後,可能發生兩種情況,一種是發生衝突 conflict、另一種是提醒你遠端還有檔案,你沒有同步到。
git push origin mybranch
同步到遠端。git pull origin mybranch
將遠端資料同步到本地端。git log
可看到歷史紀錄,也可以看到每一次 commit 的 sha 值;可將每次 commit 視為一個個資料夾,每一次資料夾透過 git pull
進行同步,會保有舊有的進度並且是最新版本。
git log -oneline
可以看簡短的紀錄。
git reset sha
當要回復到前面功能穩定的版本,可以用此指令回復之前狀態,執行後可能會提示兩種情況:untracked 與 被刪除或移動的檔案列表,會顯示紅色,需要處理成沒有紅色的狀況,可用 git status
檢視;因為雖然回復到之前的版本,但這段時間有調整的檔案卻仍存在,所以才會出現此種情況。
以上介紹是單兵作業,若同時多工作業,要能好好協作且不衝突掣肘,就可善用 branch,例如當在開發新功能尚未完成時,此時某處需要修bug,不需要等待對方可各自同時進行作業且不干擾對方,可用不同資料夾理解,資料夾 A = branch A 負責開發新功能,資料夾 B = branch B 負責修 bug,這兩個資料夾的檔案均從已經穩定確認功能還可使用的branch (資料夾) 複製一份出來使用,所以不會對前面穩定版造成影響,且若 bug 怎樣都修不好,或者是部門對於開發的這個功能想要放棄不想保留,避免影響目前運行時,可用倒版方式回到之前可用的版本。舉例:
git branch
看到目前所在的 branch 為 master
git branch A
從穩定版 master 新建分支 A
git branch B
從穩定版 master 新建分支 B
git checkout -b branch-name
從所在分支新建分支 newbranch 且切換分支到 newbranch
可理解成一個個資料夾複製原本那一份改資料夾名稱,就保有原本的檔案且修改時又不會汙染穩定版的檔案唷。
若以資料夾來理解,闡述 branch, commit, file 的關係,可看成是一層層:
這個 branch 資料夾在 4/16 的版本、在 2 天前的版本狀態 (commit),而每次狀態的檔案 file 可讓使用者修改。更深一點的概念是,branch 是在每個commit 標上一個 branch tag,所以去除 tag 的時候,這些 commit 都還在,只是沒有標示他是哪個branch。〈此處 tag 只是記號的感覺,與軟體版本的tag 又不一樣,不要搞混〉
有些檔案不需要加入版本控制,持續忽略即可的檔案的話,可將檔案名或指定格式加入 .gitignore
檔案中。
改過檔案後,可輸入 git diff
看到異動情況。
git branch -v
可看到目前本地端所有 branch
git branch -d branch-name
刪除指定 branch,會有本地端及遠端的差異。
fork
可於github上操作,一般用於無權限取得資料時,可用 fork 方式回自己的 github 使用,可理解成用叉子叉一個蛋糕回自己盤子的概念,但在github上對方是不會受到影響的,不會像蛋糕一樣少一塊。
git commit --amend
當提交 commit 發現自己寫錯了要調整可用。
git reset HEAD^ --hard
可用於 commit 以後反悔,若不加參數 --hard 預設為soft模式,意旨回到某個版本狀態,但此次改動的檔案還存在著,可以手動處理較穩妥;而加上 --hard 嚴謹模式,意旨檔案消失宛若未發生過。等同於指令 git reset commit-sha
git status
看目前檔案狀態,再以 git checkout filename
可用於還沒 commit,但我後悔改動這些檔案了。
git branch -m newname
看目前 branch name 不順眼想修改,也須 push branch 上遠端同步,在欲改的 branch 執行指令。
git checkout branchname
此處是用於直接拿到遠端 branch 的資料,舉例:我現在本地端只有 develop branch,某天我需要修 preprod 的 bug,平常沒用到此 branch 的你,只需要執行 git checkout preprod
就可拿到目前 preprod 的最新資料。但太舊版本的 git 不能直接操作。
hook
用於發生某事件或是某些指令時可通知,類似腳本,常用場景:需要 commit 或 push 之前做檢查。操作說明: https://sealman234.github.io/2019-10-29-learn-git-branching/
git 小遊戲: https://learngitbranching.js.org/?locale=zh_TW
git clone
,但看玩家如何玩出自己的一片天。git commit
git push
,下一次登入遊戲時,玩家身分登陸經由遊戲server 驗證身分,將玩家上次的存檔及裝備等等的同步給玩家,可理解成 git pull
。git merge
然後再度 git pull
下一個任務副本。git add .
將此次異動檔案全部加入此次要 commit 的範圍,就是加入版本控制的意思。git commit -m "此次修改內容描述"
以上兩行可合併寫成 git commit -am "此次修改內容描述"
git push origin mybranch
將此次commit資料,同步到雲端〈通常為 github 或 bitbucket,看 repo 放哪裡〉git pull origin mybranch
將雲端資料同步至本地端git checkout branchname
切換任務線,比方說穩定版本通常稱為 master 或為 main,業界常分為三大branch,像是測試階段的 stage branch,模擬正式環境的preprod branch,正式環境的production 或 master,或者專給開發使用的 develop branch。從哪個大分支切分支出來,自己可以從本地端操作,可用 git checkout -b newbranch
git merge newbranch
當確認此次修 bug 告一段落,或者開發功能完成了,就要合併分支讓下一位用的人可以拿到最新最穩定的副本,此時可以先切換到大分支,人在其位謀其政嘛!在執行
git checkout commit-sha值
可於 git log
查到你欲回復到某個版本的狀態 commit
,而此亂數sha值就可用於 checkout
;而另一種 checkout 的用法是切換分支。
git checkout stage
以後,將剛剛自己修改的分支內容〈已經過 commit 且 push 到 newbranch 遠端後〉,就可執行 merge: git merge newbranch
;而在執行 git merge
指令以後,可能發生兩種情況,一種是發生衝突 conflict、另一種是提醒你遠端還有檔案,你沒有同步到。
git push origin mybranch
同步到遠端。git pull origin mybranch
將遠端資料同步到本地端。git log
可看到歷史紀錄,也可以看到每一次 commit 的 sha 值;可將每次 commit 視為一個個資料夾,每一次資料夾透過 git pull
進行同步,會保有舊有的進度並且是最新版本。
git log -oneline
可以看簡短的紀錄。
git reset sha
當要回復到前面功能穩定的版本,可以用此指令回復之前狀態,執行後可能會提示兩種情況:untracked 與 被刪除或移動的檔案列表,會顯示紅色,需要處理成沒有紅色的狀況,可用 git status
檢視;因為雖然回復到之前的版本,但這段時間有調整的檔案卻仍存在,所以才會出現此種情況。
以上介紹是單兵作業,若同時多工作業,要能好好協作且不衝突掣肘,就可善用 branch,例如當在開發新功能尚未完成時,此時某處需要修bug,不需要等待對方可各自同時進行作業且不干擾對方,可用不同資料夾理解,資料夾 A = branch A 負責開發新功能,資料夾 B = branch B 負責修 bug,這兩個資料夾的檔案均從已經穩定確認功能還可使用的branch (資料夾) 複製一份出來使用,所以不會對前面穩定版造成影響,且若 bug 怎樣都修不好,或者是部門對於開發的這個功能想要放棄不想保留,避免影響目前運行時,可用倒版方式回到之前可用的版本。舉例:
git branch
看到目前所在的 branch 為 master
git branch A
從穩定版 master 新建分支 A
git branch B
從穩定版 master 新建分支 B
git checkout -b branch-name
從所在分支新建分支 newbranch 且切換分支到 newbranch
可理解成一個個資料夾複製原本那一份改資料夾名稱,就保有原本的檔案且修改時又不會汙染穩定版的檔案唷。
若以資料夾來理解,闡述 branch, commit, file 的關係,可看成是一層層:
這個 branch 資料夾在 4/16 的版本、在 2 天前的版本狀態 (commit),而每次狀態的檔案 file 可讓使用者修改。更深一點的概念是,branch 是在每個commit 標上一個 branch tag,所以去除 tag 的時候,這些 commit 都還在,只是沒有標示他是哪個branch。〈此處 tag 只是記號的感覺,與軟體版本的tag 又不一樣,不要搞混〉
有些檔案不需要加入版本控制,持續忽略即可的檔案的話,可將檔案名或指定格式加入 .gitignore
檔案中。
改過檔案後,可輸入 git diff
看到異動情況。
git branch -v
可看到目前本地端所有 branch
git branch -d branch-name
刪除指定 branch,會有本地端及遠端的差異。
fork
可於github上操作,一般用於無權限取得資料時,可用 fork 方式回自己的 github 使用,可理解成用叉子叉一個蛋糕回自己盤子的概念,但在github上對方是不會受到影響的,不會像蛋糕一樣少一塊。
git commit --amend
當提交 commit 發現自己寫錯了要調整可用。
git reset HEAD^ --hard
可用於 commit 以後反悔,若不加參數 --hard 預設為soft模式,意旨回到某個版本狀態,但此次改動的檔案還存在著,可以手動處理較穩妥;而加上 --hard 嚴謹模式,意旨檔案消失宛若未發生過。等同於指令 git reset commit-sha
git status
看目前檔案狀態,再以 git checkout filename
可用於還沒 commit,但我後悔改動這些檔案了。
git branch -m newname
看目前 branch name 不順眼想修改,也須 push branch 上遠端同步,在欲改的 branch 執行指令。
git checkout branchname
此處是用於直接拿到遠端 branch 的資料,舉例:我現在本地端只有 develop branch,某天我需要修 preprod 的 bug,平常沒用到此 branch 的你,只需要執行 git checkout preprod
就可拿到目前 preprod 的最新資料。但太舊版本的 git 不能直接操作。
hook
用於發生某事件或是某些指令時可通知,類似腳本,常用場景:需要 commit 或 push 之前做檢查。操作說明: https://sealman234.github.io/2019-10-29-learn-git-branching/
git 小遊戲: https://learngitbranching.js.org/?locale=zh_TW