Chuyện gì vừa xảy ra
Bạn tạo một branch local mới, chạy git push, và nhận ngay thông báo này:
fatal: The current branch feature/my-branch has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin feature/my-branch
Branch của bạn hoàn toàn mới — chưa từng được push. Git không biết nó cần kết nối với remote branch nào. Các branch như main hay master thường đã được liên kết sẵn với remote, nhưng bất kỳ branch nào bạn tự tạo local đều bắt đầu mà không có upstream mapping cho đến khi bạn thiết lập.
Cách sửa nhanh
Git đã chỉ cho bạn câu trả lời rồi. Chạy lệnh đó thôi:
git push --set-upstream origin feature/my-branch
Hoặc phiên bản rút gọn mà hầu hết mọi người dùng hằng ngày:
git push -u origin feature/my-branch
Cả hai đều làm cùng một việc. Branch của bạn được push lên origin, và Git ghi nhớ mapping đó. Mọi lệnh git push hay git pull tiếp theo trên branch này sẽ hoạt động bình thường — không cần thêm flag gì.
Không muốn gõ tên branch?
Dùng HEAD thay thế:
git push -u origin HEAD
HEAD luôn trỏ đến branch bạn đang checkout. Hoạt động bất kể tên branch là gì — tiện lợi khi tên branch dài như fix/PROJ-2847-auth-token-expiry.
Kiểm tra xem đã sửa được chưa
Chạy lệnh này sau khi push:
git branch -vv
Tìm tham chiếu remote tracking trong dấu ngoặc vuông:
* feature/my-branch a1b2c3d [origin/feature/my-branch] Commit message của bạn
Không thấy dấu ngoặc vuông? Upstream vẫn chưa được thiết lập. Bạn cũng có thể kiểm tra lại bằng git status — một branch được track đúng cách sẽ hiển thị nội dung kiểu như "Your branch is up to date with 'origin/feature/my-branch'".
Không bao giờ phải gõ -u nữa — cách sửa vĩnh viễn
Nếu bạn push branch mới nhiều lần trong tuần, việc này sẽ trở nên nhàm chán. Một tùy chọn config toàn cục sẽ loại bỏ hoàn toàn vấn đề này:
git config --global push.autoSetupRemote true
Từ đó trở đi, một lệnh git push thông thường trên bất kỳ branch mới nào sẽ tự động push và thiết lập upstream. Không cần flag. Không cần lo lắng. Lưu ý rằng tính năng này yêu cầu Git 2.37 trở lên — phát hành tháng 7 năm 2022.
Kiểm tra phiên bản trước:
git --version
Đang dùng phiên bản cũ hơn? Dùng cách này thay thế:
git config --global push.default current
Nó push lên remote branch có cùng tên với branch local của bạn. Hạn chế là: nó không lưu tham chiếu upstream tracking. Bạn vẫn cần dùng -u một lần để git pull hoạt động không cần đối số. Nhưng ít nhất bản thân lệnh push sẽ không bị lỗi.
Khi có nhiều remote
Đang làm việc với fork? Bạn có thể có hai remote — origin (fork của bạn) và upstream (repo gốc). Hãy chỉ rõ bạn đang push lên remote nào:
# Xem các remote hiện có
git remote -v
# Push lên fork của bạn
git push -u origin feature/my-branch
# Push lên repo upstream (nếu bạn có quyền ghi)
git push -u upstream feature/my-branch
Liên kết mà không cần push
Đôi khi remote branch đã tồn tại — do đồng đội tạo, hoặc bạn đang tiếp tục công việc của người khác. Không cần push gì cả. Chỉ cần liên kết branch local của bạn với nó:
git branch --set-upstream-to=origin/feature/my-branch
Phiên bản flag rút gọn:
git branch -u origin/feature/my-branch
Sau khi chạy git fetch, cách này cho phép bạn theo dõi remote branch đó mà không tạo thêm commit hay push.
Tóm tắt
- Branch local mới không có upstream — Git sẽ không tự động push chúng.
- Sửa một lần:
git push -u origin HEAD - Sửa vĩnh viễn (Git 2.37+):
git config --global push.autoSetupRemote true - Kiểm tra bằng:
git branch -vv

