我曾经删除了一些机器生成的、同时也被跟踪的文件。几天前,我进行了多次提交并发起了一个拉取请求。
然而,贡献者希望我从提交记录中移除那些被删除的部分。
我该怎么做呢?
大多数情况下,我会遇到这个错误:(git rm, git checkout 等命令)
error: pathspec 'filepath' did not match any file(s) known to git.
这个文件已经在本地被删除了。
找到你删除文件的提交记录:
git log -n1 -- path/to/file
git checkout SHA1~1 -- path/to/file
对于每个想要恢复的已删除文件,重复此步骤。
提交并推送到分支以更新拉取请求(添加一个提交)。
如果我正确理解了你的问题,你创建了一个包含一些提交的功能分支,在其中的一个提交中删除了一些不应该删除的文件。在这种情况下,进行交互式变基应该是纠正此问题的可行选项。在交互式变基中,您可以修改(以及其他事情)功能分支历史记录中每个提交发生的情况。在你的情况下,你想撤销某些文件的删除。以下是如何做到这一点:
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