git merge vs rebase
git merge
最常使用的 merge 我們看一下範例
D---E # master
/
A---B---C---F # origin/master
git merge
使用後的圖表
D--------E
/ \
A---B---C---F----G # master, origin/master
git rebase
使用後的圖表
A---B---C---F---D'---E' # master, origin/master
git rebase
目的是為了讓線圖更乾淨以及避免無謂的merge
rebase 時所謂的解決衝突,其實是直接修改你之前的變更內容 要特別注意
git merge
如果修改太多東西預期會有很多衝突要解決請使用merge 不過如果那麼多的話應該建議開個新分之下去做會比較好
git rebase
使用情況大部分都是用來做 git pull origin --rebase or git rebase dev
使用以避免無謂的merge
git rebase
操作流程
Step1. git stash # 先將目前資料做暫存因為我們機要更新我們的最新版本
Step2. git checkout dev # 切換到我們要 git pull的分支假設是(dev)
Step3. git pull origin dev --rebase or git pull --rebase #都可使用在這看狀況因為我們要的是dev最新的狀態
Step4. git checkout branch1 # 切換到我們要 rebase的分支
Step5. git rebase dev # 將我們要更新的資料給合併進來 如果有衝突請繼續下一個步驟
Step6. git rebase --continue # 我們解決完衝突將繼續我們的合併動作
Step7. git stash pop # 將我們剛暫存的操作給復原
Step8. 完成
git rebase
做的事情
重新 commit
調換 commit 的順序
修改 commit 的訊息
插入/編輯/拆解/壓縮(Squash)合併訊息記錄/壓縮(丟棄版本紀錄)/刪除 一個 commit
git rebase
相關操作指令
git rebase dev
# rebase到 dev
git rebase --continue
# 如果有檔案衝突解決完衝突請執行這行指令他會讓我們rebase繼續進行
git rebase --abort
# 還原我們的rebase
git rebase --skip
# 跳過這版的套用
請記住不要在git rebase
進行 git commit
指令如果不小心進行請使用git rebase --skip
跳過這一套版使用
git stash
意思就是暫存我們目前更改的檔案 以下是相關操作
git stash
# 暫存目前剛更改的檔案(不包含git 尚未追蹤檔案也就是剛新增的檔案不會被暫存)
git stash list
# 列出我們所有的暫存
git stash pop
# 還原我們剛存的(最近)操作檔
git stash apply stash@{1}
# 還原操作檔案編號 1
git stash drop stash@{1}
# 刪除操作檔案編號 1
git stash clear
# 清除所有的操作檔案