Some excellent points all through this thread, I’d add a couple more; most of the Generals in the Civil War had gotten their experience in leading troops during the Mexican-American war in 1846-48. But the forces they led (usually as junior officers) were small (usually only a few thousand men in the major battles) and learning how to organize, train, provision (never ever forget logistics), lead and maneuver over 30,000 troops before and during a battle was something never before attempted by US forces (IIRC, the largest numbers Washington commanded was about 20,000 at the Battle of New York–and he got whipped). So the South getting more of the ‘experieced’ officers gave them an early lead in this effort; but McClellan and Halleck, despite their lack of Generalship in the field for the North, did do an invaluable service in organizing and maintaining the Armies that would eventually, under the leadership of Grant, Sherman, and others, win the war.
One more note on Cold Harbor; Grant’s initial maneuvers had gotten him to the place before Lee, but delays (with the Army of the Potomac there were always delays) meant the attack didn’t go when it should have, and gave lee 2 days to get ready–and his army by then (1864) knew how to throw up fieldworks fast. Grant should have called off the attack, but a combination of frustration and a gambler’s instinct (and having seen troops rout Confederates from and even tougher position–Missionary Ridge–might have given him more confidence than he should have) led him to try, with the result being a bloody repulse.
And Lincoln did replace Generals, especially in the east; but he also backed Generals who would fight to win, such as Grant after Shiloh.