Hoàn tác git mv (đổi tên)


139

Cách đúng để hoàn tác đổi tên trong git, như:

git mv file1 file2

21
Câu trả lời git mv file2 file1
táo bạo

@CanSpice: Đó là câu trả lời đúng; không có gì táo tợn về nó.
CB Bailey

1
@ Charles: Vậy thì, tôi đã cung cấp nó như một câu trả lời không táo tợn. :-)
CanSpice

git mv file2 file1 Bạn còn mong đợi gì nữa không?
Lakshman Prasad

Câu trả lời:


230

Câu trả lời không táo tợn:

git mv file2 file1

Tự động cập nhật chỉ mục cho cả đường dẫn cũ và mới.

Kiểm tra tài liệu của git mv


4
giả sử file1 và file2 đều nằm trong thư mục hiện tại (.), thì tại sao git checkout .không hoạt động, ngay cả với -ftùy chọn?
ryenus

9
Có vẻ như mọi thứ đều trực quan như thế này :)
ragerdl

@ryenus Bạn cần sử dụng git checkout -- ..
Joseph238

Cười lớn. Đó là niềm vui.
Dmitriy Dokshin

Không làm việc cho tôi đưa ra lỗi : fatal: source directory is empty,, chỉ git reset --hardlàm công việc.
mac13k

43

Nếu bạn không thực hiện bất kỳ thay đổi nào khác (mà bạn muốn giữ) kể từ lần cam kết cuối cùng, bạn có thể thực hiện

git reset --hard

6
Tôi sẽ không muốn có thói quen sử dụng git reset --hard. Chỉ cần di chuyển nó về phía sau dường như là một lựa chọn an toàn hơn với tôi.
osa

4
Đã làm cho tôi. Tôi muốn hoàn tác một "git mv" mà 1) chưa được cam kết và 2) Tôi không có trò chuyện nào khác
Ed of the Mountain

Nếu bạn có những thay đổi khác mà bạn muốn giữ, điều này sẽ phá hủy tất cả chúng.
dùng151841

13
git reset HEAD file2

đã lừa tôi


1
Vấn đề duy nhất tôi có với câu trả lời này là nó để lại các bản sao cho file2 trên đĩa.
dùng52472

9

Trong trường hợp của tôi, tôi đã chuyển toàn bộ một thư mục, sau đó nhận ra rằng tôi không nên có.

Tôi thực sự thích câu trả lời của @Dave Konopka, nhưng tôi không có nhiều thành công với cách tiếp cận đó (có thể là phiên bản GIT của tôi (1.8.4)? Các tệp của tôi vẫn hiển thị là đã bị xóa. Tôi có các thay đổi khác trên ngăn xếp mà tôi không muốn mất (không may).

Tôi đã thành công khi làm điều này:

git reset moved_folder
git checkout original_folder

8

Nó phụ thuộc vào những gì bạn muốn thực hiện. Nếu bạn muốn nó xuất hiện như thể tập tin không bao giờ được di chuyển, thì bạn có thể đặt lại (hoặc rebase) trở lại trước khi di chuyển. Nếu bạn không quan tâm đến lịch sử, thì hãy chuyển nó trở lại.


4
Công cụ đầu tiên hoạt động tốt miễn là bạn chưa thực hiện cam kết của mình hoặc ai đó chưa rút khỏi bạn.
CanSpice

7

Nếu bạn vô tình đổi tên một số lượng lớn tệp và muốn quay lại nơi bạn đã bắt đầu, hãy xóa tất cả các tệp đã đổi tên hiển thị addsdưới dạng git statuscuộc gọi.

Khi bạn xóa tất cả các tệp đã thay đổi, bạn có thể chạy git checkout -- *để lấy lại tên tệp gốc cục bộ.


4
git reset HEAD file2
git checkout -- file1
rm file2

Lệnh đầu tiên bỏ tập tin2 nhưng để lại một bản sao của nó. Lệnh thứ hai khôi phục tệp gốc và lệnh thứ ba xóa tệp mới.


1

Thủ thuật tôi đã sử dụng là thực hiện git stash để hoàn tác tất cả các thay đổi của mình (bao gồm khôi phục các tệp mv'd) và sau đó xóa stash với git stash drop.


0

Ít đáng sợ hơn là đi đến cấp cao nhất của repo và làm:

git thiết lập lại
kiểm tra git.

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.