Sửa lỗi 'fatal: remote origin already exists' Khi Thêm Git Remote

beginner📦 Git2026-05-13| Git 2.x trên Linux, macOS, Windows — mọi shell (bash, zsh, PowerShell, Git Bash)

Error Message

fatal: remote origin already exists.
#git#remote#origin

Lỗi Gặp Phải

Bạn chạy git remote add origin <url> và Git dừng lại ngay lập tức:

fatal: remote origin already exists.

Chín trong mười trường hợp, lỗi này xảy ra khi bạn đang trỏ một repo hiện có sang host mới — sau khi chuyển từ GitHub sang GitLab, fork dự án của người khác, hoặc clone một repo rồi cố gắng kết nối lại với tài khoản của mình.

Nguyên Nhân

Git lưu trữ các remote trong .git/config. Một khi remote tên origin đã được đăng ký ở đó — dù do lệnh git remote add trước đó hay tự động từ git clone — Git sẽ từ chối tạo thêm một remote khác trùng tên. Git coi lần gọi thứ hai là xung đột, không phải cập nhật.

Các nguyên nhân thường gặp:

  • Bạn clone một repo, rồi cố thêm origin lần nữa với URL khác.
  • Bạn chạy git remote add origin hai lần trong cùng một repo.
  • Script thiết lập không kiểm tra xem origin đã tồn tại chưa trước khi thêm.
  • Bạn chuyển từ GitHub sang GitLab (hoặc ngược lại) và dùng add thay vì set-url.

Cách Sửa 1: Cập Nhật URL Remote (Nhanh Nhất)

Đã có origin nhưng đang trỏ sai chỗ? Dùng set-url — không phải add:

git remote set-url origin https://github.com/your-username/your-repo.git

Với SSH:

git remote set-url origin git@github.com:your-username/your-repo.git

Xong. URL được thay thế. Không có gì thay đổi khác — branch, commit, cấu hình local đều giữ nguyên.

Cách Sửa 2: Xóa Rồi Thêm Lại

Muốn bắt đầu lại từ đầu? Xóa remote trước, rồi thêm mới:

git remote remove origin
git remote add origin https://github.com/your-username/your-repo.git

Lưu ý quan trọng: Xóa remote không ảnh hưởng đến commit hay branch local của bạn. Nó chỉ xóa mục tương ứng trong .git/config. Công việc của bạn hoàn toàn an toàn.

Cách Sửa 3: Đổi Tên Remote Cũ, Giữ Cả Hai

Đang chuyển repo và vẫn cần giữ remote cũ một thời gian? Đổi tên thay vì xóa:

git remote rename origin old-origin
git remote add origin https://github.com/your-username/new-repo.git

Bây giờ bạn có hai remote — old-origin trỏ đến host cũ, và origin trỏ đến host mới. Pull từ cái cũ, push lên cái mới. Rất tiện trong giai đoạn chuyển đổi.

Kiểm Tra Kết Quả

Chạy lệnh này để xem tất cả các remote đã cấu hình cùng URL của chúng:

git remote -v

Sau khi cập nhật thành công, bạn sẽ thấy:

origin  https://github.com/your-username/your-repo.git (fetch)
origin  https://github.com/your-username/your-repo.git (push)

Nếu bạn chọn cách đổi tên, cả hai remote sẽ hiển thị:

old-origin  https://gitlab.com/your-username/old-repo.git (fetch)
old-origin  https://gitlab.com/your-username/old-repo.git (push)
origin      https://github.com/your-username/new-repo.git (fetch)
origin      https://github.com/your-username/new-repo.git (push)

Sau đó xác nhận remote có thể kết nối được:

git fetch origin

Không có lỗi? Bạn đã xong. Output trống cũng ổn — chỉ có nghĩa là không có gì mới để fetch.

Xem File Config Trực Tiếp

Muốn xem nội dung thực tế trên ổ đĩa? Mở .git/config trực tiếp:

cat .git/config

Một mục remote điển hình trông như thế này:

[remote "origin"]
    url = https://github.com/your-username/your-repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*

Bạn có thể chỉnh sửa file này thủ công như là phương án cuối cùng. Nhưng các lệnh git remote an toàn hơn — chỉ một lỗi đánh máy trong file config có thể làm hỏng toàn bộ cấu hình remote của bạn.

Phòng Tránh Trong Script

Đang viết script khởi tạo? Thêm kiểm tra trước khi gọi git remote add một cách mù quáng:

REMOTE_URL="https://github.com/your-username/your-repo.git"

if git remote get-url origin >/dev/null 2>&1; then
  git remote set-url origin "$REMOTE_URL"
else
  git remote add origin "$REMOTE_URL"
fi

Nếu origin đã tồn tại thì cập nhật. Nếu chưa thì tạo mới. Pattern này xử lý cả hai trường hợp và không bao giờ gây ra lỗi fatal — bất kể script chạy bao nhiêu lần.

Tóm Tắt Nhanh

  • URL sai → URL đúng: git remote set-url origin <new-url>
  • Bắt đầu lại từ đầu: git remote remove origin rồi git remote add origin <url>
  • Giữ cái cũ, thêm cái mới: git remote rename origin old-origin rồi git remote add origin <url>
  • Kiểm tra trạng thái hiện tại: git remote -v

Related Error Notes