1. Branch la gi va tai sao chung can thiet?
Lam viec voi branches (cac branch) trong Git la mot trong nhung khia canh then chot cua quan ly phien ban, giup ban co the song song phat trien nhieu dong cong viec trong cung mot repository. Branching bien Git thanh mot cong cu manh me cho lam viec nhom, thu nghiem va quan ly nhieu phien ban khac nhau cua du an.
gitGraph
commit id: "Initial setup"
commit id: "Add base features"
branch feature/new-idea
checkout feature/new-idea
commit id: "Implement new logic"
commit id: "Refactor the logic"
checkout main
commit id: "Urgent bugfix on main"
merge feature/new-idea
commit id: "Prepare for release"
main tach ra mot branch moi,
feature/new-idea, de phat trien an toan. Sau khi hoan thanh cong viec, no duoc merge tro lai vao
main.
Hay tuong tuong rang ban muon sua doi mot dieu gi do rat lon trong du an cua minh hoac tien hanh mot thu nghiem rui ro. Ban se lam gi neu khong co Git? Rat co the ban se copy toan bo du an sang mot thu muc moi va lam viec trong do. Neu ket qua on - ban se chuyen no ve thu muc chinh. Neu khong - ban chi can xoa ban sao do.
Cac branch trong Git hoat dong theo cung nguyen tac do, nhung tinh te hon nhieu. Hay xem mot vi du qua viec viet sach:
- Ban co mot ban thao hoan chinh (day la branch chinh cua ban
main). - Ban muon viet mot ket thuc thay the (tao mot branch moi, vi du
feature/new-idea). - Ban viet ket thuc moi ma khong anh huong den noi dung chinh cua ban thao (lam viec trong branch moi).
- Neu ket thuc moi tot hon, ban thay the ban cu bang no (thuc hien merge cac branch -
merge). - Ban thao cu voi ket thuc khong can thiet co the duoc xoa (xoa branch).
2. Tao branch moi va lam viec trong do
Buoc 1. Mo menu quan ly branch.
Tren thanh cong cu chinh, ben canh ten du an co mot widget hien thi ten cua branch hien tai (mac dinh la main). Hay nhan vao no va chon + New Branch.
Buoc 2. Ten cua branch moi.
Thuc hanh tot la dat ten branch phu hop voi nhiem vu ban dang giai quyet. Vi du, feature/add-usage-examples.
Sau khi tao branch, IDE se tu dong chuyen sang no. Ban se thay ten moi trong cung widget do.
Buoc 3. Them thay doi va commit chung.
Bay gio ban dang o trong "sandbox" cua minh. Hay them vao file README.md mot phan moi voi cac vi du su dung. Thuc hien cac thay doi va tao commit, nhu ban da hoc trong bai giang truoc.
3. Chuyen giua cac branch
Cac thay doi cua ban voi vi du su dung hien da duoc luu an toan trong branch feature/add-usage-examples. Hay quay lai branch chinh main va xem ben trong co gi.
Buoc 1. Hay nhan lai vao widget chua ten branch hien tai o goc tren ben trai.
Buoc 2. Trong danh sach Local hoac Recent, hay chon branch main, va trong submenu vua xuat hien, nhan Checkout.
Buoc 3. Kiem tra ket qua.
Ngay khi ban chuyen sang, hay mo file README.md. Ban se thay rang phan vi du su dung khong con o do nua! No da o lai trong branch khac. Nhu vay, ban co the lam viec voi chuc nang moi ma khong anh huong den phien ban on dinh trong branch main.
4. Merge cac branch
Lenh merge lay tat ca commit tu branch feature/add-usage-examples (trong truong hop nay la commit C3) va hop nhat chung voi branch hien tai main, tao ra mot commit merge moi.
gitGraph
commit id: "C1"
commit id: "C2"
branch feature/add-examples
checkout feature/add-examples
commit id: "C3: Add new section"
checkout main
merge feature/add-examples
Vay la ban da hoan thanh cong viec trong branch feature/add-usage-examples va muon dua cac thay doi nay vao du an chinh.
Buoc 1. Chuyen sang branch dich.
Hay dam bao rang ban dang o trong branch NAO ma ban muon them thay doi vao. Trong truong hop nay la main.
Buoc 2. Thuc hien merge.
Hay nhan lai vao widget quan ly branch. Trong danh sach, chon branch TU DAU ma ban muon lay thay doi (feature/add-usage-examples), va trong submenu chon Merge 'feature/add-usage-examples' into 'main'.
Buoc 3. Kiem tra ket qua.
Bay gio, trong file README.md o branch main, phan moi voi cac vi du da xuat hien. Ban da hop nhat thanh cong cong viec cua minh voi phien ban chinh cua du an!
5. Xung dot khi merge
Voi nguoi moi bat dau, tu "conflict" thuong nghe rat dang so, nhung trong phat trien nhom thi do lai la dieu hoan toan binh thuong. Xung dot xay ra khi trong ca hai branch dang merge deu da bi sua cung mot dong trong cung mot file. Git khong the tu quyet dinh phien ban nao dung hon va se yeu cau su giup do cua ban.
Va day chinh la noi suc manh cua IntelliJ IDEA (va GoLand) duoc the hien. Xu ly xung dot trong terminal - khong phai la trai nghiem de chiu gi, nhung cong cu three-way merge duoc tich hop san trong IDE bien nhiem vu nay thanh mot quy trinh ro rang va don gian.
gitGraph
commit id: "C1: Co so chung"
branch feature/new-title
checkout main
commit id: "C2: Thay doi trong main"
checkout feature/new-title
commit id: "C3: Thay doi trong feature"
main va
feature/new-title, deu co cac commit moi (C2 va C3) duoc dua tren nguoi tien nhiem chung (C1). Dieu nay chac chan se dan toi xung dot khi merge.
Hay mo phong mot xung dot:
- Hay dam bao rang ban dang o trong branch
main, va khong co thay doi nao chua luu trong cua so Commit. - Tao mot branch moi
feature/new-title, nhung chua chuyen sang no. Hay dam bao rang dau Checkout branch da duoc bo chon. - Bay gio, khi dang o trong branch
main, hay sua dong dau tien trongREADME.mdthanh "My Awesome Project" va taocommit. - Chuyen sang branch
feature/new-title. Ban se thay dong dau tien trongREADME.mdo day van giu nguyen gia tri cu: do la trang thai cua file tai thoi diem tao branch. Hay sua cung dong do thanh "My Super Project" va taocommit. - Quay lai branch
mainva thuc hien merge voifeature/new-title.
Luc nay Git se thay rang ca hai lich su da bi thay doi tai cung mot vi tri. No se hien thi cho ban mot cua so de xu ly xung dot (Merge Conflicts).
Hay nhan nut Merge de mo cong cu xu ly xung dot. Ban se thay gi o day:
- Ben trai (Your changes): ban cua file tu branch hien tai cua ban (noi ban merge vao -
main). - Ben phai (Changes from branch): ban cua file tu branch ma ban dang merge.
- O giua (Result): ban ket qua cua file, phan ma ban phai tu tay lap lai.
Ban co the bam cac mui ten >> hoac << (hoac cac dau x de huy), de chap nhan toan bo mot phuong an nao do. Ban cung co the chi can go dung van ban vao khung trung tam.
Khi ket qua trong khung trung tam da on va tat ca cac xung dot da duoc giai quyet, hay nhan Apply (hoac Save Changes and Finish). IDE se tu tao mot commit merge dac biet, va xung dot se duoc giai quyet.
Tai sao doi khi khong xuat hien xung dot?
Co the xay ra truong hop ban da thuc hien tat ca cac buoc, nhung khong co xung dot nao. Thuong la do Git da co the thuc hien fast-forward merge (merge tua nhanh). Dieu nay xay ra khi lich su cua mot branch don gian la tiep noi lich su cua branch khac, va chung khong re theo hai huong song song.
Vi du:
- Hay dam bao rang ban dang o trong
main(gia su la C1). - Ban tao mot commit moi trong branch
mainvoi noi dung "My Awesome Project". Branchmainbay gio tro den commit C2 (main -> C1 -> C2). - Ban tao branch
feature/new-titletu vi tri hien tai cua branch main. Dieu do co nghia la branch moi cung bat dau tu commit C2. - Ban tao commit trong
feature/new-titlevoi noi dung "My Super Project". Branch nay "tien len phia truoc" va bay gio tro den commit C3 (feature/new-title -> C1 -> C2 -> C3). - Ban quay lai
main(van dang o commit C2) va ra lenh merge feature/new-title.
Git xem xet tinh huong va thay rang branch main la nguoi tien nhiem truc tiep cua branch feature/new-title. Trong lich su main khong co commit moi nao trong luc ban lam viec o branch khac. Git nghi: "Ah, chi can dua main tien len toi commit C3. Khong co mau thuan nao ca". Va no don gian chi chuyen con tro main den commit C3 ma khong co xung dot.
gitGraph
commit id: "C1"
commit id: "C2"
branch feature/new-title
checkout feature/new-title
commit id: "C3"
checkout main
merge feature/new-title
6. Xem lai lich su thay doi
De hieu ro hon dieu gi dang dien ra trong du an cua ban, se rat huu ich neu xem lich su cua no.
Mo cua so cong cu Git (thuong la bieu tuong tren thanh ben trai hoac o phia duoi cua so IDE) va chon tab Log hoac Show Git Log trong thanh cong cu Git. Ban se thay mot bieu dien do hoa cua tat ca cac branch va commit cua minh. Dieu nay giup ban de dang theo doi branch nao tach ra tu branch nao va chung da duoc merge o dau.
O day, ban co the nhan vao bat ky commit nao de xem nhung thay doi nao da duoc dua vao, ai da lam no va vao luc nao. Day that su la mot may thoi gian cho ma nguon cua ban!
GO TO FULL VERSION