我以为我已经对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
为什么呢?我创建分支的全部意义在于,我可以尝试一些东西,如果不成功则扔掉它。 Toughts?
答案 0 :(得分:6)
您没有提交删除。只有承诺的变更才是“孤立的”。
关于你的评论:
也许我错过了一些东西,但在我看来这是一种奇怪且不受欢迎的行为。
想一想:
您在README
中删除了crazy-refactoring
但未提交更改。 Git知道你改变了文件而你没有提交它。为了保留您的更改,如果您结帐另一个分支,则不会覆盖它们
否则Git无法知道当你切换回分支时你所做的改变是什么。它们会丢失,这比看到另一个分支中的变化要糟糕得多。
您当前的工作目录始终是当前分支+未提交的更改(除非您重置它们)。
当然,Git可以在检查其他分支时警告您,您有未提交的更改,但有时需要保持更改和切换到另一个分支。