Tôi đã đọc rằng khi đổi tên tệp trong git , bạn nên thực hiện bất kỳ thay đổi nào, thực hiện đổi tên và sau đó giai đoạn đổi tên tệp của bạn. Git sẽ nhận ra tệp từ nội dung, thay vì xem nó là tệp mới chưa được theo dõi và giữ lịch sử thay đổi.
Tuy nhiên, làm điều này tối nay tôi đã trở lại git mv
.
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
Đổi tên biểu định kiểu của tôi trong Finder từ iphone.css
thànhmobile.css
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: css/iphone.css
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# css/mobile.css
Vì vậy, git bây giờ nghĩ rằng tôi đã xóa một tệp CSS và thêm một tệp mới. Không phải những gì tôi muốn, hãy hoàn tác việc đổi tên và để git thực hiện công việc.
> $ git reset HEAD .
Unstaged changes after reset:
M css/iphone.css
M index.html
Trở lại nơi tôi bắt đầu.
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
Hãy sử dụng git mv
thay thế.
> $ git mv css/iphone.css css/mobile.css
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: css/iphone.css -> css/mobile.css
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.html
#
Có vẻ như chúng tôi tốt. Vậy tại sao git không nhận ra lần đổi tên lần đầu tiên khi tôi sử dụng Finder?
git mv old new
tự động cập nhật chỉ mục. Khi bạn đổi tên bên ngoài Git, bạn sẽ phải thực hiện git add new
và git rm old
thực hiện các thay đổi cho chỉ mục. Một khi bạn đã làm điều này git status
sẽ làm việc như bạn mong đợi.
public_html
thư mục, được theo dõi trong git. Đã thực hiện git add .
và git commit
, nó vẫn hiển thị một loạt các tệp 'đã xóa' git status
. Tôi đã thực hiện một git commit -a
và xóa đã được cam kết nhưng bây giờ tôi không có lịch sử trên các tập tin tồn tại public_html
bây giờ. Luồng công việc này không suôn sẻ như tôi muốn.
add+rm
hoặcmv
- nó tạo ra kết quả tương tự. Git sau đó sử dụng phát hiện đổi tên / sao chép của nó để cho bạn biết đó là đổi tên. Nguồn bạn trích dẫn là không chính xác, quá. Nó thực sự không quan trọng cho dù bạn sửa đổi + đổi tên trong cùng một cam kết hay không. Khi bạn thực hiện một khác biệt trên cả sửa đổi và đổi tên, phát hiện đổi tên sẽ xem đó là đổi tên + sửa đổi hoặc nếu sửa đổi là viết lại hoàn toàn, nó sẽ hiển thị như đã thêm và xóa - vẫn không thành vấn đề bạn thực hiện như thế nào nó