Add docs/restore_repo.md
This commit is contained in:
182
docs/restore_repo.md
Normal file
182
docs/restore_repo.md
Normal file
@@ -0,0 +1,182 @@
|
||||
# Restoring a Lost Git Repository (Simple Guide)
|
||||
|
||||
This guide is for users who have a project folder on their computer/server, and the **remote repository** was deleted or lost.
|
||||
|
||||
Goal: **Back up your project safely** and then **push it again** to a **new empty remote repository**, keeping **all history, branches, and tags**.
|
||||
|
||||
---
|
||||
|
||||
## What you need
|
||||
|
||||
* You have the project folder on your computer/server.
|
||||
* Git is installed.
|
||||
* You can log in to the https://git.ourworld.tf website and create a **new empty repository**.
|
||||
|
||||
> **Important:** The new remote repository should be **empty** (no README, no initial commit), if possible.
|
||||
|
||||
---
|
||||
|
||||
## Step 1 — Go to your project folder
|
||||
|
||||
Open Terminal (or Command Prompt) and go into your project folder.
|
||||
|
||||
Example:
|
||||
|
||||
```bash
|
||||
cd /path/to/your/project
|
||||
```
|
||||
|
||||
To confirm you’re in the right folder:
|
||||
|
||||
```bash
|
||||
git status
|
||||
```
|
||||
|
||||
If you see something like `On branch ...` you’re in the correct place.
|
||||
|
||||
---
|
||||
|
||||
## Step 2 — Make a safe backup (highly recommended)
|
||||
|
||||
### Option A: Make a “Git bundle” (best and simplest)
|
||||
|
||||
A **bundle** is a single file that contains your **full project history** (commits, branches, tags).
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
git bundle create ~/my_project_backup.bundle --all
|
||||
```
|
||||
|
||||
Then verify it:
|
||||
|
||||
```bash
|
||||
git bundle list-heads ~/my_project_backup.bundle
|
||||
```
|
||||
|
||||
You should see branch names like `refs/heads/master`, `refs/heads/main`, or others.
|
||||
|
||||
✅ Keep this `.bundle` file somewhere safe.
|
||||
|
||||
### Option B: Copy the entire folder
|
||||
|
||||
You can also copy your whole project folder somewhere safe.
|
||||
|
||||
Example:
|
||||
|
||||
```bash
|
||||
cp -r /path/to/your/project /path/to/backup/location/
|
||||
```
|
||||
|
||||
This protects you if something goes wrong.
|
||||
|
||||
---
|
||||
|
||||
## Step 3 — Create the new remote repository (on the website)
|
||||
|
||||
On https://git.ourworld.tf :
|
||||
|
||||
1. Click **New Repository**
|
||||
2. Choose a name (can be the same name or different)
|
||||
3. **Do not initialize** with README / .gitignore / license (recommended)
|
||||
4. Create the repository
|
||||
|
||||
Copy the new repository URL. It will look like one of these:
|
||||
|
||||
* HTTPS: `https://git.ourworld.tf/ourworld_web/www_threefold_io.git`
|
||||
* SSH: `git@git.ourworld.tf:ourworld_web/www_threefold_io.git`
|
||||
|
||||
---
|
||||
|
||||
## Step 4 — Point your local project to the new remote
|
||||
|
||||
Check your current remote:
|
||||
|
||||
```bash
|
||||
git remote -v
|
||||
```
|
||||
|
||||
Now set the new remote URL (replace with your new URL):
|
||||
|
||||
```bash
|
||||
git remote set-url origin https://git.ourworld.tf/org/repo.git
|
||||
```
|
||||
|
||||
Confirm:
|
||||
|
||||
```bash
|
||||
git remote -v
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Step 5 — Make sure the new remote is empty
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
git ls-remote origin
|
||||
```
|
||||
|
||||
* If it prints **nothing**, the remote is empty ✅
|
||||
* If it prints commit hashes, the remote is not empty
|
||||
|
||||
If it’s not empty, you can still restore, but you may need **force push** (see Step 7).
|
||||
|
||||
---
|
||||
|
||||
## Step 6 — Push everything (history + branches + tags)
|
||||
|
||||
Push **all branches**:
|
||||
|
||||
```bash
|
||||
git push -u origin --all
|
||||
```
|
||||
|
||||
Push **all tags**:
|
||||
|
||||
```bash
|
||||
git push origin --tags
|
||||
```
|
||||
|
||||
✅ This restores the repository with full history.
|
||||
|
||||
---
|
||||
|
||||
## Step 7 — If the remote was not empty (force push)
|
||||
|
||||
Only use this if the remote already has commits (like an auto README) and you want your local project to become the “truth”.
|
||||
|
||||
```bash
|
||||
git push --force origin --all
|
||||
git push --force origin --tags
|
||||
```
|
||||
|
||||
⚠️ Warning: Force push overwrites the remote history.
|
||||
|
||||
---
|
||||
|
||||
## Quick checklist
|
||||
|
||||
* [ ] I made a backup (bundle or folder copy)
|
||||
* [ ] I created a **new empty** remote repo
|
||||
* [ ] I updated `origin` to the new URL
|
||||
* [ ] I pushed **all branches** and **all tags**
|
||||
* [ ] I verified with `git ls-remote`
|
||||
|
||||
---
|
||||
|
||||
## One‑page “Do This” summary
|
||||
|
||||
```bash
|
||||
cd /path/to/project
|
||||
|
||||
git bundle create ~/project_backup.bundle --all
|
||||
|
||||
git remote set-url origin https://example.com/org/repo.git
|
||||
|
||||
git push -u origin --all
|
||||
git push origin --tags
|
||||
|
||||
git ls-remote --heads --tags origin
|
||||
```
|
||||
Reference in New Issue
Block a user