程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用 BitBucket 的 Git Rebase大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用 BitBucket 的 Git Rebase?

开发过程中遇到使用 BitBucket 的 Git Rebase的问题如何解决?下面主要结合日常开发的经验,给出你关于使用 BitBucket 的 Git Rebase的解决方法建议,希望对你解决使用 BitBucket 的 Git Rebase有所启发或帮助;

我遇到了一个让我大吃一惊的问题。我的分支中有与 master 冲突的代码(在我的情况下是开发)。这不是什么大问题,因为它实际上只有 7 行代码,很容易识别。

BitBucket 很友好地告诉我,为了解决合并冲突,我需要执行以下步骤。

  • git checkout <branch in question>
  • git pull <master>(在我的例子中开发)
    • 修复冲突
    • 此时命令行也提供了此指导
    • "手动解决所有冲突,将它们标记为已解决 "git add/rm <conflicted_files>",然后运行 ​​"git rebase --conTinue"。"
    • 一旦我运行“git rebase --conTinue”,就会出现一个新文档,有机会更改原始提交消息。我只关闭它,合并继续
  • git 提交
    • git 结果转换为“已成功重新定位并更新 <current branch>
  • git push origin head
    • 我希望收到一条成功的消息,说明一切都运行良好且符合预期,但我不断收到此消息:

在分支 <current branch> 您的分支和“<current branch>”有 分歧,分别有 4 和 3 个不同的提交。
使用“git pull”将远程分支合并到你的分支中)

无需提交,工作树干净

好的没问题,让我们运行 git pull... 我们必须重新开始,就好像我从未解决过合并冲突一样。

我正在阅读其他有类似问题的评论,发现有人推送带有 -f 标志(强制)的代码。我尝试过,当然它有效,但是我的 7 行更改变成了多个文件更改。合并冲突消失了,但我担心会因不必要的提交而使主(开发)分支膨胀。

解决方法

TL;DR:你需要 git push --force-with-lease origin HEAD

您遇到此问题是因为您正在使用 rebase。 (Bitbucket 在这里不相关;我剪掉了那个标签。)

rebase 操作的核心是对 Git 的以下形式的命令:

  • 我有一些旧的提交。他们……还行,但还不够好。
  • 删除旧的提交,创建一些新的和改进的替换提交来代替。

完成后,旧的提交消失了(ish1),您现在使用的是新的和改进的替换提交。

当您运行 git push origin HEAD 时,您的 Git 会将您的名称 HEAD 解析为您当前的分支名称(无论该名称是什么),并且就像您运行 git push origin branch 一样。这让你的 Git 在 origin 调用他们的 GIt,发送你的新提交,然后礼貌地询问他们是否愿意,如果可以,设置 他们的 分支名称标识与您的 分支名称标识的相同的最后一次提交。

因为你使用了rebase,这个请将分支名称______(填写名称)设置为_______(填写hash ID)相当于对他们的 Git of形式:扔掉我扔掉的旧提交,使用这些相同的替换提交。但是此时他们不知道您的新替换提交 替换。他们已经完全忘记了他们之前告诉过你的任何事情。他们只看到您要求他们丢弃一些提交。所以他们说不!如果我这样做,我会失去一些提交。

为了克服他们不愿放弃提交的问题,您必须向他们发送更有力的命令,而不是礼貌的请求。你必须告诉他们:是的,我知道这可能会丢弃一些提交。无论如何都要这样做!为此,您必须在 --force 命令中使用 --force-with-leasegit push 选项。

--force-with-lease 选项在某种意义上是“更安全的”:当您使用此选项时,您的命令具有以下形式:我希望您更新 _____(用分支名称填空) )。我相信你最近的提交是_______(用哈希 ID 填空)。如果是这样,扔掉一些提交;使用______(用哈希ID 填空)。 你的Git 填满所有的空,然后发送过来。如果自上次您的 Git 与他们的 Git 对话以来,他们的 Git 还没有累积任何提交,那么您的替换提交就是正确的替换,如果他们遵守这个强有力的命令,那就成功了。

--force 选项跳过安全检查:将 ______(用名称填空)更新为 _____(用哈希 ID 填空)!只要没有人else 在您开始工作后添加了 new 提交,这个强大的命令与更谨慎的 --force-with-lease 实现了相同的结果。

当你使用 git pull 而不是 git push 和一个强制选项时,你会得到他们的最新提交——这是你之前在替换时抛出的那些——并且现在你有同样的问题。无论是使用 fetch-and-rebase pull 还是 fetch-and-merge pull,您都可以通过任何类型的 pull 获得它。 (我个人建议避免 git pull:自己运行 git fetch,然后根据您的意图自己运行 git mergegit rebase。然后当它出错时,你知道哪个命令实际上失败了。当你使用 git pull 为你运行两个 Git 命令,并且某些东西失败时,你甚至可能不知道哪个 Git 命令失败了。但是有些人发现输入一些额外的字符很困难。根据我的答案的长度,您可以看到,我没有这个特殊问题。?)


1Git 对提交非常贪婪,不愿放弃。出于这个原因,并且作为备份以防您改变主意,旧的提交还没有真正消失。默认情况下,在它们真正消失之前至少有 30 天。不过,在 30 天的窗口中恢复它们是有点痛苦的。

大佬总结

以上是大佬教程为你收集整理的使用 BitBucket 的 Git Rebase全部内容,希望文章能够帮你解决使用 BitBucket 的 Git Rebase所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:Git使用