Cách nhận hành vi hoàn nguyên của SVN trong Git


0

Tôi biết, tôi biết, git revertnhưng tôi mới biết rằng nó không hoạt động giống hệt như - svn revertít nhất, không phải trong Visual Studio 2015, hoặc có thể không có trong TortoiseGit. Tôi sẽ giải thích:

Tôi mới dùng VS2015 cũng mới dùng Git. Khi tôi phát hiện ra rằng VS2015 có tích hợp Git ngay lập tức, tôi đã dùng thử. Tuy nhiên, tôi đã làm việc trên một số tệp và tôi đã sẵn sàng cam kết chỉ một trong số đó. Thật không may, bộ lọc mà tôi đã áp dụng trong ngăn Team Explorer không áp dụng cho các tệp đã được cam kết (tôi đoán đó là lý do tại sao tiêu đề của nút là "Cam kết tất cả"). Thay vào đó, nó cam kết tất cả các tệp "bẩn" - rất tiếc!

Dựa vào TortoiseGit để xem nhật ký của repo của tôi, tôi đã chọn cam kết (cục bộ) gần đây nhất và hoàn nguyên nó thông qua "Hoàn nguyên các thay đổi của cam kết này". Tôi đã dự kiến ​​rằng thao tác này sẽ hoàn nguyên các tệp mà tôi đang làm việc để trở về trạng thái "bẩn" mà chúng đã ở trước khi tôi cam kết, giống như những gì một SVN Revert làm, nhưng thật ngạc nhiên, hoạt động này đã hoàn nguyên các tệp cục bộ của tôi phiên bản repo trước đó , không ở trạng thái trước khi tôi cam kết.

Tất nhiên, tôi đã có thể truy xuất tác phẩm của mình vì tất cả đều nằm trong bản sửa đổi "tất cả các tệp" mà tôi đã cam kết ban đầu. Tôi chỉ thiết lập để sao chép từng tập tin từ nó vào thư mục hợp pháp của nó. Nhưng tôi còn thiếu gì ở đây? Có tính năng Git nào mà tôi nên sử dụng thay vì Revert không?

Câu trả lời:


0

Trong Git, bạn có thể xóa toàn bộ cam kết. Tốt nhất là bạn chỉ làm điều này để cam kết không bị đẩy. Toàn bộ phần phân phối của Gv trên Git làm cho điều đó trở nên khả thi. Với SVN, những thay đổi của bạn ngay lập tức có sẵn cho những người khác. Với Git, chúng chỉ khả dụng khi chúng được đẩy (trong đó Sync Sync trong Visual Studio).

Vì vậy, thay vì hoàn nguyên cam kết (có nghĩa là những thay đổi sai lầm sẽ vẫn còn trong kho lưu trữ và có thể có tác dụng phụ không mong muốn), hãy làm git reset --mixed HEAD~1. Điều này có nghĩa là thư mục làm việc của bạn sẽ giữ nguyên, nhưng lần xác nhận cuối cùng sẽ bị xóa. Điều đó có nghĩa là Git sẽ hiển thị tất cả các tệp như được sửa đổi một lần nữa.

Hoàn nguyên trong Git tạo ra một cam kết ngược lại của cam kết về cam kết mà bạn đã hoàn nguyên, hoàn tác mọi thay đổi.

Sau đó, để chỉ cam kết một tệp duy nhất, trước tiên hãy kiểm tra xem git statusGit đó không có các thay đổi không mong muốn được dàn dựng. Sau đó, sử dụng git add path/to/file.txtđể giai đoạn (chỉ) tập tin đó. Sau đó, chỉ cần thực thi git commit, sử dụng một thông điệp cam kết thích hợp và bạn đã hoàn thành.

Khi bạn chạy git commitvà trình soạn thảo văn bản bật lên, tệp cũng chứa một danh sách các thay đổi sẽ được cam kết. Kiểm tra cẩn thận danh sách này để đảm bảo bạn chỉ cam kết những gì bạn muốn.

Ngoài ra, không sử dụng Visual Studio để tích cực làm việc với Git. Nó cố gắng áp dụng các thuật ngữ TFS cũ cho các hoạt động của Git, nhưng chúng không giống nhau. Thay vào đó, hãy thử học Git trên bảng điều khiển. Visual Studio có một số đặc quyền tốt cho công việc chỉ đọc, như một chế độ xem khác biệt tuyệt vời.


--mixedlà mặc định và danh sách các thay đổi là (AFAIK) là một điều tương đối mới - nó được sử dụng để yêu cầu git commit -vtrước đây, phải không?
grawity

@grawity Có, --mixedlà mặc định. Tôi đã thêm nếu để làm rõ. Danh sách các thay đổi (tốt, các tệp đã thay đổi, thực sự) có luôn luôn có sẵn IIRC. Tôi không có cài đặt Git cũ hơn để xác minh nó, mặc dù.
Daniel B
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.