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 # 清除所有的操作檔案