History of Git - Remote and Upstream Management
<h2>Setup remotes</h2>
<pre># Check current remotes
git remote -v
# Add upstream (original repo your fork came from)
git remote add upstream https://github.com/ADOdb/ADOdb.git
# Add SSH alternative (no password prompts)
git remote add upstream git@github.com:ADOdb/ADOdb.git
# Change existing remote URL
git remote set-url origin git@github.com:lsces/adodb.git
# Remove a remote
git remote remove upstream
</pre>
<h2>Syncing with upstream</h2>
<pre># Fetch upstream changes (no merge)
git fetch upstream
# Fetch upstream including tags
git fetch upstream --tags
# Merge upstream into current branch
git merge upstream/master
# Or rebase on upstream (cleaner history)
git rebase upstream/master
</pre>
<h2>Tags</h2>
<pre># List local tags
git tag -l
# List tags sorted by version
git tag -l | sort -V
# Fetch tags from upstream (not fetched by default!)
git fetch upstream --tags
# Fetch tags from origin
git fetch origin --tags
# Push single tag to fork
git push origin v5.22.11
# Push all tags to fork
git push origin --tags
# Force push tags (if upstream changed a tag)
git fetch upstream --tags --force
git push origin --tags --force
</pre>
<h2>Check what's different</h2>
<pre># Commits in upstream not in your fork
git log --oneline HEAD..upstream/master
# Commits in your fork not in upstream (your changes)
git log --oneline upstream/master..HEAD
# Files changed between versions
git diff v5.22.10..v5.22.11
# Files changed in specific driver
git diff v5.22.10..v5.22.11 -- drivers/adodb-firebird.inc.php
</pre>
<h2>Keeping fork in sync workflow</h2>
<pre># 1. Fetch upstream
git fetch upstream --tags
# 2. Check what's new
git log --oneline HEAD..upstream/master
# 3. Merge or rebase
git merge upstream/master
# or
git rebase upstream/master
# 4. Push to your fork
git push origin master
git push origin --tags
</pre>
<h2>Switch remote from HTTPS to SSH</h2>
<pre># Check current
git remote get-url origin
# Switch to SSH (no more password prompts)
git remote set-url origin git@github.com:lsces/adodb.git
# Verify
git remote -v
</pre>
<h2>Troubleshooting</h2>
<strong>Tags not showing in VSCode/fork:</strong>
<pre>git fetch upstream --tags
git push origin --tags
</pre>
<strong>"Already up to date" but tags missing:</strong>
<pre># Tags sync separately from commits!
git fetch --tags # fetch from all remotes
git push origin --tags
</pre>
<strong>Fork behind upstream:</strong>
<pre>git fetch upstream
git log --oneline HEAD..upstream/master # see what's missing
git merge upstream/master
git push origin master
</pre>
<strong>Diverged from upstream (have local changes):</strong>
<pre># Rebase keeps your changes on top of upstream
git rebase upstream/master
# Fix any conflicts, then
git push origin master --force-with-lease
</pre>
<h2>Citation</h2>
<p><em>Developed with [Claude AI](https://claude.ai) assistance - Anthropic - May 2026</em></p>
<pre># Check current remotes
git remote -v
# Add upstream (original repo your fork came from)
git remote add upstream https://github.com/ADOdb/ADOdb.git
# Add SSH alternative (no password prompts)
git remote add upstream git@github.com:ADOdb/ADOdb.git
# Change existing remote URL
git remote set-url origin git@github.com:lsces/adodb.git
# Remove a remote
git remote remove upstream
</pre>
<h2>Syncing with upstream</h2>
<pre># Fetch upstream changes (no merge)
git fetch upstream
# Fetch upstream including tags
git fetch upstream --tags
# Merge upstream into current branch
git merge upstream/master
# Or rebase on upstream (cleaner history)
git rebase upstream/master
</pre>
<h2>Tags</h2>
<pre># List local tags
git tag -l
# List tags sorted by version
git tag -l | sort -V
# Fetch tags from upstream (not fetched by default!)
git fetch upstream --tags
# Fetch tags from origin
git fetch origin --tags
# Push single tag to fork
git push origin v5.22.11
# Push all tags to fork
git push origin --tags
# Force push tags (if upstream changed a tag)
git fetch upstream --tags --force
git push origin --tags --force
</pre>
<h2>Check what's different</h2>
<pre># Commits in upstream not in your fork
git log --oneline HEAD..upstream/master
# Commits in your fork not in upstream (your changes)
git log --oneline upstream/master..HEAD
# Files changed between versions
git diff v5.22.10..v5.22.11
# Files changed in specific driver
git diff v5.22.10..v5.22.11 -- drivers/adodb-firebird.inc.php
</pre>
<h2>Keeping fork in sync workflow</h2>
<pre># 1. Fetch upstream
git fetch upstream --tags
# 2. Check what's new
git log --oneline HEAD..upstream/master
# 3. Merge or rebase
git merge upstream/master
# or
git rebase upstream/master
# 4. Push to your fork
git push origin master
git push origin --tags
</pre>
<h2>Switch remote from HTTPS to SSH</h2>
<pre># Check current
git remote get-url origin
# Switch to SSH (no more password prompts)
git remote set-url origin git@github.com:lsces/adodb.git
# Verify
git remote -v
</pre>
<h2>Troubleshooting</h2>
<strong>Tags not showing in VSCode/fork:</strong>
<pre>git fetch upstream --tags
git push origin --tags
</pre>
<strong>"Already up to date" but tags missing:</strong>
<pre># Tags sync separately from commits!
git fetch --tags # fetch from all remotes
git push origin --tags
</pre>
<strong>Fork behind upstream:</strong>
<pre>git fetch upstream
git log --oneline HEAD..upstream/master # see what's missing
git merge upstream/master
git push origin master
</pre>
<strong>Diverged from upstream (have local changes):</strong>
<pre># Rebase keeps your changes on top of upstream
git rebase upstream/master
# Fix any conflicts, then
git push origin master --force-with-lease
</pre>
<h2>Citation</h2>
<p><em>Developed with [Claude AI](https://claude.ai) assistance - Anthropic - May 2026</em></p>
