xem xét sau "câu chuyện":Cách thư mục hoạt động được cập nhật trên "git checkout"?
$ mkdir my_project
$ cd my_project
$ git init
Initialized empty Git repository in /home/misha/misha/my_project/.git/
$ echo "first line" > hello.txt
$ git add hello.txt
$ git commit -m "first commit"
[master (root-commit) 9c913a1] first commit
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 hello.txt
$ git branch new_feature
$ git checkout new_feature
Switched to branch 'new_feature'
$ echo "second line" >> hello.txt
$ cat hello.txt
first line
second line
$ git checkout master
M hello.txt
Switched to branch 'master'
$ cat hello.txt
first line
second line
Tại sao hello.txt
có hai dòng trên nhánh chủ? (Tôi nghĩ rằng git checkout
sẽ hoàn nguyên thư mục hoạt động về trạng thái trước đó, tức là hello.txt
sẽ chỉ có một dòng.)
Điều gì thực sự xảy ra sau hậu trường đối với thư mục làm việc trên git checkout
? Làm thế nào nó được cập nhật?
Rõ ràng, git hợp nhất theo mặc định thư mục làm việc hiện tại vào nhánh mới (_master_ trong trường hợp của tôi): http://www.gitguys.com/topics/switching-branches-without-committing –
Hành vi tương tự nếu tệp được thêm vào chỉ mục nhưng không cam kết. –
Tôi nghĩ rằng các chi nhánh chỉ lưu trữ các cam kết, chứ không phải thay đổi làm việc. Khi bạn chuyển sang một chi nhánh và thực hiện một số công việc, bạn cần phải cam kết những thay đổi đó trước khi chuyển sang một nhánh khác hoặc những thay đổi đó sẽ không được liên kết với nhánh đó. Một cách khác để xử lý các chi nhánh là sao chép kho lưu trữ của bạn vào một thư mục mới. Sau đó, bạn có thể làm việc trên hai nhánh trong hai thư mục khác nhau mà không cần phải cam kết cho đến khi bạn sẵn sàng. Điều này làm cho nó dễ dàng hơn để tránh những sai lầm. –