Cenk Uygur of the Huffington Post wrote a very good post titled ""Screw the Moderate Republicans".
So, here is my solution. Pass a real withdrawal bill (giving our troops the money to come home in 12 months sounds about right), then let the Republicans block it with a filibuster. Beat the living crap out of them politically. Pass the same bill, let them block it again. Repeat and repeat and repeat, until they cry uncle.
They would also take a pounding on their credibility. John Warner claims he wants withdrawal, but if he doesn't vote that way, then is he really an honest broker? Whatever you do, don't give them political cover to pretend they voted for withdrawal while voting to let the president have complete discretion.
The way the Democrats have handled this so far, it seems that they are responsible for getting us out of Iraq. But in reality, it is the Senate Republicans who are responsible because they are blocking real action on withdrawal. Why not highlight this? Why would you take responsibility for Republican failure?
This is Politics 101. Why would you let your opponent have political cover and take heat from your own constituents for caving in? Why not instead pass a real bill and put tremendous pressure on your opponents to come around to your position?