Sửa lỗi Git: fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree

beginner📦 Git2026-06-07| Git (Tất cả phiên bản), Linux, macOS, Windows Terminal/PowerShell

Error Message

fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]'
#git#HEAD#repo-trong#commit-dau-tien#git-log

Cách khắc phục nhanh lúc 2 giờ sáng

Nếu bạn vừa chạy git init và gặp phải lỗi này, đừng hoảng loạn. Bạn có lẽ đang cố gắng chạy git log hoặc git diff trên một kho lưu trữ (repository) mới chỉ được tạo vài giây. Vấn đề rất đơn giản: kho lưu trữ của bạn chưa có commit nào.

Git không thể tham chiếu đến HEADHEAD đang trỏ đến một nhánh (branch) chưa từng được khởi tạo. Để khắc phục lỗi này ngay lập tức, bạn chỉ cần tạo bản chụp (snapshot) đầu tiên. Hãy chạy các lệnh sau:

git add .
git commit -m "initial commit"

Một khi commit đầu tiên đó được ghi lại trong lịch sử, HEAD sẽ trở thành một tham chiếu hợp lệ, và các lệnh của bạn sẽ hoạt động như mong đợi.

Thông báo lỗi chính xác

Bạn có thể đã gặp phải lỗi này khi cố gắng kiểm tra lịch sử hoặc so sánh các thay đổi trong một dự án hoàn toàn mới:

fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

Tại sao điều này xảy ra (Nhánh "chưa sinh ra")

Trong Git, HEAD là một con trỏ đến đỉnh của nhánh hiện tại. Khi bạn chạy git init, Git tạo thư mục .git và thiết lập tên nhánh mặc định—thường là main hoặc master. Nếu bạn nhìn vào bên trong .git/HEAD, bạn sẽ thấy một tham chiếu như ref: refs/heads/main.

Điểm mấu chốt là gì? Tệp refs/heads/main vẫn chưa tồn tại. Nó chỉ xuất hiện sau khi bạn thực hiện commit đầu tiên. Cho đến thời điểm đó, bạn đang ở trên một nhánh "chưa sinh ra" (unborn) và không có lịch sử.

Khi bạn chạy git log, Git tìm kiếm HEAD để biết bắt đầu đọc từ đâu. Vì HEAD trỏ đến một tệp không tồn tại, Git sẽ bị bối rối. Nó đưa ra lỗi ambiguous argument (đối số mơ hồ) vì không thể phân biệt được bạn đang nói về một nhánh, một thẻ (tag), hay một tệp có tên là "HEAD".

Lỗi này thường xuất hiện khi nào?

1. Kiểm tra lịch sử trên một repo mới

Bạn có thể theo bản năng gõ git log ngay sau khi khởi tạo để xem nó có hoạt động không. Trong các phiên bản Git trước 2.22, điều này hầu như luôn kích hoạt lỗi "unknown revision" vì không có commit nào để hiển thị.

2. So sánh các thay đổi với git diff HEAD

Giả sử bạn đã thêm một số mã nguồn và muốn xem sự khác biệt so với commit cuối cùng. Vì chưa có "commit cuối cùng" nào, HEAD là một mục tiêu không hợp lệ, và lệnh diff sẽ thất bại.

3. Quy trình CI/CD và Tự động hóa

Các kịch bản tự động hóa thường là "thủ phạm" ở đây. Một script có thể cố gắng lấy mã hash của commit hiện tại bằng lệnh git rev-parse HEAD. Nếu script đó chạy trên một mẫu (template) vừa mới khởi tạo, nó sẽ gặp lỗi nghiêm trọng này.

Chiến lược khắc phục

Cách 1: Thực hiện commit đầu tiên (Khuyên dùng)

Cách khắc phục tiêu chuẩn là cung cấp cho Git một thứ gì đó để trỏ vào. Mọi dự án đều cần một điểm bắt đầu theo thời gian.

# Tạo một tệp nếu thư mục của bạn trống
touch README.md

# Đưa các tệp vào vùng chờ (stage)
git add .

# Tạo commit đầu tiên
git commit -m "chore: initialize repository"

Cách 2: Sử dụng git status để có cái nhìn tốt hơn

Nếu bạn chưa sẵn sàng để commit nhưng muốn xem tiến độ của mình, hãy ngừng sử dụng git log. Thay vào đó, hãy sử dụng git status. Lệnh này được thiết kế để hoạt động ngay cả khi chưa có commit nào tồn tại. Nó sẽ thông báo rằng bạn đang ở nhánh khởi tạo và liệt kê các tệp đã được stage mà không phàn nàn về việc thiếu tham chiếu.

Cách 3: Bảo vệ các script (rev-parse)

Bạn đang viết script? Bạn nên kiểm tra xem HEAD có thực sự tồn tại hay không trước khi chạy các lệnh dựa trên lịch sử. Hãy sử dụng logic này:

if git rev-parse --verify HEAD >/dev/null 2>&1; then
    echo "Tìm thấy lịch sử, đang tiếp tục..."
    git log -1
else
    echo "Phát hiện kho lưu trữ trống."
fi

Kiểm tra đơn giản này giúp ngăn quy trình CI/CD của bạn bị lỗi khi gặp một repo trống.

Cách 4: Kiểm tra các thay đổi đã stage

Bạn không thể sử dụng git diff --cached HEAD trong một repo mới vì HEAD không hợp lệ. Để xem những gì hiện có trong index (đã được stage cho commit đầu tiên đó), hãy sử dụng git status hoặc git ls-files --stage. Các công cụ này xem xét trực tiếp index thay vì so sánh nó với một commit không tồn tại.

Xác minh: Nó đã hoạt động chưa?

Sau khi bạn đã thực hiện commit đầu tiên, hãy chạy lệnh ngắn gọn này:

git log --oneline

Nếu cách khắc phục hiệu quả, bạn sẽ thấy một mã hash ngắn 7 ký tự và thông báo của mình:

a1b2c3d (HEAD -> main) initial commit

Ngoài ra, git rev-parse HEAD giờ đây sẽ trả về mã hash SHA-1 đầy đủ 40 ký tự thay vì một lỗi.

Kết luận

Lỗi fatal: ambiguous argument 'HEAD' chỉ là cách Git nói rằng "Bạn đang yêu cầu xem lịch sử, nhưng lịch sử vẫn chưa bắt đầu." Đừng suy nghĩ quá nhiều về các chi tiết kỹ thuật. Chỉ cần commit tệp đầu tiên của bạn, và lỗi sẽ biến mất.

Related Error Notes