git 開發應用 : branch / rebase
收錄在 AIoT Ameba 2020 - Just for Fun
https://dev.to/lydiahallie/cs-visualized-useful-git-commands-37p1?fbclid=IwAR1eKNLJX2XRH6QHaqcgGgGJ5uUt6UTN8j3AmkVZbYZkfYrHRiYDsCy6Cr0
==
來建立一個 kernel-5.4 的 branch
以 rtw88-usb 為例.
可以看看目前有哪些 branch
$ git checkout -b <origin/...>
-b : 當沒有 branch 時, 可以 checkout
$ git branch
看當下的 branch
我們建立一個 branch: kernel-5.4
$ git checkout -b kernel-5.4
接下來 git commit 一個 patch 解決 issue:
https://github.com/neojou/rtw88-usb/issues/30
$ git push --set-upstream origin kernel-5.4
這樣 github 上就可以看到一個 Branch: kernel-5.4
https://github.com/neojou/rtw88-usb/tree/kernel-5.4
=
以 rtw88-usb 為例.
可以看到:
我們可以用
git checkout -b 8852a origin/8852a
這時候再看 git branch, 可以看到
* 8852a
master
打 git log 也可以看到是 8852a 這個 branch 的相關 patches.
要切回來主線, 可以用 git checkout master
====
github 設計蠻適合軟體開發的,
例如我們有個 function 是開發時才會用到, delivery 時不需要.
一開始進 code 沒考慮, compile 時會多 warning.
我們可以在 github 先建立一個 issue
https://github.com/neojou/rtw88-usb/issues/27
來開一個 dev 分支保留這 function
在 commit title 可以加上 fix #<issue number>,
這樣 push 後 github 上的 issue 狀態會變成 closed
不過這時候 branch dev 還沒有 push 上 github.
可以用:
===
我們在 dev branch 開發後, 有些 patch 可以合回 master
例如:
usb.c 註解錯誤, 寫成 8821CU
https://github.com/neojou/rtw88-usb/issues/28
我們在 dev branch 寫好, 用上述方式 push 後,
github 可看到:
但因為不是在 master, 還並不會把 issue close.
接下來我們切回主線
這時候就會看到 #28 issue 狀態變成 closed
https://dev.to/lydiahallie/cs-visualized-useful-git-commands-37p1?fbclid=IwAR1eKNLJX2XRH6QHaqcgGgGJ5uUt6UTN8j3AmkVZbYZkfYrHRiYDsCy6Cr0
==
來建立一個 kernel-5.4 的 branch
以 rtw88-usb 為例.
https://github.com/neojou/rtw88-usb一開始我們先 git clone 下載下來
git clone https://github.com/neojou/rtw88-usb.git$ git branch -a
可以看看目前有哪些 branch
$ git checkout -b <origin/...>
-b : 當沒有 branch 時, 可以 checkout
$ git branch
看當下的 branch
我們建立一個 branch: kernel-5.4
$ git checkout -b kernel-5.4
接下來 git commit 一個 patch 解決 issue:
https://github.com/neojou/rtw88-usb/issues/30
$ git push --set-upstream origin kernel-5.4
這樣 github 上就可以看到一個 Branch: kernel-5.4
https://github.com/neojou/rtw88-usb/tree/kernel-5.4
=
以 rtw88-usb 為例.
https://github.com/neojou/rtw88-usb一開始我們先 git clone 下載下來
git clone https://github.com/neojou/rtw88-usb.git進入 rtw88-usb 目錄後, git branch 可以看到一個
* master但我們看 remote 端, git branch -r , 列出所有 repository branches,
可以看到:
origin/8852a在 github 上, 也可以看到有兩個 Branch : master / 8852a
origin/HEAD -> origin/master
origin/master
我們可以用
git checkout -b 8852a origin/8852a
這時候再看 git branch, 可以看到
* 8852a
master
打 git log 也可以看到是 8852a 這個 branch 的相關 patches.
要切回來主線, 可以用 git checkout master
====
github 設計蠻適合軟體開發的,
例如我們有個 function 是開發時才會用到, delivery 時不需要.
一開始進 code 沒考慮, compile 時會多 warning.
我們可以在 github 先建立一個 issue
https://github.com/neojou/rtw88-usb/issues/27
來開一個 dev 分支保留這 function
git branch dev修改程式後,
$ git add .https://github.com/neojou/rtw88-usb/commit/f509eec952b7f00ce13a95f2283ec6ed1b0a1680
$ git commit -s
$ git push
在 commit title 可以加上 fix #<issue number>,
這樣 push 後 github 上的 issue 狀態會變成 closed
不過這時候 branch dev 還沒有 push 上 github.
可以用:
git push -u origin dev這邊 -u 也就是 --set-upstream 的意思
===
我們在 dev branch 開發後, 有些 patch 可以合回 master
例如:
usb.c 註解錯誤, 寫成 8821CU
https://github.com/neojou/rtw88-usb/issues/28
我們在 dev branch 寫好, 用上述方式 push 後,
github 可看到:
但因為不是在 master, 還並不會把 issue close.
接下來我們切回主線
git checkout master用
git rebase -i dev來把 dev 的 patch 合併進來.
這時候就會看到 #28 issue 狀態變成 closed
留言
張貼留言