日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Git中rebase的使用

發布時間:2023/12/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。