Git:分支机构应该隔离这些变化,还是不应该?

时间:2011-07-01 18:04:49

标签: git

我以为我已经对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?

1 个答案:

答案 0 :(得分:6)

您没有提交删除。只有承诺的变更才是“孤立的”。

关于你的评论:

  

也许我错过了一些东西,但在我看来这是一种奇怪且不受欢迎的行为。

想一想:

您在README中删除了crazy-refactoring但未提交更改。 Git知道你改变了文件而你没有提交它。为了保留您的更改,如果您结帐另一个分支,则不会覆盖它们 否则Git无法知道当你切换回分支时你所做的改变是什么。它们会丢失,这比看到另一个分支中的变化要糟糕得多。

您当前的工作目录始终是当前分支+未提交的更改(除非您重置它们)。

当然,Git可以在检查其他分支时警告您,您有未提交的更改,但有时需要保持更改切换到另一个分支。