Tên
git(1) — hằng ngày, nhánh, lịch sử, cứu khi lỡ tay
Mục lục
Gặp vấn đề · Hằng ngày · Nhánh · Xem lịch sử · Hoàn tác · Cấu hình một lần · Nguồn
Mô tả
Lệnh git dùng hằng ngày và lệnh cứu khi lỡ tay.
Gặp vấn đề
- Commit nhầm, muốn bỏ commit cuối (giữ code)
git reset --soft HEAD~1- Sửa nội dung / thêm file vào commit vừa tạo
git commit --amend- Sửa hỏng một file, muốn về bản đã commit
git restore <file>- Lỡ
git addnhầm file git restore --staged <file>- Mất commit sau
reset/ xoá nhánh git reflog→git switch -c cuu <mã>- Đang sửa dở, cần đổi nhánh gấp
git stash…git stash poppushbị từ chối (trên server có commit mới)git pull --rebaserồigit push- Xung đột khi gộp
- Sửa file →
git add <file>→git rebase --continue(hoặcgit merge --continue) - Lỡ commit mật khẩu, token
- Đổi mật khẩu ngay. Xoá khỏi lịch sử không đủ vì có thể đã bị sao chép
Hằng ngày
- Trạng thái gọn
git status -sb- Xem thay đổi chưa add · đã add
git diff·git diff --staged- Chọn từng đoạn để add
git add -p- Commit
git commit -m "<nội dung>"- Lấy về · đẩy lên
git pull --rebase·git push- Nhánh mới, đẩy lần đầu
git push -u origin <nhánh>- Lấy dự án về
git clone <url>
Nhánh
- Danh sách nhánh, mới nhất lên đầu
git branch --sort=-committerdate- Tạo và chuyển sang nhánh mới
git switch -c <nhánh>- Chuyển nhánh · về nhánh trước
git switch <nhánh>·git switch -- Gộp nhánh khác vào nhánh hiện tại
git merge <nhánh>- Đặt nhánh mình lên trên
mainmới nhất git rebase main- Xoá nhánh đã gộp · xoá trên GitHub
git branch -d <nhánh>·git push origin --delete <nhánh>- Lấy một commit từ nhánh khác
git cherry-pick <mã>
Xem lịch sử
- Lịch sử gọn, có nhánh
git log --oneline --graph -20- Lịch sử một file, kèm nội dung đổi
git log -p -- <file>- Ai sửa dòng nào
git blame <file>- Commit nào thêm / xoá một đoạn chữ
git log -S "<chữ>" --oneline- Xem một commit
git show <mã>- So 2 nhánh
git diff main..<nhánh>- Tìm commit gây lỗi (chia đôi)
git bisect start·git bisect bad·git bisect good <mã>
Hoàn tác
- Bỏ commit cuối, giữ code đã add
- Lệnh
git reset --soft HEAD~1Mất gì Không - Bỏ commit cuối, giữ code chưa add
- Lệnh
git reset HEAD~1Mất gì Không - Bỏ commit cuối và code
- Lệnh
git reset --hard HEAD~1Mất gì Code của commit đó - Huỷ một commit đã push (tạo commit ngược)
- Lệnh
git revert <mã>Mất gì Không - Bỏ mọi sửa đổi chưa commit
- Lệnh
git restore .Mất gì Sửa đổi chưa commit - Xoá file mới chưa theo dõi (xem trước bằng
-n) - Lệnh
git clean -n→git clean -fdMất gì File mới
Chú ý: Commit đã
pushlên nhánh dùng chung thì khôngresetrồipush --force: người khác sẽ mất commit. Dùnggit revert.
Cấu hình một lần
- Tên, email
git config --global user.name "<tên>"·git config --global user.email "<email>"- Nhánh mặc định
main git config --global init.defaultBranch mainpullkhông tạo commit merge thừagit config --global pull.rebase true- Nhánh mới chỉ cần
git push git config --global push.autoSetupRemote true- Bỏ qua file ở mọi dự án
git config --global core.excludesfile ~/.config/git/ignore
Nguồn
- Git documentation · Pro Git book
- GitHub Docs — Removing sensitive data from a repository
Xem thêm
linux(8), mang(8), windows(8), switch(8), docker(1), terminal(1)