Rebase 版本衝突· Git

文章推薦指數: 80 %
投票人數:10人

請在解完conflict 後,下指令 git rebase --continue 使用 git rebase --skip 略過 ... 這時候rebase 的動作會先停下來,並且要求我們解決衝突. 我們保留"55" 刪除"33". Git 簡介 安裝 配置 初體驗 建立Git專案 提交一個Patch 檔案管理 新增/修改檔案 刪除檔案 搬移檔案 重新命名檔案 檔案狀態 檔案還原 忽略檔案 Patch管理 基本觀念 關鍵字HEAD ResetPatch 找回消失的Patch 修改/訂正Patch 移除單一個Patch Rebase互動模式 Cherry-Pick版本衝突 Rebase版本衝突 RevertPatch 分支管理 查看分支 建立/刪除分支 CommitTree Rebase合併分支 Merge合併分支 遠端篇 新增專案 設定RepoURL 上傳分支 設定Upstream 複製/下載專案 同步遠端分支 強制更新遠端分支 刪除遠端分支 進階篇 檔案暫存 Add/Checkout檔案部分內容 版本標籤 子模組 svn PoweredbyGitBook Rebase版本衝突 Rebase版本衝突 我們在上一章已經教了如何解cherr-pick的版本衝突 而Rebase互動模式其實就只是透過RebaseTODO依序完成多個cherry-pick的動作 因此,既然cherry-pick會發生版本衝突,那麼rebase必定也會發生版本衝突 現在我們就把剛才最後的兩個patch用Rebase互動模式再調換回來吧! 改成先"Add55",再"Add33" P0→...→P4→P5→P6現在的順序 1349bcea0afdc35e5c72e P0→...→P4→P6'→P5'我們將要改成的順序 $gitrebase-i1349bce#告訴git我們要改動的範圍是從P4之後的patch(P5)到HEAD(P6) #並且進入vim文字編輯模式來編輯RebaseTODO 我們把兩個patch的順序對調,並且存檔離開 git在cherry-pickP6的時候發生了衝突 fixconflictsandthenrun"gitrebase--continue" use"gitrebase--skip"toskipthispatch use"gitrebase--abort"tocheckouttheoriginalbranch 請在解完conflict後,下指令gitrebase--continue 使用gitrebase--skip略過這個patch 使用gitrebase--abort全部取消,並且回到rebase前的狀態 這時候rebase的動作會先停下來,並且要求我們解決衝突 我們保留"55"刪除"33" 把num.txtadd起來,下指令gitrebase--continue告知git已經解完conflict,請繼續 $gitrebase--continue#按下enter後,會立刻進入vim文字編輯模式 #就跟cherry-pick的時候一樣 解完P6的conflict之後,git會根據RebaseTODO繼續做下一件事情 接著會去做cherry-pickP5,又再度發生了conflict 我們把"33"跟"55"都保留下來 這裡還要特別注意行序,我們想要順序是11→33→55,而不是11→55→33 把num.txtadd起來,下指令gitrebase--continue告知git已經解完conflict,請繼續 進入vim文字編輯模式,存檔離開 使用gitlog查看結果 我們已經成功將P5跟P6的位置調換過來了 使用gitrebase--skip跳過目前正在執行RebaseTODO的動作,並執行下一個動作 use"gitrebase--skip"toskipthispatch Git對--skip的說明為"略過這個patch" 這對於Rebase互動模式來說,可以解釋為跳過目前正在執行RebaseTODO的動作 因為RebaseTODO的每個動作都會對應到一個patch git跳過目前正在執行的動作後,會繼續執行下一個動作 使用gitrebase--abort全部取消,並且回到rebase前的狀態 Rebase互動模式讓我們快速的完成多個cherry-pick的指令 如果中途輸入gitrebase--abort的話,就會全部取消,回到rebase前的狀態 包括中間好不容易解掉的conflict也要全部重來 如果想要保留之前解好的conflict並維持現狀的話,其實可以一直--skip到RebaseTODO全部跑完... 不過當遇到會連續發生conflict的狀況時,還是建議用cherry-pick一個一個挑會比較保險^^" 本章回顧 使用gitrebase--continue告知git已經解完衝突 使用gitrebase--skip跳過目前正在執行RebaseTODO的動作,並執行下一個動作 使用gitrebase--abort全部取消,並且回到rebase前的狀態 resultsmatching"" Noresultsmatching""



請為這篇文章評分?