作者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/cn.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