Làm sao để cập nhật, giám sát những branch đã được đẩy lên git repository: git fetch - QuânSysAd's Blog

19 tháng 7 2018

Làm sao để cập nhật, giám sát những branch đã được đẩy lên git repository: git fetch

git fetch: Lấy tất cả những thay đổi ở tất cả remote branch nhưng không merge chúng ở local.
git pull: Lấy tất cả những gì ở repote với cùng tên và merge chúng.
Một trường hợp sử dụng:
Ở đây giả sử ta có nhánh chính : branch master
Và một nhánh mới: branch newbranch
Bạn đang làm việc bắt đầu ở commit cập nhật mới nhất so với remote server, đang sửa đổi ở local repository.
Cùng lúc đó, một thành viên ở nhóm thứ 2 tạo ra một branch mới trên remote server và commit lên server một bản sửa lỗi ở branch này. Và để đó không merge chúng với nhánh chính.
Thành viên này dĩ nhiên là không biết bạn đang sửa ở nhánh chính. Và bạn cũng không biết lúc này có ai đó đã tạo ra một nhánh (branch) sửa lỗi đó.
Đến thời điểm lúc này, bạn đã làm việc ở local xong, chuẩn bị stage file và đẩy lên remote repository ở nhánh master. Tất nhiên là bạn sẽ commit được và không gặp bất cứ điều gì trở ngại. Nhưng ở đây sẽ có 2 cách xử lý đối với nhánh phụ kia.
Cách 1: Là bạn cứ commit lên, sau đó dùng git fetch để cập nhật và kéo những thông tin về branch mới tạo về. Sau đó merge branch master với branch mới. Xử lý các merge conflict nếu có và sau đó lại commit ngược trở lại branch master. Sau đó xoá bỏ branch ở local đi. Cách này có vẻ hơi rườm rà và tiềm ẩn nhiều sai lầm mắc phải.
Cách 2: Là bạn git fetch ngay từ đầu để lấy tất cả các branch mới tạo cùng các commit liên quan tới các branch đó. Thực hiện git merge branch với brach mới tạo ra. Rồi sau đó commit ngược trở lại. Sau đó xoá bớt branch đi. Cách này có vẻ thuận hơn, nhưng yêu cầu phải đặt ra một luật lệ là chỉ có một người (quản lý chính hoặc trưởng nhóm) được merge vào master branch, những người còn lại thì chỉ việc tạo branch mới và để đó, khi nào xong thì commit lên nhánh phụ và thông báo việc commit đó bằng phần mềm chat bên ngoài.
Một số lưu ý:
Tất cả các thao tác merged các branch bạn sẽ thực hiện ở local repository. Như vậy bạn sẽ phải cập nhật và xử lý các sửa đổi nếu có trong khoảng thời gian giữa 2 lần commit của cùng một nhánh. Tức là bạn sẽ phải git fetch và xử lý bằng git merge.
Ví dụ như giả sử thành viên thứ 2 không tạo branch mới mà commit thẳng vào trong master branch. Lúc này bạn mà commit lên thì sẽ phải fetch về, merge lại, xử lý các conflict và sau đó lại đẩy ngược lên, hoặc dùng git pull để làm 2 thao tác này cùng lúc. Đó là lý do sử dụng của lệnh git pull, nhưng nó chỉ làm việc với 1 branch. Trong trường hợp có nhiều branch thì hãy dùng git fetch để cập nhật thông tin của nhiều branch, do đó, bạn có thể phán đoán và chọn merged branch nào trước và commit lên theo một thứ tự nhất định để giảm thiểu các conflict merged.
Bạn có thể kiểm tra có các branch nào trên remote server bằng lệnh: git remote show origin hoặc dùng lệnh : git ls-remote --heads origin

Không có nhận xét nào: