从github pull请求中删除已删除的文件?

时间:2016-08-29 14:48:23

标签: git github

我在本地删除了一些机器生成的文件,但也被跟踪了。在一段时间之前删除之后,我做了多次提交并发出拉取请求。

然而,贡献者希望我从提交中删除该删除部分。

我该如何解决?

大多数时候我都会收到此错误:( git rm,git checkout等)

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

文件已在本地删除。

2 个答案:

答案 0 :(得分:2)

找到删除文件的提交:

git log -n1 -- path/to/file

在删除文件之前从一次提交中恢复文件:

git checkout SHA1~1 -- path/to/file

对要恢复的每个已删除文件重复此操作。

提交,并推送到分支以更新Pull Request(添加一个提交)。

答案 1 :(得分:1)

如果我正确理解了您的问题,您已经创建了一个包含一定数量提交的功能分支,其中一个功能分支删除了一些您应该没有的文件。在这种情况下,执行交互式rebase应该是纠正此问题的可行选项。在交互式rebase中,您可以修改(除其他外)在功能分支历史记录中每次提交时发生的事情。在您的情况下,您可能想要撤消删除某些文件。以下是如何做到这一点:

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

然后保存文件,该文件应该关闭此窗口并且应该启动rebase。当Git到达提交B时,它应该暂停,给你一个改变来改变你的行为。输入git status,您应该会看到删除的文件。要恢复已删除的文件,只需使用:

git checkout HEAD path/to/deleted/file

完成还原已删除文件后,请键入:

git rebase --continue

这应该有效地删除feature分支的删除。这里有一个最后的怪癖,就是因为你重写了feature的历史,你必须通过以下方式强制将它推送到存储库:

git push --force origin feature

现在你的拉取请求已经更新,希望通过审查。