There are several ways you could do this, though which is best depends on your needs. I would, personally, add the player health to a resource and set it as a singleton. It would look something like this:
~~GlobalVariables.gd~~
static var player_health: int = 100
~~MainScene.gd~~
var player_hp: int = GlobalVariables.player_health
And then doing the same thing in your BattleScene.gd. As long as you reference the GlobalVariables list with any/all changes you make, it should update correctly. Just note that, once the value is updated, you have to manually change it back again (if adding/removing more health or restarting the scene upon death).
There is, somewhat. When you have singletons/autoloads, they can also call functions. So, if you want to say, subtract 10 health from the player_health in GlobalVariables, you could do:
~~GlobalVariables.gd~~
static var player_health: int = 100
static func change_health(value: int) -> void:
player_health += value
Where (value) is passed to it from the other scenes:
~~MainScene.gd~~
var player_hp: int = GlobalVariables.player_health
func make_player_hurt() -> void:
GlobalVariables.change_health(-10) #-1 here is passed to the GlobalVariables function and replaces 'value' with '-10'