chim bay

Saturday, November 28, 2015

merge và xử lý lỗi conflic Pull Request trên Git

Hướng dẫn merge và xử lý lỗi conflic Pull Request trên Git

Giả sử chúng ta chưa có gì bây giờ muốn merge các pull request từ các lập trình viên. Hãy tạo một thư mục nào đó và click chuột phải vào thư mục đó chọn Git Bash. Tiếp theo đánh lệnh:
$ git init
$ git clone https://github.com/nukeviet/nukeviet.git -b develop .
Hai lệnh trên để thiết lập một kho mới và tải kho nukeviet về thư mục vừa tạo. Khi clone xong mặc định sẽ chọn nhánh develop. (chú ý có dấu chấm ở cuối trong câu lệnh git clone, nếu không nó sẽ tạo vào trong 1 thư mục nữa )
Bây giờ ta tiếp tục nhập lệnh sau:
$ git remote add vuthao https://github.com/vuthao/nukeviet.git
$ git fetch vuthao
$ git merge vuthao/develop
3 lệnh đó sẽ thực hiện việc tạo một nhánh ảo từ thành viên vuthao trên github sau đó lấy toàn bộ pull request của thành viên đó, nhập nhánh develop của vuthao vào nhánh đang làm việc của kho code hiện tại (tức nhánh develop của nukeviet).
Nếu quá trình merge tự động diễn ra thành công ta chỉ cần thực hiện lệnh
$ git push origin develop
Để hoàn tất việc merge pull request
Nếu merge bị conflic thì ta phải xử lý các file conflic trước, sau đó đưa vào index, commit rồi mới push lên kho code. Thứ tự thực hiện như sau.
Để xem thử conflic chỗ nào ta đánh
$ git diff
Khi đó các file bị conflic sẽ hiển thị đoạn code lỗi. Ta chỉ cần mở các file đó lên, chỉnh sửa đoạn code đó. Sau khi chỉnh sửa xong ta add file đó vào index bằng cách dùng lệnh
$ git add [file]
trong đó [file] là đường dẫn đến file ví dụ
$ git add modules/news/admin/content.php
Để xem trạng thái các file, thư mục … dùng lệnh
$ git status
Để hiển thị status gọn hơn ta dùng option -s
$ git status -s
Sau khi đã hoàn tất xử lý conflic … ta commit các chỉnh sửa vừa rồi:
$ git commit -m "Message"
Trong đó message là nội dung commit. Cuối cùng là push lên kho code.
$ git push origin develop

Một số lệnh git khác

Để tạm thời bỏ qua những thay đổi trong một tập tin nhất định, không muốn tập tin đó hiển thị trong các file thay đổi sử dụng lệnh:
git update-index --assume-unchanged path_file
Trong NukeViet Không đưa các file sau lên kho code khi có thay đổi .htaccess data/config_global.php data/ip_files/*.php
Sau đó, khi muốn tập tin đó hiển thị trong các file thay đổi:
git update-index --no-assume-unchanged path_file
Thay đổi commit message cuối
git commit -a --amend -m "My new commit message"
Reset project về ID trước đó
git reset --hard idcommit
Sau đó dùng lệnh sau để cập nhật lên kho git
fix commit: git push -f
fix merge conflicts in Git?
git mergetool
Liệt kê tất cả các file thay đổi từ id 3bf2d29 đến id b2d0398
git diff-tree -r --name-only 3bf2d29 b2d0398
Liệt kê tất cả các file đã xóa từ id 3bf2d29 đến id b2d0398
git diff-tree -r --name-only --diff-filter=D 3bf2d29 b2d0398
Zip lại các file thay đổi từ id 3bf2d29 đến id b2d0398 (không có file đã xóa)
git archive -o update1.zip HEAD $(git diff-tree -r --name-only --diff-filter=ACMRT 3bf2d29 b2d0398)
Ghi chú: Các option của diff-filter –diff-filter=[ACDMRTUXB*]
  A Added
  C Copied
  D Deleted
  M Modified
  R Renamed
  T have their type (mode) changed
  U Unmerged
  X Unknown
  B have had their pairing Broken
  * All-or-none
Xóa 1 nhánh trên kho code
git push origin --delete BRANCH_NAME
Đưa các tag được đánh dầu lên kho code
git push --tags

0 comments:

Post a Comment