git config --global user.name "your username"
git config --global user.email "your email address"
git config --global core.autocrlf true
git config --global core.safecrlf true
打開 Git Bash,輸入底下的指令
cd git
git clone http://192.168.31.166/nta/brt.git
打開 eclipse 馬上重新 import 專案吧 !
每張議題單或每個獨立修正都必須開不同的 branch
每次在開始著手修改議題單時,先切到 master,並且更新遠端儲存庫的異動至本地端
~/git/$ cd brt
~/git/brt(master)$ git pull --rebase origin master //更新遠端異動至本地
1
根據議題單編號或修正內容大綱建立 branch
~/git/brt(master)$ git checkout -b 22321-enhance-performace
~/git/brt(22321-enhance-performace)$
2
開始修改程式......
3
Programing...
app.controller('brt310eController', function($scope, brt310eService, accessControlService,
businessDayService, user, $timeout, alerter, cDateUtils, cStringUtils, $window) {
$scope.model = {};
$scope.gridData = [];
$scope.tab1 = {tempGridData:[]};
將告一段落的程式 Commit 至本地端
~/git/brt(22321-enhance-performace)$ git add --all
~/git/brt(22321-enhance-performace)$ git commit -m "remove redundant for loop."
4
可藉由 GUI 工具 (SourceTree, TotoiseGit) 幫助 commit 程式碼
將 Branch Push 至遠端儲存庫
~/git/brt(22321-enhance-performace)$ git push origin 22321-enhance-performance
5
也可以 git push --set-upstream origin 22321-enhance-performance,以後要 push 至同個 branch 就只要打 git push 就好。
至 GitLab 發 Merge Request,等待將此修正併回遠端 master
6
登入 GitLab,Dashboard 即有 Create Merge Request 的按鈕
至 GitLab 發 Merge Request,等待將此修正併回遠端 master
6
再次查看修正內容是否正確,並修改 Title 後 Submit.
查看 Summit 的 Merge Request 是否可以被 Merge
7
底下的說明敘述此 Merge Request 可被 Merge 且不會有衝突
若此 Merge Request 無法被 Merge,代表您所改的內容與目前遠端的 master 內容有衝突。此時必須在本地端
~/git/brt(22321-enhance-performace)$ git pull --rebase origin master
並且修正衝突,再重新 push 至遠端 branch。(請查看修正衝突章節)
完成議題單後,切回 master 並更新遠端
8
完成議題單並發送 Merge Request 後,此議題單將等待 SA 或 Team Lead review 後併回 master。
若要修改另外一張議題單,先切回 master 更新遠端異動內容後,在開另外一個 branch。
~/git/brt(22321-enhance-performace)$ git checkout master //回到 master
~/git/brt(master)$ git pull --rebase origin master //更新遠端內容
~/git/brt(master)$ git checkout -b 33210-redesign-page //再開另外一張議題單
修改議題單流程
~/git/brt(master)$ git checkout master //回到 master
~/git/brt(master)$ git pull --rebase origin master //更新遠端內容
~/git/brt(master)$ git checkout -b 22321-enhance-performace //開議題單
programing...programing...
~/git/brt(22321-enhance-performace)$ git add --all
~/git/brt(22321-enhance-performace)$ git commit -m "remove redundant for loop." //commit至本地端
~/git/brt(22321-enhance-performace)$ git push origin 22321-enhance-performace //push 至遠端
至 GitLab 發送 Merge Request 等待 merge...
~/git/brt(master)$ git checkout master //再回到 master
~/git/brt(master)$ git pull --rebase origin master //更新遠端內容
~/git/brt(master)$ git checkout -b 33210-redesign-page //再開另外一張議題單
..............
已經送出 Merge Request,突然發現還需要修正那怎麼辦?
~/git/brt(master)$ git checkout 22321-enhance-performace //回到該議題單
修正修正修正...
~/git/brt(22321-enhance-performace)$ git add --all
~/git/brt(22321-enhance-performace)$ git commit -m "adjust query sql syntax."
~/git/brt(22321-enhance-performace)$ git push origin 22321-enhance-performace
如果此 Merge Request 已經 merge 至 master,請重新在本地端開另外一個 branch 修正,並重發另外一個 Merge Request。
議題單改到一半,突然需要先修改另外一張緊急的議題單時怎麼辦?
~/git/brt(22321-enhance-performace)$ git add --all
~/git/brt(22321-enhance-performace)$ git commit -m "[WIP] temp commit." // 先暫時 commit.
~/git/brt(22321-enhance-performace)$ git checkout master
~/git/brt(master)$ git pull --rebase origin master
~/git/brt(master)$ git pull checkout -b 45422-adjust-sql
等新的議題單處理完之後,回到原本議題單的 branch,reset 至暫時 commit 的前一個 commit,此時修改的內容將回到尚未 commit 之前。
~/git/brt(master)$ git checkout 22321-enhance-performace
~/git/brt(22321-enhance-performace)$ git reset HEAD^
//所有之前修改的內容將回到尚未 git add, git commit 前。
繼續修改程式...
List which files are staged, unstaged, and untracked.
List commit history.
在尚未 git add 前,將修改的檔案恢復到尚未修改的狀態。
將檔案恢復到某個版本。
將 staged 的檔案恢復至 unstaged。
將專案回到某個 commit。
git reset <SHA1> // 將專案回到某個 commit,異動的內容為 unstaged.
git reset --soft <SHA1> // 將專案回到某個 commit,異動的內容為 staged.
git reset --hard <SHA1> // 將專案回到某個 commit,捨棄所有的異動內容.
修改 commit 的歷史紀錄。(參考連結)
回到某個版本日誌。(參考連結)
在本例子當中,若遠端修正的內容與本地端 branch 修正的內容剛好改到同個檔案同一行,則發送的 Merge Request 將會被 GitLab 標示成不能 Auto Merge。
此時就必須要在本地端的 branch 先做 pull --rebase origin master
~/git/brt(22321-enhance-performace)$ git pull --rebase origin master
說明:
git rebase --continue //人工解決衝突後,繼續 apply 下一個 commit
git rebase --abort //放棄,回到還沒 pull --rebase 之前
方法一:直接修改 conflict 的檔案
遠端的修正
本地端的修正
修改完之後,將修正的檔案進去 staged (git add),並 git rebase --continue 繼續 apply 下一個 commit.
方法二:使用 TortoiseGit
在專案上按右鍵,選擇 Git Commit 後,將會看到衝突的檔案
方法二:使用 TortoiseGit
在衝突的檔案上按右鍵,選擇 Edit conflicts,開始要來解決衝突
方法二:使用 TortoiseGit
由於 rebase 是先切到 origin/master,再去 apply 本地 branch 上的每一個 commit,所以請特別注意 Theirs 代表本地的 branch,Mine 代表遠端的 master。
方法二:使用 TortoiseGit
解決完每一個衝突,點選綠色勾勾 (Mark as resolved),之後再回到 Git Bash 打入 git rebase --continue 繼續 apply 下一個 commit。
方法二:使用 TortoiseGit
在下面的區塊按右鍵,可用來決定最後解決衝突要使用的版本 (Theirs or Mine),當然也可兩個都不選直接編輯。