从GitHub拉取请求中删除已删除的文件?

4

我曾经删除了一些机器生成的、同时也被跟踪的文件。几天前,我进行了多次提交并发起了一个拉取请求。

然而,贡献者希望我从提交记录中移除那些被删除的部分。

我该怎么做呢?

大多数情况下,我会遇到这个错误:(git rm, git checkout 等命令)

error: pathspec 'filepath' did not match any file(s) known to git.

这个文件已经在本地被删除了。

2个回答

4

找到你删除文件的提交记录:

git log -n1 -- path/to/file

从删除该文件的上一个提交中恢复该文件:
git checkout SHA1~1 -- path/to/file

对于每个想要恢复的已删除文件,重复此步骤。

提交并推送到分支以更新拉取请求(添加一个提交)。


1

如果我正确理解了你的问题,你创建了一个包含一些提交的功能分支,在其中的一个提交中删除了一些不应该删除的文件。在这种情况下,进行交互式变基应该是纠正此问题的可行选项。在交互式变基中,您可以修改(以及其他事情)功能分支历史记录中每个提交发生的情况。在你的情况下,你想撤销某些文件的删除。以下是如何做到这一点:

git checkout feature
git rebase -i HEAD~4    # replace 4 with however far back is the commit
                        # containing the deletions

这将打开一个窗口,显示最近五次提交到feature分支的记录:

pick 07c5abd message for commit A
pick dl398cn message for commit B
pick 93nmcdu message for commit C
pick lst28e4 message for commit D
pick 398nmol message for commit E

在这里,显示的第一个提交是最的,而最后一个是最新的。您会注意到默认选项是pick。找到您意外删除文件的提交(比如提交B),并将pick替换为edit,留下以下内容:
pick 07c5abd message for commit A
edit dl398cn message for commit B
pick 93nmcdu message for commit C
pick lst28e4 message for commit D
pick 398nmol message for commit E

然后保存文件,这应该会关闭此窗口并开始重新设置基础。当Git到达提交B时,它应该暂停,让您有机会更改所做的内容。键入git status,您应该看到已删除的文件。要恢复已删除的文件,只需使用:

git checkout HEAD path/to/deleted/file

当您完成恢复已删除的文件时,请键入:
git rebase --continue

这将有效地从您的feature分支中删除删除。 这里还有一个最后的小问题,即由于您重写了feature的历史记录,因此必须通过强制推送到存储库来进行:
git push --force origin feature

现在您的拉取请求已更新,希望能够通过审查。

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