This way you don't surprise your teammates too badly if you need to deprecate some code that you're assigned to but which they need to make calls to. But allows you to make those needed changes!
I usually mark that obsolete:
/// <summary>
/// Purpose of this method
/// </summary>
/// <param name="args">Argument 1</param>
[Obsolete("This method is obsolete, use NewMethod instead")]
public void SampleMethod(string args)
{
//code
}
/// <summary>
/// Purpose of this method
/// </summary>
/// <param name="args">Argument 1</param>
public void NewMethod(string args)
{
//code
}
Now the compiler will provide a warning whenever the method marked as Obsolete is used.
Definitely delete unused code. In my experience the biggest problems with legacy codebases is understanding whats going on code - less code means less to understand, making your job easier.
Like you say you can always get it back if you are using source control (you are using source control, right?) and unless you are doing anything a little odd (like dynamically compiling code or loading code through reflection), you are probably going to find out pretty quickly if you deleted the wrong code as your build will fail.