在某些时候,我必须编辑一个与我正在处理的分支(问题)无关的文件。我不小心把它推到Github并在我创建一个Pull Request时看到了它。
我想从我的分支中删除该文件,但不是从项目中删除 - 即:我只是不能删除该文件并将其作为提交推送。
我试过了:
git reset HEAD^ path/file.ext
但没有运气(没有发生任何事情 - 没有错误,文件也没有恢复)。
有人知道正确的解决方法吗?
答案 0 :(得分:3)
从听起来,您基本上想要删除合并请求中文件的所有更改。要做的第一件事就是检查文件的干净副本并将其添加到您的分支。
git checkout master -- <the file>
现在提交这些更改并将新提交推送到您的远程。应该更新pull请求以不再对此文件进行更改。
如果您是唯一使用该分支的人,您可以重新提交您的提交,以便最近的提交不再在您的历史记录中(但它确实不是一件大事)。为此,你会git rebase -i master
,选择&#34;壁球&#34;提交。要更新pull请求中的提交,您需要执行git push -f <your branch>
。这样新的提交就会覆盖旧的提交。此步骤完全是可选的。
答案 1 :(得分:1)
这个单独的文件有多少次提交?最简单的方法是从master重新编译并编辑这些提交,如下所示:
git rebase -i master
# find the relevant commits and use `edit` instead of `pick`
git reset --soft HEAD~1 -- file # makes the changed file staged to be commit (but we don't want that)
git checkout -- file # revert the changes staged again in the previous command
git commit --amend
git rebase --continue
git push --force origin <your-branch-name>
您现在应该拥有干净的提交历史记录,而不会对特定文件进行任何更改。
答案 2 :(得分:0)
如果它不是敏感文件,您可以删除它并推送新提交。
git rm that_file
git commit
git push
该文件仍将保留在历史记录中,但不会出现在最终合并中。
如果它是敏感文件,就像它有密码或个人信息一样。或者,如果您只想提供更清晰的历史记录,则可以使用git rebase -i master
(或您从中分支的任何分支)将其从历史记录中删除。这将使您有机会重写意外包含该文件的提交。重写提交,并git push --force
发送新版本的分支历史记录。