Learn Git flow
Tìm hiểu git flow:
- Muc đích :
Nhằm hỗ trợ việc nhiều người cùng nhau phát triển trên cùng một bộ SRC
Ý tưởng :
Tạo ra các brand khác nhau phục vụ cho việc phát triển. Sau khi đã update chỉnh sửa hoàn thiện các chức năng nhỏ tại các brand sẽ thực hiện megre vào brand chính của sản phẩm.
Brand chính này chính là brand src hoàn thiện của dự án .
Luồng :
- Để có thể sử dụng được git ta cần tạo 1 kho chứa ở local (local reposity) và 1 kho chứa repo trên github . Mỗi dev sẽ có một local repo riêng. Khi file được modifile xong ở trang thái chuẩn bị commit thì ta cần đưa nó vào trạng thái sẵn sàng commit (staging) và sau đó ta thực hiện lựa chọn những file cần commit rồi commit ( khi đó file commited sẽ được chuyển vào kho chưa local repo) với tình trạng này file sẽ chưa lên repo của github. Ta cần thực hiện push các file cần lên reposity của github thì file mới xuất hiện trên kho chưa của github.
Có 4 trạng thái của file:
- Chưa commit
- Chuẩn bị commit
- Đã commit
- Đã push lên Github
- Trạng thái chưa commmit là nhưng file đang trong quá trình modifile hoặc đang phát triển.
-Chuẩn bị commit là nhưng file được xác định là đã modifile xong sẽ commit trong lần tiếp theo . - Đã commit (là những file đã được commit )
- Khi tạo một dự án mới ( ta cần tạo một kho chưa reposity tại local để lưu trữ )
Các lệnh git :
Nếu muốn file nào đó không đưa theo dõi thay đổi và commit ta ghi thông tin file đó trong:
.gitignore
git init (Tạo repo tại local)
git config để thiết lặp tên và email thông tin này sẽ được lấy để log khi commit file lên git.
git config --global user.name "thongnguyen"
git config --global user.email "abc@gmail.com"
Để chuyển file vào trạng thái chuẩn bị commit .
git add file1 file2 file5 hoặc . để đưa toàn bộ nhưng file thay đổi vào trạng thái chuẩn bị commit.
Chuyển file từ trạng thái chuẩn bị commit vào trạng thái đã commit ( đã đưa vào repo local)
git commit file1 file2 -m "message" hoặc . để commit tất cả các file có thay đổi .
Chuyể file từ repo local lên repo github
vd : git add resources/views/frontend/homedetail.blade.php
git push tên_file hoặc .
git status ( để kiểm tra trang thái các file)
git log ( để show tất cả log thông tin các lần commit)
git clone url_checkout_gitprj
- Khi 1 dự án có nhiều brand khác nhau được tạo ra phục vụ việc phát triển 1 chức năng hoặc sửa update chức năng ta có các lệnh git phục vụ việc thao tác với các brand này :
-git branch (hiển thị tất cả các brand đang có )
-git branch branch_name (dùng để tạo mới 1 branch , brand mới sẽ có dữ liệu được double từ branch main, lưu ý phải commit branch master(main) lên để git hiểu để copy)
-git branch branch_name -d (delete 1 branch, muốn xóa bạn không được ở trong brand xóa)
-git checkout -b branch_name master (tạo branch copy toàn bộ src từ master)
-git checkout branch_name ( để chuyển qua lại giữa các branch )
-git pull (hợp nhất các thay đổi từ repo github vào local repo.
git pull (vd :git pull origin issue01)
git pull (= git fetch + git merge) lấy về và thực hiện merge luôn dẫn tới nếu cùng nhiều người cùng làm thì khả năng xảy ra xung đột . còn git fetch chỉ lấy về trang thái các thay đổi chứ chưa merge và thư mục đang làm việc
- Thao tác update các thao đổi trên repo merge vào brand local repo
-git fetch ( update các thay đổi trên repo github về)
hoặc git fetch origin
git branch -r (để view git đang lấy trạng thái từ nhưng brand remote nào
sau khi fetch dữ liệu không merge vào luôn mà lưu tại origin/main đối với nhanh main , các nhanh còn lại tương tự
-khi ok đồng ý với các thay đổi thì chạy lệnh merge để merge vào nhanh đang phát triển
- git merge origin/master master (master : tên nhánh cần merge)
- git stash (có thể stash nhiều lần)
Cần dùng khi đang làm mà muốn chuyển sang một branch khác mà chưa muốn commit. stash giúp đưa các file đó vào bộ nhớ tạm.(nếu không branch chưa sạch sẽ không chuyển được sang branch khác)
- Muốn lưu toàn bộ nội đung đang làm dở .
git stash save hoặc git stash - Khi muốn xem danh sách các stash đã lưu :
git stash list
+Xem chi tiết cả nội dung thay đổi
git stash list -p
+Chi tiết hơn nữa :
git stash show stash@{1}
-Khi muốn apply stash vào brand hiện tại
git stash apply để lấy toàn bộ từ bộ nhớ tạm ra
git stash apply stash@{1} (lấy 1 stash được chỉ đinh)
-Khi muốn xóa các stash .
git stash drop ( xóa từng stash 1)
git stash clear (xóa tất cả các stash đang có )
- Đẩy branch lên github
-git push origin name_branch (sau khi tạo branch dưới local cần đẩy lên repo github)
Trước khi push branch nên cấu hình origin và upstream
-git push --set-upstream origin name_branch // cái này cần xem lại ko hiểu sao cần cái này
-git checkout branch_name -b( chuyển qua branch_name nếu không có thì khởi tạo và clone data của branch hiện tại qua branch mới khởi tạo)
- git remote add (để kết nối 1repo ở local với repo github)
vd :
git remote add origin https://github.com/tmi-thongnx/test.git
5 . git rebase (sử dụng song song với git merge )
- Khác với merge là sắp xếp các commit theo dòng timeline commit còn git rebase sẽ sắp xếp commit khi merge và nhánh chính theo base trên nhánh được rebase.
- git rebase nếu không conflic sẽ không tạo ra commit mới còn git merge thì sẽ tạo ra commit mới.
=> nói chung là nó dùng để sắp xếp làm gọn lại các commit ở branch phụ để branch master được tường mình gọn gàng.
=> nói chung là nó dùng để sắp xếp làm gọn lại các commit ở branch phụ để branch master được tường mình gọn gàng.
Nếu dùng git merge từ bran a => bran b thì brand b sẽ có toàn bộ log các commit của branch a + commit hiện có của branch b
-git log --oneline (view log 1 dòng)
- git log --oneline --graph (view các commit dưới dạng cây thư mục)
- git rebase branch01 ( lệnh sẽ thực hiện merge các commit lây branch01 làm gốc mà merge thêm các commit của branch hiện tại nếu xảy ra confic sẽ cho xử lý conflic và custom lại thành 1 nội dung commit khác )
- git add (thực hiện sau khi đã merge conflic)
- git rebase --continue ( lệnh sử dụng để tiếp tục qua trình rebase sau khi đã xử lý conflic)
-git rebase --edit-todo (khi đang rebase mà tắt thì tiếp tục rebase bằng lệnh)
6 . Cherry-pick
chọn 1 commit từ brand khác merge vào branch hiện tại (nghĩa là cái log commit từ brand đó cũng được kéo hết sang brand được merge sắp xếp theo đúng timeline comit )
git log ( xem các lần commit )
git show ver_commit (show detail lần commit đó gồm những thay đổi gi)
git cherry-pick ver_commit(ver commit chọn để merge vào branch hiện tại)