我以为我已经很好地掌握了Git,但刚才我很惊讶.我认为分支会将变化与其他分支隔离开来,所以我在一个新的分支中开始了一个大的实验性重构.这种重构,意味着移动了许多文件.当我切换到掌握时,我仍然可以看到变化!
我去了我的沙箱存储库来复制问题:
$ git branch crazy-refactoring
$ git checkout crazy-refactoring
$ rm README
$ git checkout master
$ git status
# On branch master
# Changes not staged for commit:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: README
#
no changes added to commit (use "git add" and/or "git commit -a")
$ ls README
ls: cannot access README: No such file or directory
Run Code Online (Sandbox Code Playgroud)
为什么?我创建分支的全部意义在于,我可以尝试一些东西,如果不成功则扔掉它.Toughts?
你没有提交删除.只有承诺的变更才是"孤立的".
关于你的评论:
也许我错过了一些东西,但在我看来这是一种奇怪而不良的行为.
想一想:
您删除README的crazy-refactoring,但并没有提交更改.Git知道你改变了文件而你没有提交它.为了保留您的更改,如果您签出另一个分支,它不会覆盖它们.
否则,Git无法知道当您切换回分支时您所做的更改已经发生了什么变化.它们将丢失,这比看到其他分支中的更改要糟糕得多.
您当前的工作目录始终是当前分支+未提交的更改(除非您重置它们).
当然,Git可以在检查其他分支时警告您,您有未提交的更改,但有时需要保留更改并切换到另一个分支.