作者VivianAnn (薇薇安安)
看板Soft_Job
標題[請益] git rebase的問題
時間Tue Mar 15 12:31:11 2022
各位好
本人在近來在公司需要將專案中某個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.cc), 來自: 108.254.89.199 (美國)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Soft_Job/M.1647318677.A.7C0.html
1F:推 xxi511: Push -f ? 03/15 12:38
我有加-f,忘了寫了
2F:推 godddddd: 整合一個commit squash 我都用這個 03/15 12:55
3F:→ ChiuTW: push 後的錯誤訊息是什麼? 03/15 12:57
記得本地端沒有看到錯誤,remote端才有出現decline
4F:推 wulouise: 一個一個應該用squash吧?不太建議rebase public 03/15 13:03
5F:推 acgotaku: 用squash 他就會幫你自動內部rebase了 03/15 13:09
不懂,我在git rebase的裡用的是squash啊(第二張圖)
6F:→ ChiuTW: 所以 push 沒錯誤,只有 or 被拒絕,而且是說 merge 的 ta 03/15 13:26
7F:→ ChiuTW: rget branch 跟 source 一樣新?要不要檢查一下是不是 reb 03/15 13:26
8F:→ ChiuTW: ase 的時候出問題了? 03/15 13:26
9F:→ ChiuTW: 但是為什麼 rebase 過的 branch 可以推上去?應該要被 dec 03/15 13:28
10F:→ ChiuTW: line 才對 03/15 13:28
加上 -f 後能push,不過會容易被decline
我大致上follow這個影片的做法
https://www.youtube.com/watch?v=8j0H6urZ-bU&t=64s
啊,我內文沒寫到,如果用rebase "只"合併兩個local的commit的話再push的話,有時卻
會成功,怪哉!
11F:→ ChiuTW: 另外 squash 出現 conflict 是不是有調整 commit 順序?還 03/15 13:31
12F:→ ChiuTW: 是 rebase 的頭跟 PR 裡的不一樣?如果直接 pull PR 裡的 03/15 13:31
13F:→ ChiuTW: branch,直接 rebase,應該不會有衝突,這部分是怎麼做的 03/15 13:31
14F:→ ChiuTW: ? 03/15 13:31
15F:→ ChiuTW: 換句話說是怎麼把 PR 裡的 commit 撈下來的 03/15 13:32
我是git pull <remote name> <remote branch>,和你說的一樣
16F:推 acgotaku: 你要不要先開個branch把會衝突的先merge 03/15 13:42
17F:→ acgotaku: 不然squash 後產生conflict 不是好事 03/15 13:43
我是用vs code的在做,有看到conflict的話用滑鼠選一選就可以解
我目前還在用簡單的testcase在試.....
※ 編輯: VivianAnn (108.254.89.199 美國), 03/15/2022 14:00:25
18F:→ ChiuTW: 先都用 cli 不要用 vs code,才可以確定打的指令 03/15 14:20
19F:→ ChiuTW: git pull 03/15 14:20
20F:→ ChiuTW: git rebase -i (不應該有衝突,有衝突的話可能是解衝突解 03/15 14:20
21F:→ ChiuTW: 錯) 03/15 14:20
22F:→ ChiuTW: git push origin new_branch (推到新的 branch 不要推到 03/15 14:20
23F:→ ChiuTW: 原本的、不要用 -f) 03/15 14:20
24F:→ ChiuTW: 開新的 PR 03/15 14:20
這不行,我們公司的人都在PR中討論,相當於一個討論串,不能一直開新的
25F:→ ChiuTW: 有衝突的話不是衝突解錯,是步驟有錯 XDDD 剛剛在講三小 03/15 14:27
26F:推 honochung: 你的pull request怪怪的 03/15 15:06
27F:→ MoonCode: 你為何不叫你mentor幫你... 03/15 15:44
mentor要我自己先研究
28F:→ MoonCode: 自己開一個repo在bitbucket練一下不就好了 03/15 15:45
有啊
29F:→ alan5: bitbucket有設定branch能不能被force update 03/15 16:23
30F:→ alan5: 五樓的意思是 bitbucket可以直接幫你做這件事 03/15 16:28
31F:→ alan5: pr過了merge以後就會只有一個commit 03/15 16:28
32F:→ alan5: 你不需要先在local squash, merge之後只有一個commit 03/15 16:30
33F:→ alan5: 會出現在你的目標branch 03/15 16:30
34F:→ alan5: 1. 檢查你的bitbucket remote branch是不是protected 03/15 17:12
35F:→ alan5: 2. pr取消正常 因為commit不同了 03/15 17:14
36F:→ alan5: 3. 你reopen失敗的原因應該是你推錯branch 03/15 17:16
mentor跟我說PR取消是因為有drastic change,re-open方面是要原本branch的內容再
push一次才能點,這真的不知道為啥
37F:推 TheWhack: branch不給force update的話,那就不能rebase+squash了? 03/15 17:28
38F:→ ChiuTW: 都忘記 merge 可以 merge squash 了 03/15 21:00
39F:推 mike8469: local rebase 完以後推新的 remote branch, 不要用-f 03/15 22:06
40F:→ mike8469: 覆寫掉原本那條, 除非確定那條只有你在用, 推上去後在 03/15 22:06
41F:→ mike8469: 用新建的 remote branch 發PR 到 master branch 並設定 03/15 22:06
42F:→ mike8469: squash merge 應該可以解掉你提到的問題~ 03/15 22:06
43F:→ mike8469: 重看一次發現我理解錯你的問題, -f 被拒感覺跟bitbucke 03/15 22:20
44F:→ mike8469: t branch permission 設定比較有關 03/15 22:20
我問過同事,會這樣可能是因為要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
45F:→ ChiuTW: 再說一次,rebase squash 只要沒有動 commit 的順序就不應 03/17 10:18
46F:→ ChiuTW: 該衝突 03/17 10:18
47F:→ ChiuTW: 不過都 force push 了除非會 reflog 不然應該沒救了,找 m 03/17 10:21
48F:→ ChiuTW: entor 救你吧 03/17 10:21
49F:推 xluds24805: 不應該 conflict,應該是哪裡有操作錯誤 03/26 23:44