Hi,
This is a rather interesting question. I think the simplest thing to do is the following:
You have properly constructed the connection cd, as a CCovD object. This object has the structure CCovD[PDch, christoffel, metric], where christoffel is a rank 3 CTensor object and metric is a rank 2 CTensor object. We store the metric to indicate that this connection actually derives from a metric.
Now you want to have another connection that uses the same ordinary derivative PDch but a different Christoffel, and I assume it will not derive from a metric in general. Then what you need to do is to set
cd1 = CCovD[PDch, newchristoffel, Null]
where the newchristoffel is again a rank 3 CTensor object, and Null means that this connection does not derive from a metric. You can use standard methods of computation with CTensor objects to construct the new Christoffel tensor.
Note that we don't need to go through a DefCovD[cd1[-a]] command. This command is needed when we will be using an abstract connection cd1. In your problem what you need is a concrete (given by components) connection, i.e. a CCovD object. It's exactly the same reason why you have a metric g but didn't need to evaluate a DefMetric command.
Cheers,
Jose.