Originally Posted by braver
But. I have to reassign contexts to "Today." If I don't do them today, I have to move them back.
You have just answered your own question in those two sentences. A "today" context or tag isn't used in GTD because it has to be revised too often, either because we tend to put more stuff on the "today" list than we can realistically do in a day, or because something else might come up over the course of the day that is higher priority.
A key GTD principle is that only things that must be done on a certain day are assigned to that day, and those things go in your calendar. Everything else is kept in a list by context. Any outcome that requires more than one step to do is a project and goes on a list of projects. When choosing what to do next, one should decide based on context, available time, priority, and energy level.
Of course GTD is not a cult and can accommodate flexibility. I generally use flags to indicate tasks or projects that I think I should be working on today or in the next few days. Part of my daily review is taking a look at what I have flagged and adding or removing flags as my priorities shift. Leo Babauta of the Zen Habits blog promotes keeping a list of three Most Important Tasks for the day, on the grounds that if you identify those and do them, you'll be productive and have a sense of accomplishment.
Much of the time, though, I rely on frequent reviews--scanning over my projects at the beginning of the day to decide what's most important, and then scanning my context lists frequently to decide what to do next. I'll use the focus command and show only next actions if I really need to shrink my list.