Chúng đặt lại HEAD thành commit thứ năm trong kho, sau đó hợp nhất vào nhánh master.
HEAD của nhánh hiện tại được đặt lại về năm commit trước đó, sau đó các commit trước đó được nén thành một commit duy nhất.
Chúng xóa đi năm commit cuối cùng.
Chúng hợp nhất năm commit cuối cùng vào một nhánh mới.
Giải thích:
git reset --hard HEAD~5 đặt lại nhánh hiện tại thành commit ngay trước 5 commit cuối cùng (xem man gitrevisions để biết chi tiết về cú pháp này và các tùy chọn thú vị khác như HEAD@{2 days ago}). Vì đây là một đặt lại cứng, nó cũng sẽ ghi đè lên mọi thay đổi trong cây làm việc. Xem man git-reset.
git merge --squash HEAD@{1} HEAD@{1} là nơi nhánh vừa trước commit trước đó (một lần nữa, xem man gitrevisions). Lệnh này đặt trạng thái của chỉ mục như nó sẽ ngay sau một hợp nhất từ commit đó. Toàn bộ thao tác này có thể là một cách để lấy 5 commit từ một nhánh trong đó bạn bắt đầu một tính năng mới và nén chúng thành một commit duy nhất, một commit có ý nghĩa.
Câu 4. Dự án hiện tại của bạn có một số nhánh; master, beta, và push-notifications. Bạn vừa hoàn thành tính năng thông báo trong nhánh push-notification, và bạn muốn commit nó vào nhánh beta. Bạn có thể thực hiện điều này như thế nào?
Chuyển sang nhánh push-notifications và chạy git merge beta
Chuyển sang nhánh master và chạy git merge beta -> push-notifications
Xóa nhánh push-notifications và nó sẽ tự động commit vào nhánh master
Chuyển sang nhánh beta và chạy git merge push-notifications
Commit đang được đánh dấu để phát hành trên nhánh feature-user-location
Một commit được sao chép từ nhánh gốc của nó sang nhánh feature-user-location
Commit đang được chọn như HEAD mới của lịch sử commit
Một commit được sao chép từ nhánh feature-user-location sang nhánh master
Nhánh đang chuyển sang nhánh feature-user-location, và commit được chỉ định được áp dụng cho nhánh.
Giải thích:
'git checkout feature-user-location' chuyển sang nhánh 'feature-user-location'.
'git cherry-pick kj2342134sdf090093f0sdgasdf99sdfo992mmmf9921231' áp dụng các thay đổi từ commit cụ thể đã chỉ định ('kj2342134sdf090093f0sdgasdf99sdfo992mmmf9921231') vào nhánh hiện tại (feature-user-location). Điều này thực tế là sao chép commit từ nhánh gốc của nó sang nhánh feature-user-location.
Vì vậy, chuỗi lệnh này là việc chọn lọc một commit cụ thể vào nhánh feature-user-location.
Câu 8. Lệnh sau làm gì với kho lưu trữ git?
git reset --soft HEAD^
Nó xóa tất cả các commit trước đó và đặt lại lịch sử kho về trạng thái ban đầu của nó.
Nó đặt lại nhánh làm việc về commit đầu tiên.
Nó giữ HEAD ở commit hiện tại nhưng xóa tất cả các commit trước đó.
Nó đặt HEAD ở commit trước đó và giữ lại các thay đổi từ commit bị hủy trong khu vực staging.
Câu 9. Bạn tìm thấy một lỗi trong dự án của mình, nhưng không thể xác định nó được giới thiệu vào đâu trong lịch sử commit. Bạn sẽ làm thế nào để chẩn đoán vấn đề này?
Theo dõi bằng tay qua lịch sử commit của bạn.
Sử dụng git search -diff để so sánh tất cả các commit trong lịch sử kho của bạn.
Chạy một git rebase để tìm commit có lỗi.
Sử dụng git bisect để so sánh commit có lỗi với một commit sớm mà hoạt động như mong đợi.
Một dòng bắt đầu bằng # được sử dụng như một ghi chú. Do đó, # .swift không làm bất cứ điều gì. Xem man gitignore.
Câu 17. Sau khi bạn thực hiện các thay đổi vào kho lưu trữ cục bộ, bạn chạy lệnh sau đây. Điều này sẽ làm gì?
git commit -a -m "Refactor code base"
Không có gì, bạn không thể sử dụng nhiều tùy chọn trong cùng một lệnh
Thêm tất cả các tệp mới vào khu vực staging
Commit tất cả các tệp mới với một thông báo
Thêm tất cả các tệp được sửa đổi vào khu vực staging, sau đó commit chúng với một thông báo
Câu 18. Sau khi kiểm tra trạng thái git của bạn, bạn nhận được đầu ra sau đây, chỉ ra rằng tệp beta-notes.js trong commit nhưng cũng chưa được staged. Tình huống này có thể xảy ra như thế nào?
Change to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: beta-notes.js
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout --<file>..." to discard changes in working directory)
modified: beta-notes.js
Có hai bản sao của beta-notes.js nhưng một bị xóa
beta-notes.js đã được staged, sau đó được sửa đổi sau đó, tạo ra hai phiên bản khác nhau của tệp
Hai bản sao của beta-notes.js đã được tạo ra, nhưng chỉ có một đang được theo dõi
Có hai bản sao được theo dõi của beta-notes.js, nhưng một đã bị loại bỏ khỏi commit
Lưu ý: - Lệnh pull là fetch theo sau bởi merge hoặc rebase (trong trường hợp này, merge). Chúng ta không muốn hợp nhất. Hợp nhất sẽ là một hành động đối với kho lưu trữ của chúng ta. Chúng ta chỉ muốn ghi đè lên các tệp cục bộ của mình.