Các tính huống hay gặp khi làm việc với Git
NỘI DUNG BÀI VIẾT
Trong bài viết này chúng ta hãy cùng nhau tìm hiểu các tình huống mà chúng ta hay gặp phải khi thao tác với git và cách để xử lý những lỗi đó nhé.
Các tính huống liên quan đến branch
Xóa một branch
- Ví dụ khi muốn xóa một branch có tên là branch1 ở trên local thì có một số các lưu ý như sau:
- Nếu đang ở nhánh branch1 thì cần phải checkout sang nhánh khác để xóa.
- Nếu đang không ở nhánh branch1 thì thực hiện câu lệnh git branch -D branch1 để xóá.
- Còn nếu như bạn muốn xóa một branch trên remote thì chúng ta sẽ sử dụng câu lệnh với cấu trúc như sau: git push origin –delete branch1
Khôi phục một branch đã bị xóa
- Giả sử chúng ta có một nhánh tên là branch1 và không may xóa mất nó khi chưa merge code. Vậy sử dụng code nào để lấy lại branch này ?
- Có 2 cách để có thể khôi phục một branch đã bị xóa đi nhưng trước tiên các bạn cần phải sử dụng lệnh: git reflog để kiểm tra lịch sử reflog:
- Quay lại thời điểm mà chúng ta mong muốn (trước khi xóa một branch) bằng câu lệnh git hard reset
- Lấy lại lịch sử commit dựa trên reflog bằng câu lệnh cherry-pick <id-commit>
Đặt sai tên branch
- Nếu bạn đặt sai tên branch và muốn đổi lại tên branch đó ví dụ như muốn tạo một branch là branch1 và đặt nhầm thành brnach1 và muốn đổi lại thì cấu trúc câu lệnh sẽ như sau:
- Ví dụ nếu bạn đang ở một branch khác giả sử là master thì chúng ta chỉ cần sử dụng câu lệnh sau: git branch -m brnach1 branch1
- Nếu bạn đang ở nhánh brnach1 và muốn đối thành branch1 thì câu lệnh sẽ như sau: git branch -m branch
Không checkout được sang nhánh khác
Nhiều trường hợp, có những file chẳng biết nó từ đâu, hoặc lúc mới đầu import project sẽ thấy rất nhiều file mà mình không làm cách nào có thể xử lý được cũng như không thể checkout được sang nhánh khác.
Các tình huống liên quan đến commit
Chỉnh sửa commit cuối cùng
Khi bạn thực hiện commit xong, nhưng nội dung commit sai hoặc bạn muốn thay đổi nội dung khác. Bạn thực hiện lệch sau: git commit –amend
Revert commit hiện tại
Sử dụng cho việc ghi lại một số commit để đảo ngược tác dụng của một số commit trước đó: git revert
Xóa một file đã được push lên remote
- Làm thế nào để xoá tận gốc file mà nó đã từng commit và push lên server, file đó lại ở nhiều nhánh nữa.
- Ví dụ: Chúng ta có 2 branch: master, dev và file readme.MD. File này đều có ở cả 2 branch và đã được commit push lên remote vậy làm thế nào để xóa được nó ở các branch. Chúng ta sẽ thực hiện như sau:
- Để xóa ở local chúng ta sẽ sử dụng lệnh: git filter-branch –force –index-filter \
“git rm –cached –ignore-unmatch <path_of_file>” \
–prune-empty –tag-name-filter cat — –all - Để xóa ở remote chúng ta sẽ sử dụng lệnh sau:
git push origin –force –all
- Để xóa ở local chúng ta sẽ sử dụng lệnh: git filter-branch –force –index-filter \
Xóa nhiều file trong một nhánh
Giả sử chúng ta muốn xóa một folder của dự án trên nhánh master chúng ta sẽ sử dụng lệnh sau các lệnh như sau:
- git checkout master: để chắc chắn bạn đang ở nhánh master
- git rm -r folder-name: để xóa một folder
- git commit -m “Remove duplicated directory”: commit lại thao tác xóa vừa thực hiện
- git push origin master: push những thay đổi lên trên remote
Xảy ra conflict khi làm việc nhóm
Khi bạn làm việc teamwork thì việc xảy ra conflict là khá thường xuyên. Nó xảy khi khi bạn rebase code từ một branch khác.
Các bước để thực hiện sửa conflict như sau: Ví dụ: bạn có branch developer_conflict, bạn thực hiện rebase một branch khác sau khi thực hiện lệnh này đã xảy ra conflict
- Bạn kiểm tra các file bị conflict:git status
- Tìm đến từng file bị conflict và sửa chúng. Lưu ý rằng, khi làm việc teamwork bạn cần phải hỏi những người có liên quan đến phần đó để thực hiện chỉnh sửa cho đúng, tránh việc xóa nhầm gây mất code.
- Thêm lại các file sửa đổi vào commit: git add .
- Tiếp theo thực hiện lệnh: git rebase –continue
Nếu có vấn đề gì xảy ra trong quá trình rebase thì bạn có thể hủy quá trình rebase bằng lệnh: git rebase –abort
Hoặc có những file thay đổi chưa được thêm trong branch đó, bạn cần thêm lệnh sau để tránh mất code: git rebase –skip
- Sau đó thực hiện commit: git commit –amend
- Cuối cùng là push lên server: git push origin <tên branch> -f
Đọc thêm: Giới thiệu về firebase
Trả lời