You can use tools for semantic similarity computations to reduce redundancy of GO terms associated with your genes of interest. This can be done using following approaches.
Approach 1: Use a semantic similarity algorithm (See this review if you are new to the concepts and section on slimmer tools provided by GO team), compute the similarities and retain codes with optimal diversity. GO terms are defined using a di-acyclic graph data structure, a semantic similarity measure (ranges between 0-1; higher the better) can be obtained between GO terms of two genes. Several R packages are available (See GOSemSim or GOSim). You may need to compute all possible combinations and this could be exhaustive depend on the number of annotations available for your gene(s) or use clustering approach as in REViGO or use any standard data mining algorithms that fits redundancy criteria you need to reduce the terms.
Approach 2: Use a pre-curated "lite" version of ontology (GO-Lite). This is a reduced representation of GO terms semi-automatically curated by GO team. Using the lite version instead of full version can help you to find more specific terms.
Some times removing redundant terms genes will lead to just a global overview of processes, functions or compartments associated with your gene(s) (IMHO, GO terms are not redundant - they are highly specific terms :)).You may use appropriate approach after evaluating your need.