A remote is a configured repository destination, usually associated with a name such as origin. That name is conventional, not privileged. Git can communicate over several transports; these labs use only another directory containing a bare repository. A bare repository stores history and references without a normal checked-out working tree. It lets you practice publishing and collaboration entirely offline.
Keep the three references separate
Your local main, your local remote-tracking reference origin/main, and main in the remote repository are distinct references. git fetch origin obtains objects and updates remote-tracking information according to the configured refspec. It does not automatically merge into your current branch. origin/main reflects your last relevant observation, not a live subscription to the server. Inspect git remote -v and git branch -vv when a command's destination or tracking relationship is unclear.
git pull combines fetching with an integration choice. With --ff-only, integration succeeds only when your branch can fast-forward; divergence causes a refusal rather than silently selecting merge or rebase. A refusal is information to inspect, not a reason to force an unrelated operation. Decide whether to merge, rebase an unpublished topic, or coordinate another approach.
Publish the branch you mean
git push -u origin feature/report asks origin to update the same-named branch and records an upstream for your local branch after a successful update. An explicit refspec has the form source:destination. HEAD:main targets remote main regardless of your topic branch's name. Review that destination before publishing; a successfully executed command can still change the wrong reference.
git remote -v
git branch -vv
git push -u origin feature/report
git branch -vvUnderstand a rejected update
A normal push protects branch history by refusing a non-fast-forward update. Fetch and inspect the graph to understand the missing work. For an intentionally rewritten, coordinated branch, force-with-lease can check an expected remote reference value before replacing it; an explicit expected value is more precise than assuming your remote-tracking ref has not changed in the background. A lease is a reference-value check, not permission to overwrite teammates' work. The course lab needs no forced update.
Hosting-service pull requests add a review workflow around Git branches; they are not Git objects and do not replace the local graph model. Credentials, network reachability, protected-branch rules and review requirements are additional deployment concerns. In this lab, focus on the observable contract: a published topic branch, the correct upstream, and unchanged main branches even when the remote has a newer main.