Tôi đang sử dụng Git trong một thời gian dài, nhưng gần đây phải đối mặt với mẹo thú vị cho phép bạn hoàn nguyên lịch sử thay đổi tệp trong quá trình hợp nhất. Dưới đây là các bước để tái tạo là:Git cho phép mất lịch sử thay đổi tập tin trong khi hợp nhất với xung đột
Tôi có kho git với hai tập tin và một cam kết:
$ git branch
* master
$ git log --oneline
80c8d5a Initial commit
$ git log --oneline -- README
80c8d5a Initial commit
$ ls
README conflict_file
tôi là tạo ra các chi nhánh thực nghiệm mới và thay đổi README và tập tin conflict_file:
$ checkout -b experiment
Switched to branch 'experiment'
$ vim README
$ vim conflict_file
$ git commit -am "Experimental changes"
[experiment cdbc988] Experimental changes
2 files changed, 2 insertions(+)
$ git log --oneline -- README
cdbc988 Experimental changes
80c8d5a Initial commit
trở lại với chi nhánh tổng thể và chỉnh sửa conflict_file (có mâu thuẫn trong quá trình hợp nhất):
$ git checkout master
Switched to branch 'master'
$ vim conflict_file
$ git commit -am "Master changes"
[master ad8b68e] Master changes
1 file changed, 1 insertion(+)
Tình trạng của kho lưu trữ của tôi trong những điều sau đây:
$ git log --oneline --decorate --graph --all
* ad8b68e (HEAD, master) Master changes
| * cdbc988 (experiment) Experimental changes
|/
* 80c8d5a Initial commit
Đang cố gắng để kết hợp với các chi nhánh thực nghiệm:
$ git merge experiment
Auto-merging conflict_file
CONFLICT (content): Merge conflict in conflict_file
Automatic merge failed; fix conflicts and then commit the result.
$ git mergetool
<merging conflict in conflict_file>
Dưới đây là mẹo:
$ git reset HEAD README
Unstaged changes after reset:
M README
$ git commit
[master 909139f] Merge branch 'experiment'
$ git log --oneline -- README
80c8d5a Initial commit
Tôi mất những thay đổi và lịch sử của README tệp đã được giới thiệu trong thử nghiệm chi tiết chi nhánh trong Thay đổi thử nghiệm cam kết. Ai có thể xin vui lòng bình luận làm thế nào nó tương quan với ý tưởng rằng Git biết về tất cả những thay đổi? Điều đó có thể tránh được tình huống này không? Nó có thể trở thành một vấn đề trong công ty của chúng tôi, bởi vì hợp nhất được cho phép hoạt động cho các nhà phát triển, nhưng họ vô tình có thể loại bỏ những thay đổi của ai đó.
Thử tùy chọn '--full-history' vào' git log'. Cũng đọc trang người đàn ông về _history simplification_: "Chế độ mặc định ... lịch sử đơn giản nhất giải thích trạng thái cuối cùng của cây". – chirlu
Tại sao bạn ngạc nhiên rằng những thay đổi đối với tệp 'README' đã biến mất? bạn đã yêu cầu rõ ràng điều đó xảy ra với 'git reset HEAD README'. – Chronial
Gọi 'git log --follow -' helpen me –
erkfel