Tai sao Git lai phuc tap nhu vay?


Git chua bao gio co y de ban cam thay no don gian.

Ban nghi Git chi la add, commit, push? Dieu do co nghia la ban luon choi o “che do mot nguoi”, nhieu nhat la hop tac qua mang LAN. Do khong phai la dung Git — do la dung Git nhu mot Baidu Netdisk dong bo thu cong.

Do phuc tap cua Git den tu van de toi thuong ma no duoc tao ra de giai quyet: lam the nao de mot nhom lap trinh vien khong tin tuong lan nhau, co lich lam viec trai nguoc, va co the bien mat bat ky luc nao, cong tac tren cung mot du an ma khong roi vao hon loan?

Ban thay day, clone va push ai cung lam duoc. Nhung ngay khi ban bat dau lam viec theo nhom — ban pull va toan la xung dot, man hinh day <<<<< HEAD va >>>>>> mot-hash-ngau-nhien — do la luc con ac mong bat dau.

Toi da tu trai qua. Mot lap trinh vien backend moi trong nhom cua toi rat tai nang nhung khong xu ly duoc Git. Mot lan anh ay can merge mot hotfix khan cap, mat hang gio khong xong va den nho toi giup. Toi nhin vao do thi nhanh cua anh ay — troi oi, do la mot mo huy loan xung dang voi xuc tu cua Cthulhu: re nhanh, merge, re nhanh nua, merge nua, xen giua la may cai commit `merge branch ‘master’ into master’ vo nghia. Toi hoi anh da lam gi. Anh noi: “Toi khong pull duoc, nen toi fetch, roi rebase, rebase khong duoc nen toi merge, merge van co xung dot nen toi reset…”

Huyet ap cua toi len thang. Anh ay xu ly Git nhu mot cai giec uoc — lenh nao nghe xuôi tai thi nem vao va hy vong rang manh ai se tao nen ky tich. Spoiler: ky tich khong xay ra, nhung chung toi suyt gay ra su co.

Va day chi la phan noi cua tang bang. Sau hon, ban gap nhung “thuat cam” cua viec thao tac lich su nguyen tu: rebase -i, cherry-pick, filter-branch. Nhung thu nay de lam gi? Don gian ma noi, chung la “co may thoi gian” cua the gioi code — cho phep ban quay lai qua khu va thay doi lich su. Nhung nhu tat ca chung ta biet tu phim anh, chin trong muoi nguoi du lich thoi gian lam vo truc vu tru. git reflog la thuoc hoi han cua ban, nhung phan lon thoi gian ban con khong biet minh bi “dau doc” tu luc nao.

Triet ly thiet ke cua Git la no khong tin tuong bat ky trung tam quyen luc nao. No coi may tinh cua moi nha phat trien la mot “vu tru song song” hoan chinh (repository). Moi commit ban tao ra mot anh chup lich su moi trong vu tru do. Nhanh (branch) cho phep ban tao ra vo so vu tru song song tuy y. Merge va rebase la nhung co gang de hop nhat hai “dong thoi gian” khac nhau — hay nghi xem dieu do phuc tap the nao. Ngay ca cac nha vat ly cung chua hieu ra!

Khu vuc staging ton tai de ban co the kiem soat chinh xac nhung gi duoc commit. Nhanh co lap cong viec cua ban de khong gay nhieu cho nguoi khac. Merge xu ly san pham tat yeu cua cong tac: su phan ky. Tat ca phuc vu mot muc tieu “phan tan” vi dai. Git cho ban tu do vo han — va vo han cach de lam hong moi thu.

Vay cau hoi la: Git co het hy vong khong? Nguoi binh thuong khong bao gio hoc duoc no?

Khong han. Van de khong phai la Git — ma la cach chung ta hoc no. Phan lon cac huong dan ngoai kia hoac la danh sach lenh kieu tu dien, hoac la giai thich rieng le cac tinh huong. Tai lieu chinh thuc giong nhat cuon Xinhua Dictionary hang ngan trang — rat tot de tra mot tu, nhung ban khong hoc viet tieu thuyet tu mot cuon tu dien. Cac huong dan truc tuyen rac roi khap noi, nhu mot dong Lego roi rac khong co huong dan chi ban cach lap rap Millennium Falcon.

Do la ly do toi khanh khuyen nghi cac bai huong dan khong co gang bao qua moi thu ma tap trung vao cac tinh huong thuc te tan suat cao. Toi nghi “Cam nang Thuc hanh Git tu con so khong” cua nhom Bytedance kha hay.

No day ban su khac biet giua git pull va git pull --rebase va khi nao nen dung moi loai, thay vi bat ban hoc thuoc long. No dan ban tung buoc qua mot truong hop xung dot thuc te, chi ban cach giai quyet no mot cach lich thiep thay vi chi don gian xoa code cua nguoi khac. No giai thich khi nhanh tinh nang cua ban tuot lai phia sau nhanh chinh rat xa, ban nen dung merge hay rebase de dong bo, va uu nhuoc diem cua moi lua chon.

Suy cho cung, triet ly cua Git la: “Cho ban tu do vo han, va cung cho ban soi day de treo co ban len.” Mot cam nang tot day ban cach dung soi day do de det luoi hay leo vach da — khong vo tinh that mot cai thoong lung quanh co cua minh. Muc tieu cua chung ta khong phai la tro thanh mot nha khao co Git co the doc thuoc long moi lenh. Ma la tro thanh mot nghe nhan Git co the di chuyen nhanh nhang trong nhom, khong bao gio lam ban dong mac ke, va co the cuu van tinh the khi can.