GIT(1)Sổ tay ITGIT(1)

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 add nhầ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 pop
push bị từ chối (trên server có commit mới)
git pull --rebase rồi git push
Xung đột khi gộp
Sửa file → git add <file> → git rebase --continue (hoặc git 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 main mớ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~1
Mất gì Không
Bỏ commit cuối, giữ code chưa add
Lệnh git reset HEAD~1
Mất gì Không
Bỏ commit cuối và code
Lệnh git reset --hard HEAD~1
Mấ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 -fd
Mất gì File mới

Chú ý: Commit đã push lên nhánh dùng chung thì không reset rồi push --force: người khác sẽ mất commit. Dùng git 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 main
pull không tạo commit merge thừa
git 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

Xem thêm

linux(8), mang(8), windows(8), switch(8), docker(1), terminal(1)