Working with GitHub: Accounts, Plans, the GitHub Flow, Markdown, Desktop and Mobile (GitHub Foundations GH-900)
Working with GitHub means knowing which kind of account owns your work (a personal account, an organization or an enterprise), which plan unlocks which features, how a change moves through the GitHub flow from branch to merged pull request, how to write clear issues and pull requests in Markdown, and when GitHub Desktop or GitHub Mobile is the right tool. This lesson covers each of those skills from the GitHub Foundations (GH-900) exam guide, with the distinctions that matter when two options both sound reasonable: Pro versus Team, Enterprise Cloud versus Enterprise Server, a draft pull request versus a ready one, a #reference versus an @mention, and Desktop versus Mobile.
On this page10 sections
- GitHub account types: personal, organization and enterprise
- One personal account per person, and what organization membership means
- GitHub plans: Free and Pro for people, Free, Team and Enterprise for organizations
- GitHub Enterprise options: Enterprise Cloud, data residency and Enterprise Server
- The GitHub flow, step by step
- Branch practice, draft pull requests, and undoing a merged change
- Markdown basics for issues and pull requests
- References and @mentions: linking issues and notifying people
- Advanced formatting: alerts, collapsed sections, diagrams, footnotes and hidden comments
- GitHub Desktop vs GitHub Mobile (and when neither fits)
- Describe personal, organization and enterprise accounts, who owns repositories in each, and why each person keeps one personal account
- Choose between GitHub Free, Pro, Team and Enterprise based on who owns the repository and what features are needed
- Compare GitHub Enterprise Cloud, Enterprise Cloud with data residency and Enterprise Server
- Explain each step of the GitHub flow, including draft pull requests, follow-up commits, deleting branches and reverting a merged pull request
- Use GitHub Markdown in issues and pull requests: code blocks, task lists, relative links, references, mentions, alerts, collapsed sections, diagrams and comments
- Recognise when to use GitHub Desktop, GitHub Mobile or another tool such as GitHub CLI
GitHub account types: personal, organization and enterprise
GitHub has three types of account. A personal account (also called a user account) is the identity a person signs in with; an organization account is a shared account that owns repositories for a group; and an enterprise account sits above organizations so one company can manage policy and billing for many of them in one place.
| Account type | What it is | Can you sign in to it? | Typical owner of |
|---|---|---|---|
| Personal (user) account | Your identity on GitHub. Every action, commit attribution and comment comes from a personal account. | Yes, with your own username and credentials | Your own repositories, packages and projects |
| Organization account | A shared account where many people collaborate across many projects. Owners group members into teams and grant access per repository. | No. Members act through their own personal accounts | Public and private repositories that belong to the group, not to any one member |
| Enterprise account | Available with GitHub Enterprise Cloud and GitHub Enterprise Server. Owns several organizations and centrally manages their policies and billing. | No. Enterprise owners are personal accounts with an enterprise role | Organizations |
The key consequence of an organization is ownership that does not depend on one person. If a group's repositories live in one member's personal account, that person controls them and can leave with them; other people can only be added as collaborators to individual repositories. Moving the work into an organization means the organization owns it, several people can be owners, and access is managed through teams.
Nobody shares a login on GitHub. A shared "team login" or a shared machine user for people to work through defeats per-person accountability; machine users exist for automation, not for humans.
One personal account per person, and what organization membership means
GitHub recommends that each person keeps one personal account for everything they do on GitHub, open source and paid work alike, and it provides a way to merge extra personal accounts. Access to an employer's code comes from being added to the employer's organization, not from a separate work account.
This works because membership is something that can be granted and removed without touching the account itself:
- Joining an employer: an organization owner invites your existing personal account; once you accept, you get access to whatever repositories your teams and roles allow.
- Leaving an employer: an organization owner removes you. Your personal account, its repositories and your public contribution history stay as they are. You lose access to the organization's private repositories, and your private forks of those private repositories are removed too. Commits you already made stay in the organization's history.
- Next job: the same personal account joins the new employer's organization.
Because access lives in membership, one personal account can belong to several organizations at once, and changing employers never needs a new account.
The exception: managed user accounts. Some enterprises use Enterprise Managed Users, where the company's identity provider creates and controls the accounts its people use for company work. Those accounts are separate from a person's own personal account by design. How they are configured belongs to the security and administration domain; for this topic, remember that the "one personal account" recommendation applies to ordinary organizations.
GitHub plans: Free and Pro for people, Free, Team and Enterprise for organizations
GitHub's plans split by account type: a personal account chooses between GitHub Free and GitHub Pro, while an organization chooses between GitHub Free for organizations, GitHub Team and GitHub Enterprise. The free plans give the full feature set on public repositories; the paid plans mostly add advanced tools for private repositories, and Enterprise adds identity, governance and deployment options.
| Plan | For | What it adds |
|---|---|---|
| GitHub Free | Personal accounts | Unlimited public repositories with the full feature set; unlimited private repositories with a limited feature set |
| GitHub Pro | Personal accounts | Advanced tools for the person's private repositories: protected branches, required and multiple reviewers, code owners, wikis and GitHub Pages, plus more included Actions minutes and email support |
| GitHub Free for organizations | Organizations | Shared ownership, unlimited public repositories with the full feature set, unlimited collaborators and team access controls; private repositories have the limited feature set |
| GitHub Team | Organizations | The advanced private-repository tools (protected branches, required reviewers, code owners and so on) for an organization, billed per user |
| GitHub Enterprise | Organizations, grouped under an enterprise account | Everything in Team plus security, compliance and deployment controls: SAML single sign-on, user provisioning with SCIM, internal repositories, enterprise-wide policies and the choice of Enterprise Cloud or Enterprise Server |
Features follow the repository owner's plan
A repository gets the features of the plan of the account that owns it. Two decisions follow directly:
- A private repository owned by a personal account gets the advanced tools when that personal account is on Pro. Team and Enterprise are organization plans and do not apply to personal accounts.
- A private repository owned by an organization gets the organization's plan; the plans of individual members' personal accounts do not carry over to it. Among organization plans, Team is the lower-cost one that adds required reviewers, protected branches and code owners; Enterprise is the step up when the needs include SAML SSO, SCIM provisioning, internal repositories or managing many organizations together.
Because public repositories already have the full feature set on every plan, the paid plans matter mainly for private work; GitHub Free for organizations still provides shared ownership and teams. Prices, minute allowances and storage quotas change over time, so learn what each plan is for rather than its numbers.
GitHub Enterprise options: Enterprise Cloud, data residency and Enterprise Server
GitHub Enterprise comes in two deployment options: GitHub Enterprise Cloud, which GitHub hosts, and GitHub Enterprise Server, which the customer installs and runs on its own infrastructure. Enterprise Cloud can also be bought with data residency, which stores the company's code and data in a chosen region on its own subdomain of GHE.com.
| Option | Who runs it | Where the data lives | Fits when |
|---|---|---|---|
| Enterprise Cloud (on GitHub.com) | GitHub | GitHub.com | The company wants enterprise controls without running servers and has no data-location requirement |
| Enterprise Cloud with data residency | GitHub | A chosen region, on a unique subdomain of GHE.com | Data must be stored in a specific region (for example the EU) while GitHub still operates the service |
| Enterprise Server | The customer's own IT team | The customer's data center or private cloud | Policy requires the platform to run on infrastructure the company controls |
Both Enterprise Cloud and Enterprise Server use an enterprise account to manage several organizations together. The organizations keep their own repositories, members and teams, while enterprise owners apply policies and billing across all of them from one place: it is the layer GitHub designed for managing many organizations as a group.
Two names that sound related do different jobs. GitHub Connect links an Enterprise Server instance to an Enterprise Cloud account so they can share selected features and data, such as license usage. Self-hosted runners are machines you provide to run GitHub Actions jobs; they decide where workflow jobs execute, not where GitHub itself is hosted.
The GitHub flow, step by step
The GitHub flow is GitHub's lightweight, branch-based workflow for collaborating: you make every change on a branch, propose it with a pull request, get it reviewed, merge it into the default branch and delete the branch. The default branch stays deployable because nothing reaches it without a pull request.
- Create a branch from the default branch, with a short, descriptive name (for example
increase-test-timeoutoradd-code-of-conduct), so collaborators can see what is in progress. People with write access branch in the repository itself; people without write access fork it first and branch in the fork. - Make changes: commit to the branch and push it to GitHub. Each commit should be an isolated, complete change with a descriptive message, so it is easy to review or revert.
- Create a pull request asking collaborators to review the branch. Describe what changed and why, and link related issues.
- Address review comments. Reviewers comment on the pull request or on specific lines; you respond by pushing more commits to the same branch, and the pull request updates automatically.
- Merge the pull request once it is approved (and any required checks and branch protection rules pass). This brings the branch's changes into the default branch.
- Delete the branch. Its commits are now in the default branch, so deleting it loses nothing and signals that the work is done. A deleted branch can be restored from the pull request page if it is needed again.
The order matters: review happens before merge. A sequence that merges first and reviews afterwards, or that commits to the default branch and only then creates a branch, is not the GitHub flow. Opening a pull request before any branch or commit exists is not the starting point either: the flow starts with a branch.
Branch practice, draft pull requests, and undoing a merged change
Good GitHub flow habits keep each pull request small, focused and easy to review: one branch per unrelated change, draft pull requests for early feedback, follow-up commits for review fixes, and a revert pull request when a merged change must be undone.
Separate branches for unrelated changes
Each unrelated change gets its own branch, created from the default branch, and its own pull request. A pull request should do one thing: reviewers can then judge it on its own, and it can merge as soon as it is ready without waiting for, or depending on, other unfinished work.
Draft pull requests for early feedback
When you want comments and checks on unfinished work, open a draft pull request. It has the full pull request experience (conversation, line comments, status checks) but cannot be merged until you mark it ready for review. That block is enforced by GitHub itself, so it does not rely on everyone noticing a convention. Draft pull requests are available on public repositories on every plan; on private repositories they depend on the owner's plan (for example GitHub Team or Enterprise).
Updating a pull request
To act on review feedback, commit the fixes and push them to the branch the pull request already uses. The pull request picks up the new commits automatically, so the code, the comments and the checks stay together in one review history.
Undoing a merged pull request
To undo a merged pull request, use Revert on it. GitHub creates a new pull request containing a revert commit, which is reviewed and merged like any other change. The principle is to undo by adding history, never by rewriting it: rewriting a shared branch bypasses review and breaks the copies other people have already pulled.
Markdown basics for issues and pull requests
GitHub Flavored Markdown is the plain-text formatting syntax GitHub renders in issues, pull requests, comments, discussions, wikis and .md files; it lets you write clear, structured descriptions with headings, lists, code, links, images and checklists without leaving the text box.
| You want | Write | Notes |
|---|---|---|
| Headings | # Title, ## Section | Two or more headings give a file an automatic outline |
| Bold, italic, strikethrough | **bold**, _italic_, ~~struck~~ | |
| Inline code | `npm test` | Single backticks, for a word or short command in a sentence |
| Code block with highlighting | A line of ```python, the code, then a line of ``` | Keeps line breaks; the language identifier after the opening fence turns on syntax highlighting |
| Quote | > quoted text | For quoting someone else's words, such as an earlier comment |
| Link | [text](url) | |
| Image |  | Same as a link with a leading !; without it you get a text link, not an image |
| Task list | - [ ] open task, - [x] done task | Renders clickable checkboxes; a task list in an issue body shows its progress in places such as the issue list |
| Table | Pipes and a header separator row of hyphens |
Relative links and images
For files inside the repository, GitHub recommends relative links such as  rather than absolute URLs. A relative path is resolved against the branch or fork being viewed, so each branch shows its own copy of the file; an absolute URL that names one branch keeps showing that branch's version everywhere. A path that starts with / is resolved from the repository root.
Pick the syntax by what the reader needs: inline code for a word, a fenced block for anything that spans lines, and a quote only for prose you are quoting.
References and @mentions: linking issues and notifying people
GitHub turns short references into links: #number links an issue or pull request in the same repository, owner/repo#number links one in another repository, and @username or @organization/team-name mentions a person or a team so they are notified.
| Syntax | What it references |
|---|---|
#42 | Issue or pull request 42 in the same repository, rendered as a link to it. Typing # offers suggestions by number or title. |
acme/api#118 | Issue or pull request 118 in a different repository (owner/repository#number) |
acme/api@a5c3785 | A commit in another repository, by SHA (owner/repository@SHA); a bare SHA links a commit in the same repository |
@sam | Mentions a single user |
@acme/docs | Mentions a team (@organization/team-name) and notifies its members |
The rule of thumb: # is for issues and pull requests, @ on its own is for people and teams, and @ after a repository name is followed by a commit SHA.
Who actually gets notified
A mention notifies someone only if they have read access to the repository and, when an organization owns the repository, are a member of that organization. This stops private content leaking through notifications, while everyone who can already read the repository, public or private, is notified normally. A team mention notifies the team's members on the same terms.
GitHub Desktop vs GitHub Mobile (and when neither fits)
GitHub Desktop is a free, open source graphical app for Windows and macOS that does everyday local Git work without typing commands; GitHub Mobile is the Android and iOS app for staying on top of GitHub away from your computer. Desktop works with repositories on your machine; Mobile works with GitHub itself.
| GitHub Desktop | GitHub Mobile | |
|---|---|---|
| Platforms | Windows and macOS (no officially supported Linux build) | Android and iOS |
| Made for | People who prefer a GUI to the Git command line, including people new to Git | Triage and review on the go |
| Typical tasks | Clone repositories, create and switch branches, see diffs, choose which changed lines go into a commit, add co-authors to a commit, commit, push and pull, start a pull request | Manage and triage notifications (with push notifications), read, comment on and review issues and pull requests, edit files in a pull request, search code within a repository, verify sign-in attempts from new devices, ask Copilot Chat |
| Not for | Triaging your GitHub notifications inbox or approving sign-in attempts (it does show desktop notifications about your own pull requests in the selected repository, such as failed checks or new reviews) | Cloning and committing local work, or executing GitHub Actions jobs on the phone |
GitHub Mobile with GitHub Enterprise Server
GitHub Mobile can connect to a GitHub Enterprise Server instance only when an enterprise owner enables mobile support for the enterprise (and the instance runs a supported version).
When neither fits: GitHub CLI and the browser
Recognising when to use Desktop or Mobile includes recognising when not to. Scripting and unattended automation need a command-line tool: GitHub CLI (gh) exposes pull requests, issues, labels and more as commands that run in scripts and CI jobs. Quick edits in the browser can use the github.dev editor, and a full cloud development environment is GitHub Codespaces; both are covered in their own lessons.
Tip. Questions are short practical scenarios: a group that needs shared ownership, a developer changing jobs, a team that needs a feature on private repositories, a company with a data-location or self-hosting rule, a step in the middle of a change, a piece of text to format in an issue, or a person who needs a tool for a situation. The options are usually near-twins that each exist on GitHub, so you need to know exactly what each one is for: personal versus organization plans, Team versus Enterprise, Enterprise Cloud versus Server versus data residency, a draft pull request versus other ways of flagging unfinished work, revert versus force-push, #number versus owner/repo#number versus @mentions, collapsed sections versus HTML comments, and Desktop versus Mobile versus CLI. Watch for the stated constraint (must stay private, lowest cost, no servers to run, without rewriting history, phone only) that rules out an otherwise workable choice. Some items ask you to select two.
- Personal accounts are people; organizations are shared owners that nobody signs in to; enterprise accounts (Enterprise Cloud and Server) manage policy and billing for many organizations.
- GitHub recommends one personal account per person. Employer access comes from organization membership; removal ends access to the organization's private repositories (and deletes private forks of them) but leaves your account and repositories alone.
- Features follow the repository owner's plan: Pro upgrades a personal account's private repositories, Team upgrades an organization's, and Enterprise adds SAML SSO, SCIM, internal repositories and the enterprise account.
- Enterprise Cloud is hosted by GitHub (optionally with data residency on GHE.com); Enterprise Server runs on the customer's own infrastructure.
- GitHub flow: branch from the default branch, commit and push, open a pull request, address review comments with more commits, merge, delete the branch.
- Draft pull requests get feedback and checks but GitHub blocks merging until they are marked ready. Revert a merged pull request through a new pull request instead of rewriting history.
- Markdown essentials: fenced code blocks with a language identifier, - [ ] task lists,  images with relative paths, #42 and owner/repo#42 references, @user and @org/team mentions.
- A mention notifies only people with read access to the repository (and organization membership for organization-owned repositories).
- Alerts ([!NOTE] to [!CAUTION]) highlight, <details> hides until clicked, Mermaid draws diagrams from text, and HTML comments never render.
- GitHub Desktop is a GUI for local Git work on Windows and macOS; GitHub Mobile is for notifications, reviews and sign-in approvals on a phone; scripts use GitHub CLI.
Frequently asked questions
What is the difference between a GitHub personal account and an organization?
A personal account is an individual's identity on GitHub: you sign in with it and every action comes from it. An organization is a shared account that owns repositories for a group, such as a company or open source project. Nobody signs in to an organization; members use their own personal accounts, and owners manage access through teams, so ownership does not depend on any one person.
Should I create a separate GitHub account for work?
GitHub recommends one personal account per person for both personal and work use. Your employer adds that account to its organization, which gives you access to its repositories, and removes it when you leave. The exception is a company using Enterprise Managed Users, where the company's identity provider creates a separate managed account for company work.
What is the difference between GitHub Pro and GitHub Team?
GitHub Pro is a plan for a personal account, and GitHub Team is a plan for an organization. Both add advanced tools for private repositories, such as protected branches, required reviewers and code owners. Which one you need depends on who owns the repository: a repository in your personal account needs Pro, and a repository owned by an organization needs the organization to be on Team or Enterprise.
What is the difference between GitHub Enterprise Cloud and GitHub Enterprise Server?
GitHub Enterprise Cloud is hosted by GitHub, optionally with data residency in a chosen region on a GHE.com subdomain. GitHub Enterprise Server is installed and run by the customer on its own infrastructure, such as its own data center. Both offer enterprise accounts that manage policy and billing for several organizations.
What are the steps of the GitHub flow?
The GitHub flow has six steps: create a branch from the default branch, make changes by committing and pushing to the branch, open a pull request, address review comments by pushing more commits, merge the pull request once it is approved, and delete the branch. Review always happens before the change reaches the default branch.
How do I undo a merged pull request on GitHub?
Use the Revert button on the merged pull request. GitHub creates a new pull request with a commit that reverses the changes, which you review and merge like any other change. This keeps the default branch's history intact, unlike resetting the branch and force-pushing.
Why didn't someone get notified when I @mentioned them?
GitHub only notifies a mentioned person if they have read access to the repository and, for a repository owned by an organization, are a member of that organization. Someone without access to a private repository therefore gets no notification. To notify a whole team, use the @organization/team-name form.
When should I use GitHub Desktop instead of GitHub Mobile?
Use GitHub Desktop, a free app for Windows and macOS, for local Git work through a graphical interface: cloning, branching, choosing lines to commit, committing and pushing. Use GitHub Mobile, for Android and iOS, to triage notifications, review issues and pull requests, edit files in a pull request and approve sign-in attempts while away from your computer. For scripts and automation, use GitHub CLI.
Source
This lesson covers the "Understand Git and GitHub basics" domain of the official GH-900 exam guide. Vendors revise their guides — check the source for the current version.
Sign up free to mark lessons complete, bookmark topics and track your exam readiness.