Chúng đặt lại HEAD thành commit thứ năm trong kho lưu trữ, sau đó merge vào nhánh master.
HEAD của nhánh hiện tại được đặt lại về lại 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 bỏ năm commit cuối cùng.
Chúng merge 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 lựa chọn khác như HEAD@{2 days ago}). Vì đây là một lệnh reset 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 được trước lệnh 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 merge từ commit đó. Toàn bộ hoạt động này có thể là một cách để lấy 5 commit từ một nhánh mà 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 cái 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. Làm thế nào bạn có thể làm điều này?
Checkout nhánh push-notifications và chạy git merge beta
Checkout nhánh master và chạy git merge beta -> push-notifications
Xóa nhánh push-notifications và nó sẽ được commit vào nhánh master tự động
Checkout nhánh beta và chạy git merge push-notifications
Commit đượ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 ban đầu của nó sang nhánh feature-user-location
Commit đang được chọn một cách chính xác là 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 được 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 đổi sang nhánh 'feature-user-location'.
'git cherry-pick kj2342134sdf090093f0sdgasdf99sdfo992mmmf9921231' áp dụng các thay đổi từ commit cụ thể ('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 ban đầu của nó sang nhánh feature-user-location.
Vì vậy, chuỗi lệnh này là cherry-picking 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 thành 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 thành commit trước đó và để lại các thay đổi từ commit bị hủy trong stage/index.
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 lịch sử commit nào. Làm thế nào bạn có thể chẩn đoán vấn đề này?
Theo dõi ngược thủ công 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 lưu trữ của bạn.
Chạy 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 # hoạt động như một chú thích. Vì vậy # .swift không làm gì cả. 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. Điều này sẽ làm gì?
git commit -a -m "Refactor code base"
Không 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 đã 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 bạn kiểm tra trạng thái git của mình, bạn nhận được đầu ra sau đây, hiển thị tệp beta-notes.js trong commit nhưng cũng không được đặt trong stage. 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 đặt trong stage, sau đó 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, nhưng chỉ có một được theo dõi
Có hai bản sao được theo dõi của beta-notes.js, nhưng một đã bị xóa khỏi commit
Ghi chú: - 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 merge. Merge 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 đè các tệp cục bộ của mình.