1. 程式人生 > >git rebase合併多次commi

git rebase合併多次commi

將多次commit合併,只保留一次提交歷史。

1.首先使用git log檢視一下提交歷史


  
  1. [[email protected]:zh_cn(bugfix/ycs-MOS-1503-notify-template-table-center)]$ git log
  2. commit 5e187c7dbe84af67ad19823a54f3cc3e3f6d6940
  3. Author: yangcs2009 <[email protected]>
  4. Date: Thu Jul 30 20: 48: 15 2015 + 0800
  5. add
    center style indent
  6. commit 6d577eb344080d7e3593733ac8dcb622de22b492
  7. Author: yangcs2009 <[email protected]>
  8. Rebasing ( 4
    / 4)
  9. Date: Thu Jul 30 20: 30: 20 2015 + 0800
  10. add center style
  11. commit f9b9508a3ab634f8c8a2d28ab844a3a87d8e30ab
  12. Author: yangcs2009 <[email protected]>
  13. Date: Thu Jul 30 20: 16: 35 2015 + 0800
  14. add center style
  15. commit 111ab9cc26101f7c6972de3dccfef2836a95efe0
  16. Author: yangcs2009 <[email protected]>
  17. Date: Thu Jul 30 18: 57: 46 2015 + 0800
  18. update templates
這樣在git中看到的是4次提交,有點冗餘,需要做的是將4次commit合併為一次

2. git 壓縮  git rebase -i HEAD~4

該命令執行後,會彈出一個編輯視窗,4次提交的commit倒序排列,最上面的是最早的提交,最下面的是最近一次提交。


  
  1. pick 5e187c7dbe8 add center style indent
  2. pick 6d577eb3440 add center style
  3. pick f9b9508a3ab add center style
  4. pick 111ab9cc261 update templates
  5. # Rebase 150a643..2fad1ae onto 150a643
  6. #
  7. # Commands:
  8. # p, pick = use commit
  9. # r, reword = use commit, but edit the commit message
  10. # e, edit = use commit, but stop for amending
  11. # s, squash = use commit, but meld into previous commit
  12. # f, fixup = like "squash", but discard this commit's log message
  13. # x, exec = run command (the rest of the line) using shell
  14. #
  15. # These lines can be re-ordered; they are executed from top to bottom.
  16. #
  17. # If you remove a line here THAT COMMIT WILL BE LOST.
  18. #
  19. # However, if you remove everything, the rebase will be aborted.
  20. #
  21. # Note that empty commits are commented out

  
  1. pick 5e187c7dbe8 add center style indent
  2. squash 6d577eb3440 add center style
  3. squash f9b9508a3ab add center style
  4. squash 111ab9cc261 update templates
  5. # Rebase 150a643..2fad1ae onto 150a643
  6. #
  7. # Commands:
  8. # p, pick = use commit
  9. # r, reword = use commit, but edit the commit message
  10. # e, edit = use commit, but stop for amending
  11. # s, squash = use commit, but meld into previous commit
  12. # f, fixup = like "squash", but discard this commit's log message
  13. # x, exec = run command (the rest of the line) using shell
  14. #
  15. # These lines can be re-ordered; they are executed from top to bottom.
  16. #
  17. # If you remove a line here THAT COMMIT WILL BE LOST.
  18. #
  19. # However, if you remove everything, the rebase will be aborted.
  20. #
  21. # Note that empty commits are commented out
修改第2-4行的第一個單詞pick為squash,當然看一下里面的註釋就理解含義了。

然後儲存退出,git會壓縮提交歷史,如果有衝突,需要修改,修改的時候要注意,保留最新的歷史,不然我們的修改就丟棄了。修改以後要記得敲下面的命令:


  
  1. git add .
  2. git rebase -- continue

如果你想放棄這次壓縮的話,執行以下命令:

git rebase --abort
  

如果沒有衝突,或者衝突已經解決,則會出現如下的編輯視窗:


  
  1. # This is a combination of 4 commits.
  2. # The first commit’s message is:
  3. add center style indent
  4. # The 2nd commit’s message is:
  5. add center style
  6. # The 3rd commit’s message is:
  7. add center style
  8. # The 4th commit’s message is:
  9. update templates
  10. # Please enter the commit message for your changes. Lines starting
  11. # with ‘#’ will be ignored, and an empty message aborts the commit.

3.同步到遠端git倉庫

不過此時遠端的資訊仍未改變,下面操作會把修改同步到遠端git倉庫


  
  1. [[email protected]:zh_cn(bugfix/ycs-MOS -1503-notify-template-table-center)]$ git push -f
  2. Enter passphrase for key '/home/demo/.ssh/id_rsa':
  3. Counting objects: 1, done.
  4. Writing objects: 100% ( 1/ 1), 223 bytes | 0 bytes/s, done.
  5. Total 1 (delta 0), reused 0 (delta 0)
  6. remote:
  7. remote: View pull request for bugfix/ycs-MOS -1503-notify-template-table-center => release/ 1.1 .3:
  8. remote: http://git.sankuai.com/projects/SA/repos/cloud/pull-requests/ 1042
  9. remote:
  10. To ssh://[email protected]/sa/cloud.git
  11. + 5e187c7.. .8d26431 bugfix/ycs-MOS -1503-notify-template-table-center -> bugfix/ycs-MOS -1503-notify-template-table-center (forced update)

4.檢視遠端git倉庫效果