【问题标题】:What happens if you force push to a branch with an existing pull request?如果您使用现有的拉取请求强制推送到分支会发生什么?
【发布时间】:2015-09-02 07:06:39
【问题描述】:

我正在开发一个 git 分支,该分支当前是 github 上关闭的拉取请求的一部分。在最初的拉取请求之后,我做了一些额外的提交,将这些提交推送到 github,然后恢复这些提交并重新提交它们,因为我需要修改这些提交。

现在,如果我想将这些提交推送到 github,我需要发出强制推送:git push --force。但我有强烈的感觉,这可能会导致现有拉取请求的混乱,即使更改的提交发生在我提出拉取请求之前存在的提交之后。

谁能向我描述如何最好地处理这种情况?我想我可能只需要创建一个全新的分支,然后在该分支上发出拉取请求。但是,如果有办法将此链接到现有的拉取请求,那就更好了。

【问题讨论】:

    标签: git github pull-request


    【解决方案1】:

    如果我没记错的话,那么如果你以任何方式强制推送或更新有问题的分支,GitHub 将自动更新拉取请求。如果进行强制推送会导致无法执行拉取请求,那么 GitHub 会告诉您这一点。

    您无需担心更新拉取请求,因为 GitHub 会为您处理。

    话虽如此,在any 远程分支上执行git push --force 可能会 给目前也在该分支上工作的同事造成混乱。所以你回避强制推送是正确的,但幸运的是 GitHub 拉取请求不是你最大的问题。

    【讨论】:

    • 所以,为了明确一点,您所说的是这里的危险与拉取请求无关,而是与其他人可能在此分支上工作的可能性有关?
    • 这是我的感觉。 GitHub 拉取请求实际上并不“存在”在 Git 中,它只是一个潜在的操作(合并),如果有人点击绿色按钮,可能会发生(如果 GitHub 无法进行合并,该按钮将不可点击)。另一方面,如果你通过强制推送来重写远程分支的历史,那么任何拉动的人都会得到一个丑陋的惊喜。
    • 对于这样的用户,假设他们刚刚在他们自己的机器上查看/测试了我在那里所做的工作,如果他们要在本地删除分支然后重新拉取它,那就解决了东西,对吧?
    • @fraxture 是的,应该没问题。但请告诉他们你在做什么,这样就不会感到意外了。
    • 当您强制推送更新的分支时,您可能无意中删除的任何提交都不应再出现在该分支下,因为它们不再与该分支关联。保持原样的提交也应该保留相同的 cmets。
    【解决方案2】:

    在常规但已关闭 GitHub PR 上使用git push --force 后,今天我无法再重新打开它,因为该按钮已禁用,并显示以下消息:

    patch-1 分支被强制推送或重新创建。

    但是,根据 isaacs/github#361(特别是 this),这似乎只发生在已关闭的 PR 上。

    【讨论】:

    • 我能够通过在关闭状态下强制推动分支来回到 PR 可以重新打开的状态。为了到达那里,我使用git refloggit reflog --date=iso 查找关闭前最后一次提交的SHA1,然后使用语法git push origin <SHA1>:<branch_name_on_origin> --force 其中origin 是我的github 存储库的主repo 的fork(我关闭了主repo 上的拉取请求回购)。 [根据我对 github 问题的评论]
    【解决方案3】:

    推送到具有现有拉取请求的分支将更新拉取请求,提交是否在拉取请求之后完成并不重要。

    如果您不想更改拉取请求,您应该创建一个 new 分支并进行处理。

    【讨论】:

      【解决方案4】:

      拉取请求的内容将是为拉取请求发送的分支中的任何内容。因此,当您git push --force 时,PR 将在您刚刚推送到的分支中反映您修改过的提交历史记录。

      【讨论】:

        猜你喜欢
        • 2022-08-17
        • 2022-01-02
        • 2021-10-01
        • 2018-10-12
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 2021-07-11
        • 2012-10-07
        相关资源
        最近更新 更多