PTT評價

[請益] git rebase的問題

看板Soft_Job標題[請益] git rebase的問題作者
VivianAnn
(薇薇安安)
時間推噓 9 推:9 噓:0 →:40

各位好

本人在近來在公司需要將專案中某個pull request的commit統合成一個

下圖為pull request,本公司用的是bitbucket

https://ibb.co/6gWQPnf


我看了一些網路教學和youtube,仍然想不出解法。我的做法如下:

先在local的branch中執行git rebase -i HEAD~5

在interactive mode中將之前5個commits壓成一個

https://ibb.co/VDqvhxv


有時會執行完後會出現conflict。將conflict resolve後使用以下指令push到remote

git push <local_branch>:<remote_name> -f


然而,push 之後,不僅失敗,我看到的還是pull request被decline:

如果我要re-open這pull request,則會出現以下error:

https://ibb.co/sV8P4dW


我的mentor是和我說,如果bitbucket的pull request出現大變動時,會自動decline

必須要重新push最新的commit才能解開


請問版上有沒有大神能指點我如何合併bitbucket中遠端pull request的commit?

問題描述不清楚的地方我會再補充,謝謝!

--

※ PTT 留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 108.254.89.199 (美國)
PTT 網址

xxi51103/15 12:38Push -f ?

我有加-f,忘了寫了

godddddd03/15 12:55整合一個commit squash 我都用這個

ChiuTW03/15 12:57push 後的錯誤訊息是什麼?

記得本地端沒有看到錯誤,remote端才有出現decline

wulouise03/15 13:03一個一個應該用squash吧?不太建議rebase public

acgotaku03/15 13:09用squash 他就會幫你自動內部rebase了

不懂,我在git rebase的裡用的是squash啊(第二張圖)

ChiuTW03/15 13:26所以 push 沒錯誤,只有 or 被拒絕,而且是說 merge 的 ta

ChiuTW03/15 13:26rget branch 跟 source 一樣新?要不要檢查一下是不是 reb

ChiuTW03/15 13:26ase 的時候出問題了?

ChiuTW03/15 13:28但是為什麼 rebase 過的 branch 可以推上去?應該要被 dec

ChiuTW03/15 13:28line 才對

加上 -f 後能push,不過會容易被decline 我大致上follow這個影片的做法

https://www.youtube.com/watch?v=8j0H6urZ-bU&t=64s

啊,我內文沒寫到,如果用rebase "只"合併兩個local的commit的話再push的話,有時卻 會成功,怪哉!

ChiuTW03/15 13:31另外 squash 出現 conflict 是不是有調整 commit 順序?還

ChiuTW03/15 13:31是 rebase 的頭跟 PR 裡的不一樣?如果直接 pull PR 裡的

ChiuTW03/15 13:31branch,直接 rebase,應該不會有衝突,這部分是怎麼做的

ChiuTW03/15 13:31

ChiuTW03/15 13:32換句話說是怎麼把 PR 裡的 commit 撈下來的

我是git pull <remote name> <remote branch>,和你說的一樣

acgotaku03/15 13:42你要不要先開個branch把會衝突的先merge

acgotaku03/15 13:43不然squash 後產生conflict 不是好事

我是用vs code的在做,有看到conflict的話用滑鼠選一選就可以解 我目前還在用簡單的testcase在試.....

※ 編輯: VivianAnn (108.254.89.199 美國), 03/15/2022 14:00:25

ChiuTW03/15 14:20先都用 cli 不要用 vs code,才可以確定打的指令

ChiuTW03/15 14:20git pull

ChiuTW03/15 14:20git rebase -i (不應該有衝突,有衝突的話可能是解衝突解

ChiuTW03/15 14:20錯)

ChiuTW03/15 14:20git push origin new_branch (推到新的 branch 不要推到

ChiuTW03/15 14:20原本的、不要用 -f)

ChiuTW03/15 14:20開新的 PR

這不行,我們公司的人都在PR中討論,相當於一個討論串,不能一直開新的

ChiuTW03/15 14:27有衝突的話不是衝突解錯,是步驟有錯 XDDD 剛剛在講三小

honochung03/15 15:06你的pull request怪怪的

MoonCode03/15 15:44你為何不叫你mentor幫你...

mentor要我自己先研究

MoonCode03/15 15:45自己開一個repo在bitbucket練一下不就好了

有啊

alan503/15 16:23bitbucket有設定branch能不能被force update

alan503/15 16:28五樓的意思是 bitbucket可以直接幫你做這件事

alan503/15 16:28pr過了merge以後就會只有一個commit

alan503/15 16:30你不需要先在local squash, merge之後只有一個commit

alan503/15 16:30會出現在你的目標branch

alan503/15 17:121. 檢查你的bitbucket remote branch是不是protected

alan503/15 17:142. pr取消正常 因為commit不同了

alan503/15 17:163. 你reopen失敗的原因應該是你推錯branch

mentor跟我說PR取消是因為有drastic change,re-open方面是要原本branch的內容再 push一次才能點,這真的不知道為啥

TheWhack03/15 17:28branch不給force update的話,那就不能rebase+squash了?

ChiuTW03/15 21:00都忘記 merge 可以 merge squash 了

mike846903/15 22:06local rebase 完以後推新的 remote branch, 不要用-f

mike846903/15 22:06覆寫掉原本那條, 除非確定那條只有你在用, 推上去後在

mike846903/15 22:06用新建的 remote branch 發PR 到 master branch 並設定

mike846903/15 22:06squash merge 應該可以解掉你提到的問題~

mike846903/15 22:20重看一次發現我理解錯你的問題, -f 被拒感覺跟bitbucke

mike846903/15 22:20t branch permission 設定比較有關

我問過同事,會這樣可能是因為要rebash的commit有衝突到 同事的做法是用git reset --soft來分解之前有衝突的commit,在local重新commit一次 再git rebase,再git push -f 到PR的branch

※ 編輯: VivianAnn (108.254.89.199 美國), 03/16/2022 11:56:58

ChiuTW03/17 10:18再說一次,rebase squash 只要沒有動 commit 的順序就不應

ChiuTW03/17 10:18該衝突

ChiuTW03/17 10:21不過都 force push 了除非會 reflog 不然應該沒救了,找 m

ChiuTW03/17 10:21entor 救你吧

xluds2480503/26 23:44不應該 conflict,應該是哪裡有操作錯誤