The most basic approach to this is to do what I do: when building template pages I precede them with "template_".
Thus if you desired a team.php template for a page you would look for template_team.php.
Additionally, you have code on your page you don't actually need.
I would change your code to simply be:
$wp_query = new WP_Query();
while ( $wp_query->have_posts() ) : $wp_query->the_post();
<article class="post team" id="post-<?php the_ID(); ?>">
<h2><?php the_title(); ?></h2>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
And the reason I would make the changes is because you are not actually using $temp so there is no reason to assign it. Additionally you don't have any reference to a wp_query when the page loads and even if you did you don't use it anywhere in the page.
You instantiate a whole new query (using the NEW keyword) and, so far as the page is concerned, that is the only query you have on the page at all. Thus, that is the only query you need to reset.
What is actually happening is you click on a link and that directs you to the page "teams". This loads the "template_teams.php" and does have all the variables assigned to $post for that page as soon as the page loads. Within $post is the actual content of the page you have created in the WordPress text editor and assigned the template to.
Now, if you need a different query on top of the default one loaded with the page you could easily change your variable of $wp_query to something more relevent to what you want:
$custom_query_1 = new WP_Query();
Then you would be able to use the default query AND your custom query anywhere in the page at any time. Using the clean up function wp_reset_query() is ideal to use after each loop BUT is clears all queries.
To avoid this from clearing any custom queries you may have simply place the new query only where you need it.