在GitHub上的Pull Request中删除文件

42

我已经在 git 上发起了拉取请求(包括 "xcodeproj/project.pbxproj" 文件 - 是我的错误),那么我可以从创建的拉取请求中删除这个文件吗?谢谢。


1
自2018年7月以来,这可以轻松地从GitHub的Web UI中完成:请参见下面的我的答案 - VonC
7个回答

42

你可能会在主分支上合并这个拉取请求,这样你就可以再次检出特定的文件,在你的分支上,只需键入:

git checkout master -- xcodeproj/project.pbxproj
git commit -m "removing a file from PR"
git push origin {YOUR BRANCH}

4
提交一条消息如何从PR中删除文件? - Doug Kimzey
@dougKimzey,我很确定第一行是说“使用xcodeproj的主版本”。 - Matt Pengelly
需要注意的是第一行没有获取到原始主分支的版本。您可能需要先检出主分支并进行拉取操作。 - pianoman102

27

另一种解决方案是:

  • 使用 Git 的 amendrebase 功能,局部重写 提交记录以删除文件。
  • 强制推送 分支到您的 GitHub 仓库中。

这将通过只显示已刷新的提交记录来更新拉取请求。


这个解决方案更好,因为历史记录是干净的。已删除的文件将不再出现:错误将完全不可见。 - Fabien Quatravaux
18
可以将这个回答更新一下,加入示例命令。 - Marc Durdin
一个例子会很好。Git 可能会非常令人困惑,因为它在描述模棱两可的命令时倾向于使用含糊不清的术语。 - Doug Kimzey

23
  • 删除该文件并提交更改。
  • 转到您的 fork 的 Github 页面,然后再次点击 Pull Request,您将收到一条消息,提示您已经有一个 pull request,可以调整其提交范围。
  • 包括您的新提交(包括删除)。

需要注意的是,有关该问题的文件仍将包含在待合并的更改集中,因此如果它包含敏感数据,则最好关闭 pull request 并首先从您的 fork 存储库中清除该文件。 Github 帮助文档中描述了如何执行此操作。


我更喜欢@nulltoken的解决方案,因为Xion的解决方案会在历史记录中留下错误。这不像你正在纠正一个错误并想要跟踪它。你提交了一个错误的文件,所以它应该从历史记录中删除,即使它不包含敏感数据。 - Fabien Quatravaux
1
我手动删除了文件,现在 git rm 显示路径规范不存在。因此,git rm 不起作用,git status 没有显示任何更改。 - Muhammad Umer
在BitBucket中,我尝试了一种稍微不同的方法。步骤更短。谢谢!
  • 进行提交以删除此文件并推送。
  • 转到您的BitBucket存储库
  • 验证文件已从最新提交中删除
  • 单击“转到拉取请求”。
  • 确认文件已被删除。
- Paul Laguna

5

自2018年7月以来,新方法:

从拉取请求中删除文件

以前,如果你想使用GitHub从拉取请求中删除文件,你需要切换到拉取请求分支并查找要删除的单个文件。

现在,如果你拥有写入权限,你可以在拉取请求的“更改的文件”视图中直接点击文件旁边的“垃圾桶”图标,进行提交并将其删除

警告:正如RCM评论中所确认的那样:

它确实会删除该文件

这并不意味着它会删除你对该文件所做的更改。
在我看来,这种说法相当具有欺骗性。


1
如果在您查看的变更集之前该文件已存在,那么这会删除整个文件还是仅删除发生在该变更集中的文件更改? - Luke Gedeon
据我所知,它删除了整个文件并创建了一个新的提交记录来记录该删除操作。 - VonC
1
是的,我想晚点进来并强调这一点,因为它很重要。因为是的,确切地说,它意味着它将删除该文件。它并不意味着它会删除您对该文件所做的更改。在我看来,它相当具有欺骗性的措辞。除此之外,难道真的没有办法实现OP所要求的吗?当然,您可以还原提交、挑选提交等,但有时针对一个文件会很好。这应该是可能的。 - RCM
@RCM 我同意并已在答案中包含了警告。 - VonC

5
从您的 PR 中删除文件的方法:
git rm path/toFile/youwantRemovedOffyour/PR
git commit -a
git push

从您的PR中删除一个目录的方法:
git rm -r path/toFiles/youwantRemovedOffyour/PR
git commit -a
git push

2

注意:此操作将同时删除本地文件。适用于您推送了一个自动生成的文件的情况。

git rm <path to file>

0

如果你只想删除已经包含在拉取请求中的文件的变更集,目前无法通过Web UI完成。你需要在本地更新文件并执行git push到PR。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接