Git:分支应该隔离更改,还是不应该?

Git:分支应该隔离更改,还是不应该?,git,Git,我以为我已经很好地掌握了Git,但刚才我很惊讶。我认为分支会将更改与其他分支隔离开来,因此我在一个新分支中开始了一次大规模的实验性重构。这种重构意味着移动许多文件。当我切换到master时,我仍然可以看到变化 我转到我的沙盒存储库来复制问题: $ git branch crazy-refactoring $ git checkout crazy-refactoring $ rm README $ git checkout master $ git status # On branch maste

我以为我已经很好地掌握了Git,但刚才我很惊讶。我认为分支会将更改与其他分支隔离开来,因此我在一个新分支中开始了一次大规模的实验性重构。这种重构意味着移动许多文件。当我切换到master时,我仍然可以看到变化

我转到我的沙盒存储库来复制问题:

$ 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
$git分支疯狂重构
$git疯狂的重构
$rm自述文件
$git签出主机
$git状态
#论分行行长
#未为提交而暂存的更改:
#(使用“git add/rm…”更新将提交的内容)
#(使用“git签出--…”放弃工作目录中的更改)
#
#删除:自述
#
未向提交添加任何更改(使用“git add”和/或“git commit-a”)
$ls自述文件
ls:无法访问自述文件:没有此类文件或目录

为什么??我创建一个分支的全部意义在于,我可以尝试一些东西,如果不成功,就把它扔掉。Toughts?

您没有提交删除。只有提交的更改是“隔离的”

关于你的评论:

也许我遗漏了什么,但在我看来,这是一种奇怪和不受欢迎的行为

想想看:

您删除了
疯狂重构
中的
自述文件
,但未提交更改。Git知道您更改了文件,但没有提交。为了保留您的更改,如果您签出另一个分支,它不会覆盖这些更改。
否则,当您切换回进行更改的分支时,Git将无法知道更改是什么。它们将丢失,这比看到其他分支的变化要糟糕得多

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


当然,Git可能会在签出另一个分支时警告您,您有未提交的更改,但有时需要保留更改并切换到另一个分支。

您没有提交删除。只有提交的更改是“隔离的”。没错,在提交自述文件之后,在疯狂重构分支中,它重新出现在主分支中。也许我遗漏了什么,但在我看来,这是一种奇怪的、不受欢迎的行为。起初它也让我感到困惑,但现在我一直依赖于这种行为,当我对一个分支进行大量更改时,我决定以后将其扔到另一个分支上。啊,有趣的是,你可以进行更改,你不需要提交它们,而是创建一个新的分支,您仍然可以看到这些更改并在另一个分支中提交它们。我没想过!嘿,菲利克斯,你是对的-让这成为答案,这样我们就可以+1了!也谢谢你的额外解释,加上butter71说它也可能有用。