Sourcetree - hoàn tác các cam kết chưa được đánh dấu


208

Tôi đang sử dụng Sourcetree cho Windows cho kho lưu trữ git và muốn hoàn tác một cam kết chưa được xử lý.

Điều đó có thể không? Nếu tôi thực hiện "hoàn nguyên cam kết", nó sẽ tạo ra một cam kết thứ hai hoàn nguyên cam kết đầu tiên, nhưng tôi không muốn cam kết đầu tiên xuất hiện hoàn toàn trong kiểm soát nguồn của mình.

Tôi cũng có thể xóa kho lưu trữ cục bộ của mình và kéo lại mà không cần cam kết cục bộ, nhưng có lẽ có cách khác?


Tôi đã viết một bài viết chi tiết với ảnh chụp màn hình. Chia sẻ với hy vọng rằng nó sẽ giúp ích: attosol.com/undo-in-git-USE-sourcetree
Rahul Soni

Câu trả lời:


345
  1. Nhấp chuột phải vào cam kết bạn muốn đặt lại (không phải cam kết bạn muốn xóa!)
  2. Chọn "Đặt lại chủ cho cam kết này"
  3. Chọn đặt lại "Mềm".

Thiết lập lại mềm sẽ giữ những thay đổi cục bộ của bạn.

Nguồn: https://answers.atlassian.com/questions/153791/how-should-i-remove-push-commit-from-sourcetree

Biên tập

Giới thiệu git revert: Lệnh này tạo một cam kết mới sẽ hoàn tác các cam kết khác. Ví dụ: nếu bạn có một cam kết thêm một tệp mới, git revertcó thể được sử dụng để thực hiện một cam kết sẽ xóa tệp mới.

Về việc áp dụng một thiết lập lại mềm: Giả sử bạn có các cam kết Ađể E( A---B---C---D---E) và bạn muốn xóa cam kết cuối cùng ( E). Sau đó, bạn có thể thực hiện thiết lập lại mềm để cam kết D. Với một cam kết thiết lập lại mềm Esẽ bị xóa khỏi git nhưng những thay đổi cục bộ sẽ được giữ lại. Có nhiều ví dụ trong tài liệu thiết lập lại git .


34
Hoặc nếu bạn đang làm việc trên một chi nhánh - "Đặt lại chi nhánh hiện tại cho cam kết này"
Tom Auger

5
Tôi rất không hiểu những giải thích về UI này ... Đặt lại nhánh hiện tại cho cam kết này rất nhiều âm thanh không giống như nó sẽ xóa cam kết. Và nó đã kết thúc làm những gì bạn mong đợi nhiều hơn. Nó đặt lại bản sao làm việc của tôi thành cam kết, thay vì xóa nó.
MrFox

Tôi đồng ý với @MrFox. Sau khi tôi làm điều này, cam kết tôi không muốn vẫn được hiển thị trên cây.
Timmmm

@Timmmm: Giải thích mới có giúp được không?
nightlyop

Trên thực tế tôi nhận ra rằng tôi đã đẩy cam kết của mình lên github. Tôi tìm thấy một bài viết giải thích làm thế nào để "viết lại lịch sử" nhưng có vẻ như nó rắc rối hơn giá trị của nó!
Timmmm

46

Nếu bạn chọn mục nhật ký mà bạn muốn hoàn nguyên thì bạn có thể nhấp vào "Đặt lại cam kết này". Chỉ sử dụng tùy chọn này nếu bạn không đẩy các thay đổi cam kết ngược lại. Nếu bạn lo lắng về việc mất các thay đổi thì bạn có thể sử dụng chế độ mềm sẽ để lại một tập hợp các thay đổi không được cam kết (những gì bạn vừa thay đổi). Sử dụng hỗn hợp đặt lại bản sao làm việc nhưng vẫn giữ những thay đổi đó và khó có thể loại bỏ hoàn toàn các thay đổi. Dưới đây là một số ảnh chụp màn hình:

nhập mô tả hình ảnh ở đây


3
Nếu bạn vẫn thấy một biểu tượng hiển thị Đẩy có sẵn từ cam kết trước đó của bạn (Bạn vừa xóa sạch), kéo và Sourcetree dường như cập nhật giao diện người dùng.
ChristoKiwi

6

Nếu bạn muốn xóa một cam kết, bạn có thể thực hiện nó như là một phần của phản ứng tương tác. Nhưng hãy cẩn thận, vì vậy bạn sẽ không làm hỏng repo của mình.

Trong Sourcetree:

  1. Nhấp chuột phải vào một cam kết cũ hơn so với cam kết bạn muốn xóa và chọn " Rebase children of xxxx tương tác ... ". Cái bạn nhấp sẽ là "cơ sở" của bạn và bạn có thể thay đổi mọi cam kết được thực hiện sau đó.
  2. Trong cửa sổ mới, chọn cam kết bạn muốn biến mất và nhấn nút " Xóa " ở dưới cùng hoặc nhấp chuột phải vào cam kết và nhấp vào " Xóa cam kết ".
  3. Nhấp vào " OK " (hoặc " Hủy " nếu bạn muốn hủy bỏ).

Kiểm tra bài đăng trên blog Atlassian này để biết thêm về việc nổi loạn tương tác trong Sourcetree.


Đây là câu trả lời tôi đang tìm kiếm, làm việc chính xác khi cần thiết.
Cliff Burton

0

Nếu bạn đang ở một chi nhánh khác, trước tiên bạn cần "kiểm tra cam kết này" cho cam kết bạn muốn xóa và chỉ sau đó "đặt lại chi nhánh hiện tại cho cam kết này", chọn cam kết trước đó, sẽ hoạt động.

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.