使用git rebase合併屢次commit

1.首先使用git log查看一下提交歷史: 這樣在git中看到的是4次提交,有點冗餘,須要作的是將4次commit合併爲一次git

[demo@ubuntu1204:zh_cn(bugfix/ycs-MOS-1503-notify-template-table-center)]$ git log  
commit 5e187c7dbe84af67ad19823a54f3cc3e3f6d6940  
Author: yangcs2009 <yangchangsheng@meituan.com>  
Date:   Thu Jul 30 20:48:15 2015 +0800  
  
    add center style indent  
  
commit 6d577eb344080d7e3593733ac8dcb622de22b492  
Author: yangcs2009 <yangchangsheng@meituan.com>  
Rebasing (4/4)  
Date:   Thu Jul 30 20:30:20 2015 +0800  
  
    add center style  
  
commit f9b9508a3ab634f8c8a2d28ab844a3a87d8e30ab  
Author: yangcs2009 <yangchangsheng@meituan.com>  
Date:   Thu Jul 30 20:16:35 2015 +0800  
  
    add center style  
  
commit 111ab9cc26101f7c6972de3dccfef2836a95efe0  
Author: yangcs2009 <yangchangsheng@meituan.com>  
Date:   Thu Jul 30 18:57:46 2015 +0800  
  
    update templates
  1. git 壓縮 git rebase -i HEAD~4

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

pick 5e187c7dbe8    add center style indent  
pick 6d577eb3440    add center style  
pick f9b9508a3ab    add center style  
pick 111ab9cc261    update templates  
# Rebase 150a643..2fad1ae onto 150a643  
#  
# 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

修改第2-4行的第一個單詞pick爲squash,固然看一下里面的註釋就理解含義了。 而後保存退出,Git會壓縮提交歷史,若是有衝突,須要修改,修改的時候要注意,保留最新的歷史,否則咱們的修改就丟棄了ubuntu

pick 5e187c7dbe8    add center style indent  
squash 6d577eb3440  add center style  
squash f9b9508a3ab  add center style  
squash 111ab9cc261  update templates  
# Rebase 150a643..2fad1ae onto 150a643  
#  
# 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

修改之後要記得敲下面的命令(若是沒有衝突會自動略過這一步進入下一步):講以前的commit message 刪除只保留一個便可this

git add .  
git rebase --continue

若是沒有衝突,或者衝突已經解決,則會出現以下的編輯窗口:3d

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

保存以後push到倉庫rest

git push --force

若是你想放棄此次壓縮的話,執行如下命令:code

git rebase --abort
相關文章
相關標籤/搜索