如何从我没有修改的拉取请求中删除文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从我没有修改的拉取请求中删除文件相关的知识,希望对你有一定的参考价值。

我不确定我是如何陷入这种情况的,但是我要向Github中的repo提交一个pull-request,但我发现pull-request包含了一堆其他提交(15)到另一个与分支无关的文件。

我要保留的文件名为tuition_benefit.json,我不想要的文件名为employees.json。如何从我的分支中删除所有与employees.json相关的提交,以便在pull请求中不考虑它们?

当我创建新分支(employees.json)来创建这个新文件employees而不是benefits-query时,我认为我一定是在与tuition_benefit.json文件(master)相关的分支上。

我只在这个新分支上做了3次提交,而在pull请求中指定的其他15个都与另一个文件相关,我从未在这个分支上修改过。

答案

但是我发现pull-request包括一堆其他提交(15)到另一个与分支无关的文件。

这可能表明你在其他分支上打开了分支,或者你有一个本地修改的master分支并从中分支。

无论哪种方式,您的存储库都是这样的。

A - B - C [origin/master]
         
          D - E - F [others]
                   
                    G - H - I [yours]

你可以用git log --decorate --graph看到这个。

origin/mastermaster分支,因为它看起来在上游。 yours是您要提交的分支机构。 others代表你从yours分支的东西;这可能是你当地修改的master或另一个分支。只有提交G - H - I与您的PR相关。

你想要的是你的工作从origin/master这样分支。

          G - H - I [yours]
         /
A - B - C [origin/master]
         
          D - E - F [others]

您可以使用rebase来重现G - H - I上的origin/master。但一个简单的git rebase origin/master不会这样做。如果你这样做,Git将取代yoursorigin/master之间的所有内容,包括来自D - E - Fothers完成任何事情。你需要告诉它忽略D - E - F。你用git rebase --onto <from> <to>做到这一点。

git rebase --onto origin/master others yours

这将采取所有提交开始(但不包括)others和最多(包括)yours并将其重写到origin/master。那是G - H - I。然后你会有这个。

          G1 - H1 - I1 [yours]
         /
A - B - C [origin/master]
         
          D - E - F [others]

请注意,它是G1 - H1 - I1。这是因为rebase不会重写历史,它会创造新的历史。这些都是新的提交。当你尝试git push它将被拒绝,因为这不是yours的简单更新。你必须git push --force

总共...

  • git fetch(获得最新的origin/master)。
  • git checkout yours
  • 检查git log --decorate --graph以确定您的工作开始的地方。
  • git rebase --onto origin/master <last commit that's not yours> yours
  • 测试。
  • git push --force

以上是关于如何从我没有修改的拉取请求中删除文件的主要内容,如果未能解决你的问题,请参考以下文章

我们如何捕获在bitbucket云中创建的拉取请求

恢复了来自 github 的拉取请求,但两个分支没有区别

如何从 GIT 恢复旧的拉取请求

GitHub:重新打开合并的拉取请求

多分支管道作业未显示打开的拉取请求

如何在 Azure DevOps 的拉取请求中显示构建状态