git使用之rebase合併提交

git使用之rebase合併提交技術

maybe yes 發表於2015-03-15 22:43php

原文連接 : http://blog.lmlphp.com/archives/88/The_use_tutorial_of_git_rebase_to_merge_multiple_commits_as_a_submit  來自 : LMLPHP後院mysql

對於版本控制系統 GIT ,一直沒有深刻研究,只是從平常使用方面入手,能解決日常使用出現的問題就能夠了。GIT 的版本控制,有三種後悔方式:reset、revert 和 rebase,本文主要講述 rebase 的使用。git

使用場景:當在新分支中開發一個新功能的過程當中,開發期間涉及的文件數比較多,提交的次數也很是多,同時整個提交的過程很是的複雜,在最後合併的時候,須要移除某些修改的文件而且將提交次數整理爲一次 commit。sql

使用下面的命令,顯示全部提交記錄,找出第一次 {commit} 的前一個 {commit} 的哈希值並複製。shell

git log --pretty=oneline

使用 rebase 命令加上 -i 參數,合併提交到指定位置,以下示例。this

git rebase -i f7d0bd75c8dabe127d8cbd2c1d70ff188ff83392

運行後,進入 VIM 模式,除第一個 pick 外,其他的所有修改爲 squash,也能夠縮寫爲 s,以下示例。spa

pick 4f11983 add update method in mysql driver class;
squash aa8576a add attachEvent method
squash e6e8db4 modify default_theme_name constant name
squash f7d0bd7 fix method logPre;

# Rebase 6a2eb6d..f7d0bd7 onto 6a2eb6d
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

接下來,使用 :wq 保存確認後,會進入編輯 comment 模式下,此處只須要將多個提交的 comments 進行編輯,而後 :wq 保存便可。一般狀況下,只要恢復到了第一次提交,就不會出現衝突。若 GIT 在 rebase 的過程當中產生衝突,會進入一個臨時分支,只須要將該分支中被修改的文件編輯後提交,使用 git rebase --continue 完成 rebase 的過程,或者使用 git rebase --abort 取消操做。最後 push 的時候須要加上參數 -f,不然不能推送到遠程庫。版本控制

若是提交了不少次之後,並不想擦除提交記錄,只想將部分須要移除的文件內容恢復到建立分支前的狀態,可使用 checkout 命令,指定某個 commit 和某個文件。內容恢復後,再進行一次提交便可,團隊人數不多的時候,能夠這樣作,若是項目開發成員比較多,爲避免提交紀錄太亂,rebase 仍是最好的方案。rest

閱(97)評(0)查看評論code

相關文章
相關標籤/搜索