Ở bài trước mình có chia sẻ cậu em Dev commit “hehehe”. Nhiều anh em mới vào hỏi rất vu vơ: Git là gì? Git Commit là Gì? Em có nghe anh khóa trên nói Github nó giống Git không anh?… Cũng hơi sốc vì thời buổi AI mà những cái này google cái cũng ra. Nên có lời khuyên thực tế cho anh em là chủ động nghiên cứu trước khi hỏi gì đó sẽ vừa giúp anh em tăng tính làm việc độc lập cũng như tiết kiệm thời gian nhé.
Xong có nhận được câu hỏi là “Trong thực tế khi mới đi làm có phỏng vấn Git không và hỏi những gì ạ?” câu hỏi này thì hợp lý hơn vì dù sao thực tế cũng tùy người sẽ có những phần hỏi khác nhau. Nên mình mới làm ra bài viết tổng hợp 50 câu hỏi phỏng vấn Git phổ biến nhất mà trước đây có research và take note lại cũng như dựa trên cả kinh nghiệm thực tế cá nhân của mình. Các câu hỏi từ basic nhất đến advanced hơn mong rằng sẽ giúp ích được anh em. À sẽ có 2 phần, phần đầu là làm trắc nhiệm – phần cuối là các giải thích cụ thể cho từng câu hỏi nhé. Anh em thấy hay thì bookmark lại trong tài khoản sau cần có thể xem nhé.
Các Phần Kiến Thức Trong Git
Git có 2 phần rất rõ ràng:
- Cách sử dụng các câu lệnh Git các anh em trong team làm việc với nhau mà không sảy ra lỗi, conflix,… và nếu bị thì xử lý như thế nào.
- Git Workflow cực kỳ quan trọng trong việc code đúng nhánh, đưa dự án của mình đi đúng môi trường, triển khai tối ưu,…
Các Câu Hỏi Phỏng Vấn Git
Note: Làm các câu hỏi trắc nhiệm xong rồi mới kéo xuống coi giải thích chi tiết nha anh em. Nghiêm túc lên 😀
1. Git là gì?
2. Git và GitHub có khác nhau không?
3. Lợi ích của việc sử dụng Git là gì?
4. Git sử dụng ngôn ngữ nào?
5. Kho lưu trữ trong Git là gì và làm thế nào để tạo một kho lưu trữ?
6. Kho lưu trữ trống (bare repository) là gì?
7. Git khác với SVN như thế nào?
8. Git Commit là gì và nội dung của đối tượng commit là gì?
9. Các chức năng lưu trữ kho lưu trữ Git khác nhau là gì?
10. Xung đột trong Git là gì?
11. Quy trình giải quyết xung đột trong Git là gì?
12. Branching là gì và có bao nhiêu loại branching trong Git?
13. SubGit là gì?
14. Các công dụng của git instaweb là gì?
15. Các lệnh Git phổ biến và công dụng của chúng là gì?
16. Sự khác biệt giữa clone, fork và branch trên Git là gì?
17. Làm thế nào để một “branch” khác với một “pull request”?
18. Bạn có biết cách sử dụng “git cherry-pick”?
19. Khu vực staging trong Git là gì?
20. Có hợp lý để tạo một commit bổ sung hoặc sửa đổi một commit hiện có không?
21. Sự khác biệt giữa head, working tree và index trong Git là gì?
22. Công dụng của “git config” là gì?
23. git stash là gì?
24. Loại công việc nào bạn có thể khôi phục bằng cách khôi phục một nhánh đã xóa?
25. ‘git diff’ khác với ‘git status’ như thế nào?
26. Làm thế nào tôi có thể biết nếu một nhánh đã được hợp nhất vào master?
27. Nội dung của ‘hooks’ trong Git là gì?
28. Làm thế nào tôi có thể tìm danh sách các tệp đã thay đổi trong một commit cụ thể?
29. Làm thế nào tôi có thể xóa một tệp khỏi git mà không xóa khỏi hệ thống tệp?
30. Sự khác biệt giữa rebasing và merge trong Git là gì?
31. Sự khác biệt giữa revert và reset là gì?
32. Làm thế nào bạn có thể hoàn nguyên một commit đã được đẩy và công khai?
33. Lợi ích của quy trình làm việc forking là gì?
34. Sự khác biệt giữa ‘git fetch’ và ‘git pull’ là gì?
35. Cú pháp cho rebasing trong Git là gì?
36. Công dụng của ‘git bisect’ là gì?
37. Git stash drop là gì?
38. Một số máy khách Git đồ họa tốt nhất cho LINUX là gì?
39. git pull origin là gì?
40. Lợi ích mà các công cụ SCM cung cấp với Git là gì?
41. Quy trình để nén N commit cuối cùng thành một commit duy nhất là gì?
42. Làm thế nào tôi nên cấu hình một kho lưu trữ Git để chạy các công cụ kiểm tra tính hợp lệ của mã?
43. git reflog là gì?
44. Làm thế nào tôi có thể cherry-pick một commit hợp nhất?
45. Làm thế nào tôi có thể sao chép một commit trong một nhánh sang một nhánh khác?
46. Nếu một trong những đồng đội của tôi vô tình xóa một nhánh và đẩy các thay đổi vào kho lưu trữ git trung tâm và tôi muốn khôi phục nhánh đó thì sao?
47. Quy trình làm việc Gitflow là gì?
48. ‘git remote’ khác với ‘git clone’ như thế nào?
49. Lệnh để sửa một commit bị hỏng là gì?
50. Mô hình phân nhánh chung trong Git là gì?
Đáp Án Và Giải Thích Cho Các Câu Hỏi Phỏng Vấn Git
Cho dù bạn là người mới bắt đầu hay đã có một số năm kinh nghiệm, bạn có thể gặp một số câu hỏi cơ bản trong cuộc phỏng vấn Git của mình. Phần này bao gồm các câu hỏi phỏng vấn Git cơ bản. Chúng ta cùng tìm hiểu.
Khổ văn kém nên có những phần mình dùng chatgpt nên anh em tập trung nội dung và hiểu cho đừng nói nghe như chatgpt nhé, viết bài này mớ kiến thức cũng mệt à hihi.
1. Git là gì?
Trả lời: Ứng viên sẽ tìm thấy câu hỏi này trong số các câu hỏi phỏng vấn Git phổ biến nhất. Git là một hệ thống quản lý phiên bản phân tán (DVCS) và hệ thống quản lý mã nguồn (SCMS) giúp theo dõi các thay đổi đối với một tệp. Chức năng của Git cho phép các nhà phát triển quay lại bất kỳ thay đổi cụ thể nào. Git cũng có thể giúp quản lý các dự án nhỏ và lớn với tốc độ và hiệu quả cao hơn. Kiến trúc phân tán của Git là lý do chính cho sự vượt trội của nó so với các hệ thống quản lý phiên bản khác. Tính năng đáng chú ý nhất của Git là nó không phụ thuộc vào một máy chủ trung tâm để lưu trữ tất cả các phiên bản của các tệp trong một dự án.
2. Git và GitHub có khác nhau không?
Trả lời: Ứng viên có thể gặp câu hỏi này trong số các câu hỏi phỏng vấn Git cơ bản. Git là một hệ thống quản lý phiên bản để theo dõi các thay đổi trong mã nguồn trong quá trình phát triển phần mềm. Mặt khác, GitHub là dịch vụ lưu trữ kho lưu trữ cho Git. GitHub cũng cung cấp các tính năng bổ sung của riêng nó. Một số tính năng quan trọng trong GitHub bao gồm kiểm soát truy cập và các tính năng cộng tác. Ngoài ra, GitHub cũng cung cấp các công cụ quản lý tác vụ đơn giản cho các dự án khác nhau.
3. Lợi ích của việc sử dụng Git là gì?
Trả lời: Ứng viên nên chuẩn bị cho câu hỏi này vì nó là một trong những câu hỏi phỏng vấn Git phổ biến nhất. Dưới đây là những lợi ích đáng chú ý nhất của Git.
- Bất kỳ dự án nào cũng có thể sử dụng Git mà không có bất kỳ hạn chế nào
- Git hỗ trợ cộng tác
- Tính khả dụng cao cùng với chức năng dự phòng và sao chép dữ liệu
- Sử dụng đĩa và hiệu suất mạng tốt hơn
- Chỉ có một thư mục Git cho mỗi kho lưu trữ
4. Git sử dụng ngôn ngữ nào?
Trả lời: Đây là một trong những câu hỏi tưởng chừng đơn giản nhưng quan trọng trong số các câu hỏi phỏng vấn Git hàng đầu. Tuy nhiên, ứng viên nên cố gắng trình bày lý do sử dụng ngôn ngữ C, thay vì chỉ đơn giản nói ra! Git sử dụng ngôn ngữ C để giảm thiểu chi phí thời gian chạy phổ biến trong các ngôn ngữ cấp cao.
5. Kho lưu trữ trong Git là gì và làm thế nào bạn có thể tạo một kho lưu trữ?
Trả lời: Ứng viên sẽ gặp một chút kỹ thuật khi trả lời loại câu hỏi phỏng vấn Git cơ bản này. Kho lưu trữ trong Git là nơi Git sử dụng để lưu trữ tất cả các tệp. Git lưu trữ các tệp trong kho lưu trữ cục bộ hoặc trong kho lưu trữ từ xa. Quy trình tạo một kho lưu trữ trong Git là một trong những câu hỏi thường được hỏi nhất. Trước tiên, bạn phải tạo một thư mục cho dự án để tạo kho lưu trữ. Sau đó, bạn có thể chạy lệnh “git init” và tạo một kho lưu trữ git trong thư mục dự án.
6. Kho lưu trữ trống (bare repository) là gì?
Trả lời: Ứng viên cũng có thể gặp câu hỏi này trong số các câu hỏi phỏng vấn Git hàng đầu như một câu hỏi tiếp theo. Một kho lưu trữ trống chứa thông tin về quản lý phiên bản. Kho lưu trữ trống không chứa bất kỳ tệp làm việc nào hoặc thư mục con .git đặc biệt. Ngược lại, kho lưu trữ trống chứa tất cả thông tin của thư mục con .git trong thư mục chính trực tiếp. Thư mục làm việc chứa cây làm việc, tức là các bản sao đã được xác minh của các tệp dự án và thư mục con .git với tất cả lịch sử sửa đổi liên quan đến Git cho kho lưu trữ của bạn.
7. Git khác với SVN như thế nào?
Trả lời: Sự khác biệt giữa Git và SVN là một trong những điểm đáng chú ý trong số các câu hỏi phỏng vấn Git tốt nhất. Trước tiên, Git không có đủ chức năng để quản lý các tệp lớn quá mức hoặc các tệp nhị phân thường xuyên thay đổi. Mặt khác, SVN có thể quản lý nhiều dự án trong cùng một kho lưu trữ.
Điểm khác biệt thứ hai là Git không hỗ trợ các commit trên nhiều nhánh hoặc thẻ. Ngược lại, SVN hoặc Subversion hỗ trợ việc tạo các thư mục bất kể vị trí trong bố cục kho lưu trữ. Các thay đổi trong Git là không thể. Tuy nhiên, Subversion cung cấp tính linh hoạt cho người commit để coi một thẻ như một nhánh và tạo nhiều bản sửa đổi trong một thư mục gốc thẻ. Tuy nhiên, Git phân tán tốt hơn SVN tập trung.
8. Git Commit là gì và nội dung của đối tượng commit là gì?
Trả lời: Ứng viên nên tập trung vào câu hỏi này như một trong những câu hỏi phỏng vấn cơ bản quan trọng. Git commit là một lệnh được thực thi trong một dự án để ghi lại tiến trình của dự án. Đối tượng commit chứa một tập hợp các tệp đại diện cho trạng thái của một tệp tại các thời điểm khác nhau. Đối tượng commit cũng bao gồm một tham chiếu đến commit cha. Cuối cùng, bạn cũng có thể tìm thấy tên SHAI, một định danh duy nhất với chuỗi 40 ký tự cho đối tượng commit.
9. Các chức năng lưu trữ kho lưu trữ Git khác nhau là gì?
Trả lời: Câu hỏi này là một điểm nổi bật trong số các câu hỏi phỏng vấn Git tốt nhất. Ngoài GitHub, các chức năng lưu trữ kho lưu trữ Git nổi bật khác bao gồm Gitlab, Bitbucket, GitEnterprise và SourceForge.
10. Xung đột trong Git là gì?
Trả lời: Ứng viên thường có thể gặp câu hỏi về xung đột trong Git trong các câu hỏi phỏng vấn Git cơ bản. Git có thể xử lý phần lớn các hợp nhất một cách tự động bằng cách tận dụng các tính năng tự động của nó. Xung đột xảy ra khi hai nhánh khác nhau thực hiện các chỉnh sửa trên cùng một dòng trong một tệp. Một tình huống khác dẫn đến xung đột trong Git là việc xóa một tệp trên một nhánh và chỉnh sửa cùng một tệp trong một nhánh khác. Xung đột là những sự cố phổ biến, đặc biệt là khi làm việc trong môi trường nhóm.
11. Quy trình giải quyết xung đột trong Git là gì?
Trả lời: Câu hỏi này là một trong những câu hỏi phổ biến trong số các câu hỏi phỏng vấn Git hàng đầu. Ứng viên có thể mong đợi câu hỏi này cùng với các câu hỏi về định nghĩa xung đột trong git như trong câu hỏi trước. Dưới đây là các bước để giải quyết xung đột trong Git.
- Nhận biết các tệp chịu trách nhiệm cho xung đột
- Thực hiện các thay đổi cần thiết đối với các tệp để tránh bất kỳ khả năng xung đột nào
- Thêm các tệp bằng cách sử dụng lệnh “git add.”
- Bước cuối cùng liên quan đến việc commit tệp đã thay đổi thông qua lệnh “git commit.”
12. Branching là gì và có bao nhiêu loại branching trong Git?
Trả lời: Ứng viên nên chuẩn bị cho câu hỏi này như một trong những câu hỏi phỏng vấn Git phổ biến nhất. Branching trong Git là một công cụ hữu ích hỗ trợ người dùng tạo nhánh cá nhân và chuyển đổi giữa các nhánh. Người dùng có thể quay lại công việc cũ mà không ảnh hưởng đến công việc hiện tại. Các loại branching khác nhau trong Git bao gồm feature branching, task branching và release branching. Feature branching liên quan đến việc giữ tất cả các thay đổi của một tính năng cụ thể trong một nhánh.
Sau khi kiểm tra và xác nhận hoàn toàn một tính năng, feature branching liên quan đến việc hợp nhất tính năng đó vào nhánh chính. Task branching liên quan đến việc bao gồm tính năng mới trong nhánh riêng cùng với việc bao gồm khóa tác vụ trong tên nhánh. Release branching liên quan đến việc tạo một bản sao của một nhánh trong trường hợp một nhánh đã phát triển bao gồm đủ tính năng để phát hành.
13. SubGit là gì?
Trả lời: Ứng viên có thể mong đợi câu hỏi này như một trong những câu hỏi phỏng vấn Git quan trọng ở cấp độ bắt đầu. SubGit là một công cụ để di chuyển từ SVN sang Git. SubGit có thể giúp tạo một gương Git có thể ghi của một kho lưu trữ Subversion cục bộ hoặc từ xa. Nó có thể sử dụng Subversion cũng như Git trong bất kỳ khoảng thời gian nào mà người dùng cần. SubGit cũng cung cấp nhập khẩu một lần nhanh chóng từ Subversion sang Git. Ngoài ra, bạn có thể sử dụng SubGit trong máy chủ Atlassian Bitbucket. SubGit không yêu cầu bất kỳ thay đổi nào trong cơ sở hạ tầng hiện có. Hơn nữa, SubGit cũng cung cấp tính linh hoạt để sử dụng tất cả các tính năng của Git và Subversion.
14. Các công dụng của git instaweb là gì?
Trả lời: Các ứng dụng của lệnh Git là một trong những chủ đề nổi bật cho các câu hỏi phỏng vấn Git mới nhất. Lệnh “git instaweb” giúp tự động hướng một trình duyệt web và chạy một máy chủ web với giao diện đến kho lưu trữ cục bộ.
15. Các lệnh Git phổ biến và công dụng của chúng là gì?
Trả lời: Ứng viên có thể dễ dàng tìm thấy câu hỏi này trong hầu hết các cuộc thảo luận về câu hỏi phỏng vấn Git. Dưới đây là một số lệnh Git phổ biến, cùng với chức năng của chúng.
“git diff” giúp hiển thị các thay đổi giữa các commit và giữa các commit và cây làm việc.
“git status” giúp hiển thị sự khác biệt giữa chỉ mục và thư mục làm việc
“git stash applies” là lệnh để đưa các thay đổi đã lưu trở lại thư mục làm việc
“git log” giúp tìm một commit cụ thể trong lịch sử
“git checkout” là lệnh để cập nhật các thư mục của cây làm việc với các thư mục từ một nhánh khác mà không cần hợp nhất
“git rm” giúp loại bỏ các tệp khỏi khu vực staging và các tệp trên đĩa
“git add” giúp thêm các thay đổi tệp trong thư mục hiện tại vào chỉ mục
“git reset” lệnh giúp đặt lại chỉ mục. Nó cũng giúp đặt lại thư mục làm việc về trạng thái của commit cuối cùng
“git is a tree” là lý tưởng để đại diện cho một đối tượng cây cùng với chế độ và tên cho mỗi mục
16. Sự khác biệt giữa clone, fork và branch trên Git là gì?
Trả lời: Câu hỏi này là một trong những câu hỏi độc đáo trong số các câu hỏi phỏng vấn Git tốt nhất. Một fork Git là một bản sao từ xa, phía máy chủ của một kho lưu trữ, khác với bản gốc. Cần lưu ý rằng fork không phải là một khái niệm Git mà là một mô hình xã hội. Clone trong Git là một bản sao cục bộ của một kho lưu trữ từ xa cụ thể. Trong quá trình sao chép, người dùng sao chép toàn bộ thông tin kho lưu trữ nguồn cùng với tất cả các nhánh và lịch sử. Branch là một quy trình để quản lý tất cả các thay đổi trong một kho lưu trữ trước khi hợp nhất chúng vào mã. Bạn có thể coi một nhánh như một luồng phát triển dự án tồn tại trong một kho lưu trữ.
17. Làm thế nào để một “branch” khác với một “pull request”?
Trả lời: Sự khác biệt giữa một nhánh và một yêu cầu kéo là một trong những câu hỏi phỏng vấn DevOps quan trọng cho GitHub. Nhánh chỉ đơn giản là một phiên bản mã riêng biệt. Một yêu cầu kéo xảy ra khi một cá nhân lấy kho lưu trữ, tạo nhánh riêng của họ, thực hiện các thay đổi và sau đó cố gắng hợp nhất nhánh đó vào một kho lưu trữ mã khác.
18. Bạn có biết cách sử dụng “git cherry-pick”?
Trả lời: Các lệnh sẽ là một yếu tố thường xuyên xuất hiện trong các câu hỏi phỏng vấn Git. Việc sử dụng lệnh “git cherry-pick” rõ ràng trong các quy trình để giới thiệu các commit cụ thể từ một nhánh trong kho lưu trữ sang một nhánh khác. Ứng dụng phổ biến của “git cherry-pick” rõ ràng trong việc chuyển tiếp hoặc sao lưu các commit từ một nhánh bảo trì sang một nhánh phát triển. Cách tiếp cận này khác với các cách tiếp cận khác như hợp nhất và tái cấu trúc thường áp dụng nhiều commit vào một nhánh khác.
19. Khu vực staging trong Git là gì?
Trả lời: Ứng viên có thể tìm thấy câu hỏi này trong số đa số các câu hỏi phỏng vấn Git tốt nhất. Khu vực staging là một khu vực trung gian giúp định dạng và xem xét các commit trước khi hoàn thành chúng. Nó còn được gọi là chỉ mục. Khu vực staging là nơi đầu tiên để xác minh mọi thay đổi trước khi commit vào kho lưu trữ.
20. Có hợp lý để tạo một commit bổ sung hoặc sửa đổi một commit hiện có không?
Trả lời: Các loại câu hỏi như vậy trong các câu hỏi phỏng vấn Git có thể gây nhầm lẫn. Bạn cần rõ ràng rằng việc tạo một commit bổ sung là thuận lợi hơn so với việc sửa đổi một commit hiện có. Các sửa đổi có thể phá hủy trạng thái đã lưu trước đó trong commit. Các sửa đổi trong nội dung của commit có thể dẫn đến khả năng loại bỏ dữ liệu quan trọng. Việc sử dụng quá mức “git commit- amend” có thể dẫn đến sự phát triển của một commit nhỏ và tích lũy các thay đổi không mong muốn.
Câu Hỏi Phỏng Vấn Git Trung Cấp
Nếu bạn có một vài năm kinh nghiệm làm việc với Git, người phỏng vấn có thể hỏi một số câu hỏi dựa trên lệnh để kiểm tra kiến thức của ứng viên. Vì vậy, ở đây chúng tôi mang đến một số câu hỏi phỏng vấn thường được hỏi cho các chuyên gia Git cấp trung. Hãy xem qua các câu hỏi này.
21. Sự khác biệt giữa head, working tree và index trong Git là gì?
Trả lời: Ứng viên nên chuẩn bị cho câu hỏi này trong số các câu hỏi phỏng vấn Git mới nhất cho các câu hỏi phỏng vấn trung cấp. Working tree còn được gọi là thư mục làm việc hoặc không gian làm việc. Nó là cây thư mục của các tệp nguồn mà người dùng nhìn thấy và chỉnh sửa. Index hoặc khu vực staging chỉ là một tệp nhị phân duy nhất trong
22. Công dụng của “git config” là gì?
Trả lời: Bạn có thể tìm thấy câu hỏi này trong số các câu hỏi phỏng vấn Git phổ biến nhất. Git sử dụng tên người dùng của bạn để liên kết các commit với một danh tính cụ thể. Lệnh ‘git config’ giúp thay đổi cấu hình Git cũng như tên người dùng của bạn. Ví dụ, nếu bạn muốn có một tên người dùng và địa chỉ email để liên kết một commit với một danh tính cụ thể, thì bạn có thể sử dụng các lệnh sau.
git config -global user. Name “Name” có thể thêm tên người dùng
git config -global user.email “E-mail Address” sẽ thêm địa chỉ email
23. git stash là gì?
Trả lời: Đây là một trong những câu hỏi phỏng vấn Git cấp trung cấp xuất hiện trong đa số các cuộc phỏng vấn Git. Làm việc trên một dự án cụ thể liên quan đến rất nhiều sự lộn xộn và yêu cầu chuyển đổi nhánh. Stashing trên Git giúp lấy thư mục làm việc của bạn với các tệp được theo dõi đã chỉnh sửa và các sửa đổi đã được staging và lưu trữ chúng trên một ngăn xếp các thay đổi chưa hoàn thành. Người dùng có thể áp dụng lại các thay đổi bất cứ lúc nào theo sở thích của họ.
24. Loại công việc nào bạn có thể khôi phục bằng cách khôi phục một nhánh đã xóa?
Trả lời: Ứng viên nên chuẩn bị cho các câu hỏi phỏng vấn Git độc đáo như câu hỏi này. Khi khôi phục một tệp đã xóa, bạn có thể khôi phục các tệp đã lưu trữ hoặc đã lưu trong chỉ mục đã lưu trữ. Các tệp không được theo dõi không thể khôi phục. Thực hành tốt nhất được khuyến nghị là staging và commit công việc của bạn trong mọi trường hợp hoặc đảm bảo chúng được lưu trữ.
25. ‘git diff’ khác với ‘git status’ như thế nào?
Trả lời: Câu hỏi này cũng là một trong những câu hỏi phỏng vấn DevOps quan trọng cho các cuộc phỏng vấn GitHub. ‘git diff’ giúp đại diện cho các thay đổi giữa các commit và các thay đổi giữa các commit và cây làm việc. Mặt khác, ‘git status’ giúp tìm sự khác biệt giữa thư mục làm việc và chỉ mục. Kết quả là, nó giúp hiểu rõ một git cụ thể. Sự khác biệt nổi bật là “git diff” hiển thị sự khác biệt giữa các commit khác nhau, trong khi “git status” thì không.
26. Làm thế nào tôi có thể biết nếu một nhánh đã được hợp nhất vào master?
Trả lời: Câu trả lời cho loại câu hỏi phỏng vấn Git này thường khá đơn giản. Các lệnh sau có thể giúp tìm hiểu xem một nhánh đã được hợp nhất vào master hay chưa.
“git branch –merged” giúp liệt kê các nhánh đã được hợp nhất trong nhánh hiện tại.
“git branch –no -merged” giúp liệt kê các nhánh chưa được hợp nhất trong nhánh hiện tại.
27. Nội dung của ‘hooks’ trong Git là gì?
Trả lời: Ứng viên có thể tìm thấy câu hỏi này trong số các câu hỏi phỏng vấn Git mới nhất. Thư mục “hooks” bao gồm các tập lệnh shell được kích hoạt khi chạy các lệnh Git liên quan. Ví dụ, git sẽ cố gắng thực thi một tập lệnh post-commit sau khi chạy một commit.
28. Làm thế nào tôi có thể tìm danh sách các tệp đã thay đổi trong một commit cụ thể?
Trả lời: Ứng viên sẽ tìm thấy các câu hỏi thực tế như câu hỏi này trong số các câu hỏi phỏng vấn Git phổ biến nhất. Câu trả lời khá đơn giản! Chỉ cần sử dụng lệnh ‘git diff-tree -r {hash}”. Cờ ‘-r’ giúp liệt kê các tệp riêng lẻ. Đầu ra có thể chứa một số thông tin bổ sung. Tuy nhiên, bạn có thể giảm bớt thông tin thêm với sự trợ giúp của hai cờ bổ sung. Lệnh với các cờ bổ sung sẽ là “git diff-tree –no-commit-id –name-only -r {hash}.” –no-commit-id giúp loại bỏ các hash commit khỏi đầu ra. Cờ “–name-only” giúp in tên tệp thay vì đường dẫn.
29. Làm thế nào tôi có thể xóa một tệp khỏi git mà không xóa khỏi hệ thống tệp?
Trả lời: Ứng viên sẽ phải chuẩn bị cho câu hỏi này trong số các câu hỏi phỏng vấn Git khó. “git rm” có thể giúp loại bỏ các tệp khỏi khu vực staging cũng như hệ thống tệp hoặc cây làm việc. Tuy nhiên, việc áp dụng “git rm” không thể hợp lệ trong mọi trường hợp. Do đó, bạn nên sử dụng lệnh “git reset” với cú pháp như “git reset filename.” Bạn cũng có thể sử dụng lệnh “echo filename >> .gitignore” và thêm nó vào thư viện .gitignore để tránh việc thêm lại.
30. Sự khác biệt giữa rebasing và merge trong Git là gì?
Trả lời: Như bạn đã biết, các lệnh sẽ chiếm một phần lớn trong các câu hỏi phỏng vấn Git mới nhất. Lệnh rebase trong Git giúp tích hợp các thay đổi từ một nhánh sang một nhánh khác. Bạn có thể sử dụng nó thay cho lệnh merge. Lệnh merge giúp lấy các dòng phát triển độc lập trong nhánh git và tích hợp chúng vào một nhánh duy nhất. Sự khác biệt giữa hai lệnh rõ ràng trong việc rebases phải viết lại lịch sử commit để tạo ra thứ tự commit thẳng, tuyến tính.
31. Sự khác biệt giữa revert và reset là gì?
Trả lời: Ứng viên có thể tìm thấy câu hỏi này trong số các câu hỏi phỏng vấn DevOps mới cho các cuộc phỏng vấn GitHub. Lệnh reset trong git giúp hoàn nguyên các thay đổi cục bộ về trạng thái của một kho lưu trữ Git. “git reset” hoạt động trên lịch sử commit, thư mục làm việc và khu vực staging. Lệnh revert trong git giúp tạo một commit mới mà loại bỏ các thay đổi từ commit trước đó. Lệnh revert giúp thêm một lịch sử mới vào dự án mà không thay đổi lịch sử hiện có.
32. Làm thế nào bạn có thể hoàn nguyên một commit đã được đẩy và công khai?
Trả lời: “git revert” có thể giúp hoàn nguyên một hoặc nhiều commit. Lệnh giúp tạo một commit mới mà loại bỏ các thay đổi được thực hiện trong các commit trước đó. Lệnh sau có thể giúp hoàn nguyên hai commit trước đó.
“git revert HEAD~2.HEAD”
33. Lợi ích của quy trình làm việc forking là gì?
Trả lời: Ứng viên có thể tìm thấy câu hỏi này như một trong những câu hỏi phỏng vấn Git quan trọng. Sự khác biệt đầu tiên là quy trình làm việc forking không sử dụng một máy chủ phía máy chủ duy nhất làm kho lưu trữ mã “trung tâm”. Mỗi nhà phát triển có một kho lưu trữ phía máy chủ cá nhân. Do đó, quy trình làm việc forking phổ biến trong các dự án mã nguồn mở công khai. Một lợi ích khác là tích hợp các đóng góp mà không cần đẩy vào một kho lưu trữ trung tâm cụ thể. Chỉ người quản lý dự án có thể đẩy vào kho lưu trữ chính thức. Các nhà phát triển có thể thông báo cho người quản lý dự án rằng một bản cập nhật đã sẵn sàng để tích hợp thông qua một yêu cầu kéo.
34. Sự khác biệt giữa ‘git fetch’ và ‘git pull’ là gì?
Trả lời: Ứng viên nên chuẩn bị cho câu hỏi này trong số các câu hỏi phỏng vấn DevOps cho các cuộc phỏng vấn GitHub. ‘git fetch’ chỉ tải xuống dữ liệu mới từ kho lưu trữ từ xa. Nó không đảm bảo tích hợp dữ liệu đã tải xuống vào các tệp làm việc của bạn. ‘git pull’ là lý tưởng để tải xuống cũng như hợp nhất dữ liệu từ kho lưu trữ từ xa vào các tệp làm việc cục bộ.
35. Cú pháp cho rebasing trong Git là gì?
Trả lời: Cú pháp cho rebasing trong Git là “git rebase [new-commit]”
36. Công dụng của ‘git bisect’ là gì?
Trả lời: ‘git bisect’ là một lệnh Git quan trọng để tìm lệnh chịu trách nhiệm giới thiệu một lỗi. Lệnh sử dụng thuật toán tìm kiếm nhị phân để tìm commit trong lịch sử dự án chịu trách nhiệm giới thiệu một lỗi.
37. Git stash drop là gì?
Trả lời: Git stash drop là lệnh giúp loại bỏ danh sách sau khi hoàn thành công việc trên mục đã lưu trữ. Kết quả là, nó đảm bảo loại bỏ bất kỳ mục cụ thể hoặc các mục được thêm gần đây nhất từ đối số.
38. Một số máy khách Git đồ họa tốt nhất cho LINUX là gì?
Trả lời: Ứng viên có thể tìm thấy câu hỏi này phổ biến trong các câu hỏi phỏng vấn Git. Máy khách Git tốt nhất cho Linux như sau:
- Git GUI
- Giggle
- Git Cola
- Smart Git
- qGit
- Git-g
39. git pull origin là gì?
Trả lời: Lệnh ‘git pull origin master’ lấy các commit từ nhánh master của origin có thể là origin cục bộ hoặc nhánh master. Sau đó, nó hợp nhất origin hoặc master vào nhánh hiện đang được kiểm tra.
40. Lợi ích mà các công cụ SCM cung cấp với Git là gì?
Trả lời: Người dùng có thể nhận được các lợi ích đặc biệt với các công cụ SCM như CVS, Subversion, ClearCase và Perforce. Các tính năng như khu vực staging tiện lợi, nhiều quy trình làm việc và phân nhánh cục bộ tiết kiệm chi phí xác nhận lợi ích của các công cụ SCM.
Câu Hỏi Phỏng Vấn Git Nâng Cao
Là một chuyên gia Git cấp cao, bạn có thể gặp các câu hỏi phỏng vấn Git nâng cao trong cuộc phỏng vấn của mình. Hãy xem qua một số câu hỏi phỏng vấn Git nâng cao và chuẩn bị cho cuộc phỏng vấn.
41. Quy trình để nén N commit cuối cùng thành một commit duy nhất là gì?
Trả lời: Câu hỏi này là một trong những câu hỏi phỏng vấn Git nâng cao với hai phản hồi riêng biệt tùy thuộc vào ngữ cảnh. Trong trường hợp viết một thông báo commit mới từ đầu, bạn có thể sử dụng lệnh sau.
“git reset -soft HEAD~N &&git commit.”
Nếu bạn phải chỉnh sửa một thông báo commit mới với việc thêm các thông báo commit hiện có, thì bạn nên trích xuất các thông báo và chuyển chúng đến Git commit. Lệnh sau giúp đạt được chức năng nêu trên.
42. Làm thế nào tôi nên cấu hình một kho lưu trữ Git để chạy các công cụ kiểm tra tính hợp lệ của mã?
Trả lời: Kiểm tra tính hợp lệ giúp xác định khả năng và tính khả thi của kiểm tra liên tục. Một kiểm tra tính hợp lệ có thể thực hiện thông qua một tập lệnh đơn giản liên quan đến hook pre-commit của kho lưu trữ liên quan. Tập lệnh cũng giúp chạy các công cụ khác như linters và thực hiện kiểm tra tính hợp lệ cho các thay đổi đã commit vào kho lưu trữ. Dưới đây là một ví dụ.
#!/bin/sh
files=$(git diff –cached –name-only –diff-filter=ACM | grep ‘.go$’)
if [ -z files ]; then
exit 0
fi
unfmtd=$(gofmt -l $files)
if [ -z unfmtd ]; then
exit 0
fi
echo “Some .go files are not fmt’d”
exit 1
Tập lệnh trên đánh giá nhu cầu chuyển bất kỳ tệp .go nào qua công cụ định dạng mã nguồn Go tiêu chuẩn. Thoát với một giá trị khác không giúp tập lệnh ngăn chặn việc áp dụng commit vào kho lưu trữ.
43. git reflog là gì?
Trả lời: Lệnh “git reflog” giúp theo dõi tất cả các thay đổi được thực hiện trong các tham chiếu của một kho lưu trữ. Nó duy trì một lịch sử nhật ký của các tham chiếu được tạo hoặc kiểm tra cục bộ đến kho lưu trữ.
44. Làm thế nào tôi có thể cherry-pick một commit hợp nhất?
Trả lời: Ứng viên có thể tìm thấy câu hỏi này trong số các câu hỏi phỏng vấn Git nâng cao phổ biến. Cherry-pick sử dụng một diff để tìm ra sự khác biệt giữa các nhánh. Với commit hợp nhất cho một nhánh khác, nó có hai bộ thay đổi và hai cha mẹ. Ví dụ, nếu bạn có commit hợp nhất ref 64cv89d, bạn phải chỉ định -m và sử dụng cha mẹ 1 làm cơ sở như sau –
git checkout release-branch
git cherry-pick -m 1 64cv89d
45. Làm thế nào tôi có thể sao chép một commit trong một nhánh sang một nhánh khác?
Trả lời: Lệnh ‘cherry-pick’ là lựa chọn tốt nhất trong trường hợp này. Nó giúp tìm tính khả thi của việc hoàn nguyên một commit hiện có về nhánh hoặc vị trí hiện tại. Do đó, bạn phải chuyển sang nhánh mục tiêu và sau đó gọi lệnh “git cherry-pick {hash của commit đó}”. Kết quả là, bạn có thể tìm thấy một commit mới với một hash mới do việc áp dụng các thay đổi vào một đích đến khác.
46. Nếu một trong những đồng đội của tôi vô tình xóa một nhánh và đẩy các thay đổi vào kho lưu trữ git trung tâm và tôi muốn khôi phục nhánh đó thì sao?
Trả lời: Bạn cần xem xét commit mới nhất đến nhánh cụ thể với reflog. Sau đó, bạn có thể kiểm tra nó như một nhánh mới.
47. Quy trình làm việc Gitflow là gì?
Trả lời: Ứng viên có thể tìm thấy câu hỏi này trong số các câu hỏi phỏng vấn Git khó nhất. Quy trình làm việc Gitflow sử dụng hai nhánh chạy song song dài hạn được gọi là master và develop. Các thành phần trong quy trình làm việc Gitflow như sau.
Nhánh master luôn sẵn sàng để phát hành trực tiếp với mọi thứ sẵn sàng cho sản xuất.
Các nhánh Hotflix giúp vá nhanh các bản phát hành sản xuất.
Nhánh Develop giúp hợp nhất tất cả các nhánh tính năng và cũng thực hiện tất cả các kiểm tra.
Nhánh Tính năng ngụ ý một nhánh duy nhất cho mỗi tính năng mới. Nhánh tính năng có thể được đẩy vào nhánh phát triển giống như nhánh cha của chúng.
48. ‘git remote’ khác với ‘git clone’ như thế nào?
Trả lời: ‘git remote’ giúp tạo một mục trong cấu hình git trong khi chỉ định một tên cho một URL cụ thể. Mặt khác, ‘git clone’ giúp tạo một kho lưu trữ git mới bằng cách sao chép một kho lưu trữ hiện có trong URL.
49. Lệnh để sửa một commit bị hỏng là gì?
Trả lời: Để sửa một commit bị hỏng, bạn có thể sử dụng lệnh “git commit –amend”. Lệnh này có thể giúp sửa thông báo commit bị hỏng trong trình chỉnh sửa.
50. Mô hình phân nhánh chung trong Git là gì?
Trả lời: Cách tiếp cận chung nhất để tạo các nhánh trong Git là phát triển một nhánh “Chính”. Nó cũng liên quan đến việc tạo một nhánh khác để triển khai các tính năng mới. Mô hình này hữu ích trong trường hợp nhiều nhà phát triển làm việc trên một dự án duy nhất.
Lời Kết
Trên đây là hết tâm can của mình rồi. Anh em nào thấy hữu ích thì bookmark lại vào tài khoản để sau xem cho tiện nhé hehe. Có vấn đề gì thì cứ cmt để mình sửa đổi và bổ sung cho anh em khác cùng coi nha.