Tôi rõ ràng không hiểu git chút nào. Đây là những gì tôi nhận được:git dàn dựng và cam kết giữa nhiều chi nhánh
git branch (outputs that I'm on master)
git checkout -b foo
echo "next line" >> file (file is an existing file)
git add file (stages)
git checkout master
git status (shows that file has "next line" and is staged!!)
git commit (commits the changes that were staged on branch foo!!)
git checkout foo
Đây là kicker. foo bây giờ không hiển thị bất kỳ thay đổi nào được thực hiện đối với tệp trong thư mục làm việc HOẶC được tổ chức.
Vì vậy, có vẻ như - mọi thay đổi bạn thực hiện, bao gồm sửa đổi tệp và dàn dựng, xảy ra với TẤT CẢ các chi nhánh. và khi bạn cam kết với một chi nhánh cụ thể, những thay đổi đó sẽ bị loại bỏ trên tất cả các chi nhánh khác ngoại trừ các chi nhánh bạn đã cam kết.
Đây có phải là những gì đang diễn ra không? Ai đó có thể làm điều này có ý nghĩa với tôi không? Nghe có vẻ như hành vi hoàn toàn ngớ ngẩn và rõ ràng là tôi không hiểu ý tưởng thiết kế khiến điều này trở nên hợp lý.
Sửa ví dụ rõ ràng:
$ mkdir element
$ cd element
$ git init
Initialized empty Git repository in /home/dan/element/.git/
$ echo "one" >> one
$ git add one
$ git commit -m msg
[master (root-commit) 36dc8b0] msg
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 one
$ git checkout -b fire
Switched to a new branch 'fire'
$ echo "next line" >> one
$ git checkout master
M one
Switched to branch 'master'
$ cat one
one
next line
$
nào ràng mâu thuẫn này từ git cuốn sách ủng hộ:
This is an important point to remember: Git resets your working directory to look like the snapshot of the commit that the branch you check out points to. It adds, removes, and modifies files automatically to make sure your working copy is what the branch looked like on your last commit to it.
Câu trả lời của tôi có giúp làm rõ mọi thứ không? Tôi nghĩ rằng nó có sẵn trong bản chỉnh sửa của bạn, nhưng tôi không hoàn toàn chắc chắn. – larsks