Git再次rebase然后push(再次)被拒绝。

13 浏览
0 Comments

Git再次rebase然后push(再次)被拒绝。

这个情况我以为是一个简单的git场景,我错了吗?

我有一个master分支和一个feature分支。我在master上做了一些工作,又在feature上做了一些工作,然后又在master上做了一些工作。最后的结果如下(按字典顺序表示提交的顺序):

A--B--C------F--G (master)

\

D--E (feature)

我没有问题地使用git push origin master来保持远程的master分支更新,也没有问题使用git push origin feature(当在feature上时)来为我的feature工作保留一个远程备份。到目前为止,一切都好。

但现在我想在F--G提交之上将feature分支进行rebase,所以我使用git checkout featuregit rebase master。还是没问题的。现在我们有:

A--B--C------F--G (master)

\

D'--E' (feature)

问题:当我想要用git push origin feature备份新的rebased feature分支时,push操作被拒绝,因为由于rebase的缘故,树已经发生了变化。这只能通过git push --force origin feature来解决。

我讨厌在不确定是否需要的情况下使用--force。那么,我需要使用它吗?重新base是否必然意味着下一次push应该使用--force

这个feature分支没有与其他开发人员共享,所以对于force push,我实际上没有问题,不会丢失任何数据,问题更多的是概念上的。

0
0 Comments

Git rebase again then push (again) is rejected的问题出现的原因是在删除远程分支后再次进行rebase和push操作时被拒绝。这是因为删除分支后,分支上的SHA ID已经发生了变化,再次进行rebase和push时,Git会检测到不同的SHA ID,从而拒绝操作。

解决这个问题的方法是先使用git push origin --delete myFeature命令删除远程分支,然后再使用git push origin myFeature命令重新推送分支。这样做的好处是避免了使用git push --force命令,因为git push --force命令不会关闭合并请求(Merge Request),而git push origin --delete命令会关闭合并请求。

总结起来,解决这个问题的步骤如下:

1. 使用git push origin --delete myFeature命令删除远程分支。

2. 使用git push origin myFeature命令重新推送分支。

以上操作能够解决Git rebase again then push (again) is rejected的问题,同时避免了使用git push --force命令可能带来的风险。

0
0 Comments

问题出现的原因是:在执行了git rebase之后,feature-branch的提交顺序被打乱,生成了新的提交哈希值,导致push操作被拒绝。

解决方法是:使用force选项来强制推送本地feature-branch覆盖远程的origin/feature-branch。可以使用命令git push --force origin feature-branch来实现。另外,--force-with-lease选项也是一个更安全的选择。

总结一下讨论的要点:在进行feature分支上的rebase操作时,会打乱原始的提交顺序并生成新的提交哈希值,因此push操作会被拒绝。使用force选项可以解决该问题,但要注意潜在的风险,推荐使用--force-with-lease选项。此外,可以查看相关视频和讨论来更好地理解并避免类似问题的发生。同时,感谢讨论的参与者,通过他们的讨论,我们更好地理解了问题出现的原因。

0