[請益] git rebase的問題

看板Soft_Job (軟體人)作者 (薇薇安安)時間4年前 (2022/03/15 12:31), 4年前編輯推噓9(9040)
留言49則, 11人參與, 最新討論串1/1
各位好 本人在近來在公司需要將專案中某個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://www.ptt.cc/bbs/Soft_Job/M.1647318677.A.7C0.html

03/15 12:38, 4年前 , 1F
Push -f ?
03/15 12:38, 1F
我有加-f,忘了寫了

03/15 12:55, 4年前 , 2F
整合一個commit squash 我都用這個
03/15 12:55, 2F

03/15 12:57, 4年前 , 3F
push 後的錯誤訊息是什麼?
03/15 12:57, 3F
記得本地端沒有看到錯誤,remote端才有出現decline

03/15 13:03, 4年前 , 4F
一個一個應該用squash吧?不太建議rebase public
03/15 13:03, 4F

03/15 13:09, 4年前 , 5F
用squash 他就會幫你自動內部rebase了
03/15 13:09, 5F
不懂,我在git rebase的裡用的是squash啊(第二張圖)

03/15 13:26, 4年前 , 6F
所以 push 沒錯誤,只有 or 被拒絕,而且是說 merge 的 ta
03/15 13:26, 6F

03/15 13:26, 4年前 , 7F
rget branch 跟 source 一樣新?要不要檢查一下是不是 reb
03/15 13:26, 7F

03/15 13:26, 4年前 , 8F
ase 的時候出問題了?
03/15 13:26, 8F

03/15 13:28, 4年前 , 9F
但是為什麼 rebase 過的 branch 可以推上去?應該要被 dec
03/15 13:28, 9F

03/15 13:28, 4年前 , 10F
line 才對
03/15 13:28, 10F
加上 -f 後能push,不過會容易被decline 我大致上follow這個影片的做法 https://www.youtube.com/watch?v=8j0H6urZ-bU&t=64s
啊,我內文沒寫到,如果用rebase "只"合併兩個local的commit的話再push的話,有時卻 會成功,怪哉!

03/15 13:31, 4年前 , 11F
另外 squash 出現 conflict 是不是有調整 commit 順序?還
03/15 13:31, 11F

03/15 13:31, 4年前 , 12F
是 rebase 的頭跟 PR 裡的不一樣?如果直接 pull PR 裡的
03/15 13:31, 12F

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

03/15 13:31, 4年前 , 14F
03/15 13:31, 14F

03/15 13:32, 4年前 , 15F
換句話說是怎麼把 PR 裡的 commit 撈下來的
03/15 13:32, 15F
我是git pull <remote name> <remote branch>,和你說的一樣

03/15 13:42, 4年前 , 16F
你要不要先開個branch把會衝突的先merge
03/15 13:42, 16F

03/15 13:43, 4年前 , 17F
不然squash 後產生conflict 不是好事
03/15 13:43, 17F
我是用vs code的在做,有看到conflict的話用滑鼠選一選就可以解 我目前還在用簡單的testcase在試..... ※ 編輯: VivianAnn (108.254.89.199 美國), 03/15/2022 14:00:25

03/15 14:20, 4年前 , 18F
先都用 cli 不要用 vs code,才可以確定打的指令
03/15 14:20, 18F

03/15 14:20, 4年前 , 19F
git pull
03/15 14:20, 19F

03/15 14:20, 4年前 , 20F
git rebase -i (不應該有衝突,有衝突的話可能是解衝突解
03/15 14:20, 20F

03/15 14:20, 4年前 , 21F
錯)
03/15 14:20, 21F

03/15 14:20, 4年前 , 22F
git push origin new_branch (推到新的 branch 不要推到
03/15 14:20, 22F

03/15 14:20, 4年前 , 23F
原本的、不要用 -f)
03/15 14:20, 23F

03/15 14:20, 4年前 , 24F
開新的 PR
03/15 14:20, 24F
這不行,我們公司的人都在PR中討論,相當於一個討論串,不能一直開新的

03/15 14:27, 4年前 , 25F
有衝突的話不是衝突解錯,是步驟有錯 XDDD 剛剛在講三小
03/15 14:27, 25F

03/15 15:06, 4年前 , 26F
你的pull request怪怪的
03/15 15:06, 26F

03/15 15:44, 4年前 , 27F
你為何不叫你mentor幫你...
03/15 15:44, 27F
mentor要我自己先研究

03/15 15:45, 4年前 , 28F
自己開一個repo在bitbucket練一下不就好了
03/15 15:45, 28F
有啊

03/15 16:23, 4年前 , 29F
bitbucket有設定branch能不能被force update
03/15 16:23, 29F

03/15 16:28, 4年前 , 30F
五樓的意思是 bitbucket可以直接幫你做這件事
03/15 16:28, 30F

03/15 16:28, 4年前 , 31F
pr過了merge以後就會只有一個commit
03/15 16:28, 31F

03/15 16:30, 4年前 , 32F
你不需要先在local squash, merge之後只有一個commit
03/15 16:30, 32F

03/15 16:30, 4年前 , 33F
會出現在你的目標branch
03/15 16:30, 33F

03/15 17:12, 4年前 , 34F
1. 檢查你的bitbucket remote branch是不是protected
03/15 17:12, 34F

03/15 17:14, 4年前 , 35F
2. pr取消正常 因為commit不同了
03/15 17:14, 35F

03/15 17:16, 4年前 , 36F
3. 你reopen失敗的原因應該是你推錯branch
03/15 17:16, 36F
mentor跟我說PR取消是因為有drastic change,re-open方面是要原本branch的內容再 push一次才能點,這真的不知道為啥

03/15 17:28, 4年前 , 37F
branch不給force update的話,那就不能rebase+squash了?
03/15 17:28, 37F

03/15 21:00, 4年前 , 38F
都忘記 merge 可以 merge squash 了
03/15 21:00, 38F

03/15 22:06, 4年前 , 39F
local rebase 完以後推新的 remote branch, 不要用-f
03/15 22:06, 39F

03/15 22:06, 4年前 , 40F
覆寫掉原本那條, 除非確定那條只有你在用, 推上去後在
03/15 22:06, 40F

03/15 22:06, 4年前 , 41F
用新建的 remote branch 發PR 到 master branch 並設定
03/15 22:06, 41F

03/15 22:06, 4年前 , 42F
squash merge 應該可以解掉你提到的問題~
03/15 22:06, 42F

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

03/15 22:20, 4年前 , 44F
t branch permission 設定比較有關
03/15 22:20, 44F
我問過同事,會這樣可能是因為要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

03/17 10:18, 4年前 , 45F
再說一次,rebase squash 只要沒有動 commit 的順序就不應
03/17 10:18, 45F

03/17 10:18, 4年前 , 46F
該衝突
03/17 10:18, 46F

03/17 10:21, 4年前 , 47F
不過都 force push 了除非會 reflog 不然應該沒救了,找 m
03/17 10:21, 47F

03/17 10:21, 4年前 , 48F
entor 救你吧
03/17 10:21, 48F

03/26 23:44, , 49F
不應該 conflict,應該是哪裡有操作錯誤
03/26 23:44, 49F
文章代碼(AID): #1YC1QLV0 (Soft_Job)
文章代碼(AID): #1YC1QLV0 (Soft_Job)