【问题标题】:Remove a modified file from pull request从拉取请求中删除修改过的文件
【发布时间】:2017-01-20 10:21:30
【问题描述】:

我目前在拉取请求中有 3 个修改过的文件(没有新文件)。

我想从拉取请求中删除其中一个文件,以便拉取请求仅包含对两个文件的更改,并将第三个文件保留为原始未触及状态。

我已经尝试了几件事(检查文件的原始版本等),但它仍然在 PR 中显示为更改的文件。

有解决办法吗?

【问题讨论】:

  • 如果对文件的修改在他们自己的提交中,您可以进行交互式变基并删除影响您想要更改的文件的提交,然后强制推送到你的分支。 Github 应该会自动检测到这一点。

标签: git github version-control


【解决方案1】:

拉取请求就是:将一个分支合并到另一个分支的请求。

您的拉取请求不“包含”任何内容,它只是一个标记,说“请将此分支合并到那个分支中”。

PR 在 Web UI 中显示的一组更改只是目标分支和您的功能分支之间的更改。要修改您的拉取请求,您必须修改您的功能分支,可能需要强制推送到功能分支。

在您的情况下,您可能想要修改您的提交。不确定您的确切情况,但是交互式 rebase 和 add -p 的某种组合应该可以解决您的问题。

【讨论】:

    【解决方案2】:

    您可能想要修改提交,然后执行强制推送,这将使用 PR 更新分支。

    我建议您这样做:

    1. 关闭 PR,这样在您进行更改之前,任何正在审核它的人都不会将其拉入。
    2. 在您不需要的更改之前对提交进行软重置(如果这是最后一次提交,您可以使用 git reset --soft HEAD^ 或者如果它是不同的提交,您可能希望将 'HEAD^' 替换为提交 id)李>
    3. 放弃(或撤消)对文件的任何您不打算更新的更改
    4. 进行新的提交git commit -a -c ORIG_HEAD
    5. 强制推送到您的分支
    6. 重新打开拉取请求

    既然您的分支已经更新,Pull Request 将包含您的更改。

    Here's Gits 文档的链接,他们在 Undo a commit and redo 下有一个很好的示例。

    【讨论】:

    • 第 6 步。重新打开拉取请求是我使用 bitbucket 时遇到的问题。我可以看到一些我实际上已经删除的更改。重新打开拉取请求解决了这个问题。
    【解决方案3】:

    切换到您创建拉取请求的分支:

    $ git checkout pull-request-branch
    

    用另一个分支中的文件覆盖修改过的文件,让我们认为它是ma​​ster

    git checkout origin/master -- src/main/java/HelloWorld.java
    

    提交并推送到远程:

    git commit -m "Removed a modified file from pull request"
    git push origin pull-request-branch
    

    【讨论】:

    • Not Working 向我显示错误:pathspec '{file/path.js}' 与 git 已知的任何文件都不匹配。
    • 这是行之有效的解决方案,只需正确检查您的路径
    • 这适用于我实际上想要执行操作的文件周围的文件......所以我不认为它的路径有问题
    • 如果遇到错误的人:pathspec '{file/path.js}' 与 git 已知的任何文件都不匹配。尝试重置 origin/master 分支中不存在的文件时,我得到了它
    • @ArpitAggarwal 这工作正常。非常感谢。
    【解决方案4】:

    从拉取请求中删除文件,而不是从本地存储库中删除。

    1. 使用以下命令转到创建请求的分支

    git checkout -- c:\temp..... 下一个 git checkout origin/master -- c:\temp... 用任何其他分支替换 origin/master。 下一个 git commit -m c:\temp..... 下一个 git 推送来源

    注意:文件路径没有单引号或双引号

    【讨论】:

      【解决方案5】:

      切换到您从中创建拉取请求的功能分支:

      示例:$ git checkout pull-request-branch

      用另一个分支中的文件覆盖修改过的文件:

      $git checkout origin/master -- src/main/java/HelloWorld.java
      

      提交并推送到远程:

      $git commit -m "removed a modified file from PR"
      $git push
      

      【讨论】:

        【解决方案6】:

        切换到要还原文件的分支。

        这是它的命令。

        只需选择要恢复文件的远程和分支

        git checkout <remote>/<branch> -- <file_path_from_project_root_folder>.
        

        在我的情况下,它是

        git checkout origin/master -- .github/workflows/ci.yml
        

        【讨论】:

          【解决方案7】:

          对于刚接触 git 或使用 Azure DevOps 的人来说,这是一种简单的方法。

          如果文件更改很简单并且 PR 仍然打开,只需转到您的分支,将文件修改回原来的方式,然后提交并推送您的更改。你的 PR 应该被更新,如果它与目标分支完全匹配,文件将会消失。

          如果是复杂的更改,请执行相同的操作,但您可能需要查看文件历史记录,复制以前的版本(在 Windows 上为 Ctrl-A),覆盖 dev 分支上的版本,然后提交并推送。

          【讨论】:

            【解决方案8】:

            例如,您想从 branch1 为文件 file1、file2 和 file3 创建 PR。 现在你想从 PR 中删除 file3。

            1. 签出创建 PR 的分支。 git checkout 分支1

            2. 检查提交历史 混帐日志 它将为您提供以下详细信息

              提交 (origin/branch1, branch1) 作者:abc 日期:2021 年 11 月 2 日星期二 16:47:03 +0530

              commit (origin/branch1, branch1) 作者:abc1 日期:2021 年 11 月 1 日星期二 16:47:03 +0530

            3. 查找在您的更改之前所做的提交的提交 ID,并使用该提交 ID 签出 file3 git checkout C:\Code\project\file3.java

            4. 然后执行 git commit 混帐添加文件3.java git commit -m "从 PR 中删除 file3" git推送

            5. 检查你的 PR,file3 现在应该被删除。

            【讨论】:

              猜你喜欢
              • 2017-04-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-05-05
              • 2019-08-03
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多