Hands-On: Two Clones

Updated

October 30, 2026

Hands-On: Fork, Clone, Branch, Commit, Push

Simulate a remote with a bare repo on Linux. No forge account required.

Origin (bare)

 ~/desk/desk-api          ~/desk/desk-api.git         ~/desk/desk-api-b
 (clone A, you)           (bare origin)               (clone B, teammate)
      │ push/fetch              ▲                      │ fetch/merge
      └─────────────────────────┴──────────────────────┘
mkdir -p ~/desk
git init --bare ~/desk/desk-api.git

Your clone

If ~/desk/desk-api already has history:

cd ~/desk/desk-api
git remote remove origin 2>/dev/null || true
git remote add origin ~/desk/desk-api.git
git push -u origin main

If you are starting empty:

git clone ~/desk/desk-api.git ~/desk/desk-api
cd ~/desk/desk-api
# if clone was empty, make the chapter 3 tiny project first, then:
git push -u origin main

A second clone (teammate or your own review checkout)

git clone ~/desk/desk-api.git ~/desk/desk-api-b
cd ~/desk/desk-api-b
git log --oneline -3

Feature on A, fetch on B

cd ~/desk/desk-api
git switch -c feat/readme-note
echo "Lab remote: ~/desk/desk-api.git" >> README.md
git add README.md
git commit -m "docs: note the local origin path"
git push -u origin feat/readme-note
cd ~/desk/desk-api-b
git fetch origin
git log --oneline main..origin/feat/readme-note
git merge origin/feat/readme-note

On a forge, that merge on B is the reviewer’s local check; the PR merge happens on the server into main. Here, integrate on A:

cd ~/desk/desk-api
git switch main
git merge --ff-only feat/readme-note
git push origin main
git branch -d feat/readme-note
git push origin --delete feat/readme-note
cd ~/desk/desk-api-b
git fetch origin
git switch main
git merge --ff-only origin/main

Done when

  • ~/desk/desk-api.git has main with the docs commit
  • Both clones’ main match git rev-parse HEAD
  • Feature branch is gone locally and on origin

You just did clone, branch, commit, push, fetch, and integrate. A pull-request button is that last integrate, with a UI. Next: stash, tags, and cleanup on a single clone.