I am going to take a shot at answering this because I feel it can be better clarified. As mentioned above, a deeper understanding of the CSS language is needed, specifically a deeper understanding of CSS selectors, and how they work.
CSS implements the code you write with in your style-sheet according to order, what was write first is computed first, what was written last is computed last, therefore; if you write:
.some-txt{
    color: red;
}
.some-txt{
    color: blue;
}
.some-txt{
    color: razzle-dazzle-purple;
}
then the text with class some-txt is going to be the color, 'razzle-dazzle-puple'.
This is becuase  razzle-dazzle-puple was the last color in the order of assignment given. In your code you gave the color brown to a after red, canceling your previous assignment. To fix this you either be more specific with your selectors like so:
.brand a:hover {
     color: red;
}
or just simply try moving things around, I tested your code and I think what you were looking for is this:
        a {
            color: green;
            text-decoration: none;
        }
        a {
            color: green;
            text-decoration: none;
        }
        .brand a {
            color: brown;
        } 
        a:hover {
            color: red;
        }
remember when you add hover to a property, you are adding it to the property, so when you change that property, after you already assigned it a value, you are change the whole property. I hope this makes sense, some things are hard to explain, obviously the best way to understand something is by playing with it.