【问题标题】:What happens if I rebase after pushing?如果我在 push 后 rebase 会发生什么?
【发布时间】:2016-08-23 10:35:29
【问题描述】:

我总是听说这是一件很可怕的事情,而且是我永远不应该做的事情。例如,以下是 SourceTree 中拉取对话框的外观:

所以我很好奇,如果我推送更改,然后重新设置基础并再次推送它们,会发生什么以及会有多糟糕?如果我以这种方式破坏它,如何修复存储库?

【问题讨论】:

  • 好消息是没有丢失任何东西。您实际上只需创建一个与现有分支有很多重复的新分支,并且对于最近从存储库中提取的任何人来说都是不必要的麻烦。
  • 对一个提交进行变基会产生另一个与原始提交内容相同但 ID 不同的提交。鉴于原始提交被推送并且您强制推送新提交,已经拉取原始提交的其他开发人员现在将具有重复提交(文件中的相同更改但不同的 ID)。这会导致混乱。

标签: git rebase


【解决方案1】:

什么都不会发生,但你的下一个推送将不会被接受。

除非你强行推动。 这也不会破坏远程存储库,所以也没有那么糟糕。

当你有更多的人使用这个 repo 时,事情就会变糟。 重写历史可能会给从远程获取新更改的其他人造成一些混乱。特别是如果他们对 git 没有很好的了解。 根据本地存储库的状态,拉动重写的远程分支的人可能会发生不同的事情。

因此,如果有人在功能 X 上工作,而您更改了他所做更改所基于的代码,那么他可能至少会生气到彻头彻尾的愤怒,具体取决于您使他的工作过时多少。

【讨论】:

  • 好消息是,其他人仍然可以将他的更改基于他所看到的分支(在他们的本地 repo 中不会丢失任何内容),甚至可以将其推回。有一点,必须有人将事物合并在一起(这可能应该是强行推动的人)。
  • @Thilo 是的,但您仍然需要团队中至少有 1 人知道如何进行 GIT。否则我可以想象责怪 GIT 吃掉代码、破坏项目、世界饥饿等等。
  • 是的,让某人(我想说每个人)了解 git 的工作原理会有所帮助 :-) 对于那些不了解的人,请远离 --force 并注意盒子上的警告。
  • 顺便说一句,我对提交消息进行了粗略的处理。我们的 CM 人员喜欢我们将相关的 Jira 问题包含在提交消息中,而我对此很不满意。这个方便的tutorial on amending older commit messages 告诉您改写以修改提交消息,然后强制推送您的更改。我只是注意到,把事情搞砸的人很容易把事情搞砸。
【解决方案2】:

在您在 SourceTree 中列出的场景中,SourceTree 将尚未推送的本地提交重新设置在您从远程提取的更改之上。

如果您在使用 THAT 选项之前已经推送了更改,那么这些更改将不会被重新定位,因为它们已经在远程中。

唯一的例外可能是,如果您有多个遥控器,并且已将更改推送到一个遥控器,然后从另一个遥控器执行 pull/rebase - 这可能会导致严重问题。

在 pull 期间是否应该 rebase 是一个争论的话题。我不推荐它,但它通常是安全的。 https://developer.atlassian.com/blog/2014/12/pull-request-merge-strategies-the-great-debate/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-10
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多