a unit production
Think of a contact in your phone whose only entry is 'see other contact', which itself just says 'see yet another contact'. Following these gets you nowhere until you finally hit a real phone number. A unit production is a grammar rule that does nothing but pass you along to another single variable, with no useful content of its own.
Formally, a unit production is a rule of the form A -> B, where both A and B are variables (nonterminals) — one variable rewriting to exactly one other variable, nothing more. In a derivation this just renames the current variable: A => B, and you still have work to do. For example, in E -> T, T -> F, F -> a, deriving 'a' from E forces you through E => T => F => a, where the first two steps are unit productions that accomplish nothing except threading you to F. Such chains often arise naturally from grammars that encode precedence levels (expression, term, factor) but they are pure overhead for a machine.
Unit productions are harmless for defining a language but they clutter parse trees with redundant single-child nodes and they are forbidden in Chomsky normal form. So a cleanup step removes them: wherever A can reach B through a chain of unit productions, you copy B's non-unit rules directly onto A and then delete the unit rules. This is normally done after epsilon-removal, because removing epsilon-productions can create fresh unit productions.
E -> T | E+T, T -> F | T*F, F -> a | (E): the rules E -> T and T -> F are unit productions. To remove E -> T you copy T's non-unit rule T*F onto E, giving E -> E+T | T*F | F, and so on, flattening the precedence chain.
A unit production A -> B is a no-content rename; cleanup copies B's real rules onto A.
A rule like A -> a (a single terminal) is NOT a unit production — both sides must be variables. A -> a is fine and is in fact one of the two allowed shapes in Chomsky normal form.