Git中rebase的使用
平時開發中,基本使用idea進行Git的pull、statsh、commit、push、revert等操作。
git add . 可以將所有未add的文件添加到暫存區,也可以git add file(具體的文件路徑)對單一文件操作
也可以通過git add -i,命令進入交互式操作中,如圖:
更多交互式操作詳見Git官方文檔
git restore . 可以將所有還未加入到暫存區的文件恢復至原來狀態,也可以git restore file(具體文件路徑)對單一文件進行操作:
如:
git restore src/test/java/com/example/mybatis/demomybatis/MybatisTests.java也可以通過git restore -i,命令進入交互式操作中
同時還可以將一個分支develpop合并到master上:步驟如下
1、在develop上確保已經提交完畢
2、切換到master分支上,pull一下
3、在idea的右下角,Git那里,找到develop分支,點擊develop分支,有一個merger into current選項,點擊即可合并
4、如果出現沖突,則解決沖突即可
問題引出:
今天在合并代碼的時候的,合并分支1(暫時叫dev1)到分支2(dev2),由于使用了idea進行合并,所以idea默認合并之后會生成一個merger的信息并commit。但是這時候發現dev2上有其他同事提交的代碼,導致我從dev1上合過來的代碼有一部分報錯。進行修改之后,再次commit.然后push的時候要合并成一個commit進行push.
為什么要合并成一次commit?
原因:我司使用gerrit進行代碼的構建和自動檢查功能,如果分兩次push,則會失敗,因為第一次idea默認的commit中其實是有錯誤的,gerrit的代碼自動檢查也過不了
方式一:
使用git rebase -i 命令
模擬場景如下:
第一次commit
git commit -m "test1 commit"第二次提交:
git commit -m "test2 commit"查看git 提交歷史:
git log如下圖:
我們目標是要將這兩次提交合并為一次提交
1、選擇要合并的提交的共同的parent,這里就是commit 為11ef17...這個提交,執行命令
git rebase -i 11ef17會彈出一個vim編輯器頁面,如圖,按i進入編輯模式
p,pick:使用該次提交
r,reword:使用該次提交,但重新編輯提交信息
e,edit:使用該次提交,但停止到該次提交
s,squash:將該commit和【前一個】commit合并
f,fixup:將該commit和前一個commit合并,但不保留該提交的注釋信息
x,exec:執行shell命令
d,drop:丟棄該commit
這里我們編輯如下:
p 1103bb9 test1 commits b94e5f7 test2 commit編輯之后,:wq命令,保存、退出。此時會進入到編輯commit message信息頁面
在這里可以編輯提交信息,按i進入編輯模式,如果要使用第一個提交信息,則使用#將test2 commit注釋掉,如果這兩個提交信息都不想要,則可以都用#注釋掉,然后在#This is a combination of 2 commits下面,添加自己的提交信息即可。
填寫完畢,esc退出編輯模式->:wq保存退出->git log 查看兩個提交已經合并為一個commit了
提示:如果在rebase過程中出現任何問題,則可以通過命令,git rebase --abort,退出rebase模式。
PS:在第一個commit不能使用s參數,因為s是指將當前和它的前一個提交合并,但是第一個的前面已經不存在其他提交了,所以要是這么寫會直接標紅 報錯
方式二:
使用git commit --amend
第一次提交之后,第二次修改文件之后,注意:修改完之后,只需要add,不需要 git commit 使用第一次的提交信息并且將這兩個commit合并為一個commit
git commit --amend這種方式其實等價于第一種方式中的交互模式中的,f參數,fixup:將該commit和前一個commit合并,但不保留該提交的注釋信息
p 1103bb9 test1 commitf b94e5f7 test2 commit方式三:
直接使用git reset (commitid),將本地git恢復至兩個commit的parent歷史處。
由于git reset不帶任何參數,會將原來的修改移除暫存區,所有接下來使用git add . 將所有被移除的文件重新加入暫存區中,然后進行一次總的git commit即可
提示:可以使用git reset --soft (commitid),加入--soft參數不會使文件移除暫存區
?
個人推薦使用git commit --amend或者git rebase -i形式
總結
以上是生活随笔為你收集整理的Git中rebase的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蚂蚁链开发者实验室:开放全栈工具助力开发
- 下一篇: (转载)依赖、关联、聚合、组合