Làm cách nào để hủy các thay đổi chưa cam kết trong SourceTree?


81

Tôi mới làm quen với môi trường Git và tôi đang sử dụng BitBucket với SourceTree trên Mac. Tất cả những gì tôi muốn làm bây giờ là hủy các thay đổi kể từ lần cam kết cuối cùng. Tôi nên làm điều này như thế nào? Tôi đã không tìm thấy bất kỳ điều gì như "loại bỏ các thay đổi" và trực tiếp kéo từ cam kết cuối cùng dường như không hoạt động. Các giải pháp được thực hiện với GUI hoặc dòng lệnh sẽ tốt. Cảm ơn bạn.


ý bạn là bạn muốn hoàn tác cam kết cuối cùng? hoặc để lại nó và kiểm tra cam kết trước đó vì một số lý do thử nghiệm chẳng hạn?
Mohammad AbuShady

1
@MohammadAbuShady Tôi đoán câu trả lời là không. Kể từ lần cam kết cuối cùng, tôi đã thực hiện một số thay đổi mà tôi muốn loại bỏ. Tôi muốn cam kết cuối cùng của tôi trở lại.
goldfrapp04

vì vậy bạn có những thay đổi không giới hạn mà bạn muốn hoàn nguyên?
Mohammad AbuShady

Không có câu trả lời nào ở đây giúp tôi xóa mục nhập 'Thay đổi không được chấp nhận' gây phiền nhiễu ở đầu Sourcetree của tôi. Và có quá nhiều tệp chưa được phân loại để loại bỏ từng tệp một. Câu trả lời ở đây đã hoạt động: stackoverflow.com/questions/14075581/…
PVS

Tôi đã nhầm lẫn giữa các tùy chọn menu ngữ cảnh khi nhấp chuột phải vào mục trong danh sách Tệp chưa được phân chia; Discard(Shift + Ctrl + R) và Remove(Ctrl + Del) Tôi đoán Discardsẽ hoàn nguyên các thay đổi như git reset --hardRemovesẽ xóa tệp và giai đoạn xóa đó.
The Red Pea

Câu trả lời:


61

Tôi thích sử dụng

git stash

Đây lưu trữ tất cả những thay đổi không bị giam trong stash . Nếu bạn chỉ muốn hủy những thay đổi này sau đó git stash drop(hoặc git stash popđể khôi phục chúng).

Mặc dù về mặt kỹ thuật, đây không phải là cách "thích hợp" để loại bỏ các thay đổi (như các câu trả lời và nhận xét khác đã chỉ ra).

SourceTree : Trên thanh trên cùng, nhấp vào biểu tượng 'Stash', nhập tên của nó và tạo. Sau đó, trong menu dọc bên trái, bạn có thể "hiển thị" tất cả Stash và xóa trong menu chuột phải. Có lẽ không có cách nào khác trong ST để loại bỏ tất cả các tệp cùng một lúc.


7
tốt nếu bạn muốn chỉ loại bỏ tất cả mọi thứ nó thậm chí còn dễ dàng hơn để chỉ làmgit reset --hard HEAD
Mohammad AbuShady

4
@cocoanut Tôi nghĩ câu trả lời của tôi "sai" vì đây là một sự lạm dụng stashchức năng. Câu trả lời của Mohammad là cách thích hợp để loại bỏ mọi thay đổi.
Tối đa

Có, và cũng bởi vì tôi không thể thấy đâu là lối tắt.
Roberto

3
Tôi thích phương pháp này vì nó cho bạn một cơ hội cuối cùng để khôi phục các thay đổi của mình nếu bạn thay đổi ý định. Tôi hiếm khi lưu trữ reset --hard, nhưng tôi thường lưu trữ các thay đổi của mình để bắt đầu mới và sau đó sẽ bỏ kho lưu trữ nếu tôi quyết định không cần nó.
Tối đa

Phương pháp này không xóa các tệp chưa phiên bản mới. Trong trường hợp đó, phương pháp sử dụng reset và clean của Roberto đã hoạt động hiệu quả hơn.
Gabriel Jensen,

141

Trên SourceTree cho Mac , nhấp chuột phải vào các tệp bạn muốn loại bỏ (trong danh sách Tệp trong cây làm việc ) và chọn Đặt lại .

Trên SourceTree cho Windows , nhấp chuột phải vào tệp bạn muốn loại bỏ (trong danh sách Thay đổi Bản sao Đang làm việc ) và chọn Loại bỏ .

Trên git , bạn chỉ cần thực hiện:

git reset --hard để loại bỏ các thay đổi được thực hiện đối với các tệp được tạo phiên bản;

git clean -xdfđể xóa các tệp mới (chưa được theo dõi ), bao gồm cả những tệp bị bỏ qua ( xtùy chọn). dcũng là loại bỏ các thư mục không được theo dõi và fbuộc.


9
Bạn cũng có thể nhấp chuột phải vào toàn bộ "Working Copy" trong bảng điều khiển bên trái (hoặc nhấn Cmd + Shift + R) ;-)
Geo

14
Thật ngạc nhiên khi lệnh tương tự lại có tên khác cho Mac và Windows. Như thể Git GUI (so với dòng lệnh) vẫn chưa đủ khó hiểu.
NSTJ

Cảm ơn! Tôi nghĩ điều này nên được bình chọn là câu trả lời đúng ;-)
Hernan Arber

@NSTJ: Đồng ý ... nó làm lung lay niềm tin của một người vào khả năng gán một định nghĩa nhất quán cho các thuật ngữ như "đặt lại" và "loại bỏ" liên quan đến các công cụ git. Tức là một định nghĩa mà bạn có thể mong đợi sẽ được đồng thuận rộng rãi.
LarsH

7

Trên tệp không được phân giai đoạn, hãy nhấp vào ba dấu chấm ở phía bên phải. Sau khi bạn nhấp vào nó, một menu bật lên sẽ xuất hiện ở nơi bạn có thể sau đó Discard file.


2
Điều này tốt khi nó chỉ có một vài tệp, nhưng điều gì xảy ra khi có nhiều tệp?
Itai Spector

4

Ok, tôi chỉ nhận thấy rằng câu hỏi của tôi đã được trả lời trong tiêu đề câu hỏi.

Để loại bỏ tệp sử dụng

git reset HEAD /file/name

Và để hoàn tác các thay đổi đối với tệp

git checkout -- /file/name

Nếu bạn có một loạt tệp bên trong một thư mục, bạn có thể hoàn tác toàn bộ thư mục

git checkout -- /folder/name

Lưu ý rằng tất cả các lệnh này đã được hiển thị khi bạn git status

Ở đây tôi đã tạo một repo giả và liệt kê cả 3 khả năng

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   test
#
# 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:   test2
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       test3

3

Từ sourcetree gui, nhấp vào directoy đang hoạt động, nhấp chuột phải vào (các) tệp mà bạn muốn loại bỏ, sau đó nhấp vào Hủy


2

Làm như sau,

  • Bấm vào commit
  • Chọn tất cả bằng cách nhấn CMD+Amà bạn muốndelete or discard
  • Right click trên các tệp không cam kết đã chọn mà bạn muốn xóa
  • Chọn Removetừ danh sách thả xuống

1

Ok, vậy là trong sourcetree của Windows, điều đó thật đơn giản, trên macOS, tôi cũng đã tìm được một lúc ..

Nhấp vào Command + Shift + R khi ở trong cây nguồn, một cửa sổ bật lên ẩn sẽ được hiển thị cho phép bạn loại bỏ các tệp riêng lẻ HOẶC TẤT CẢ! Tại sao điều này lại bị che giấu? Chúng tôi sẽ không bao giờ biết .. nhưng nó hoạt động ! [nhập mô tả hình ảnh tại đây] 1

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.