如果我有更改但未暂存(commit)的文件(修改过的文件),Git可以让我切换分支。
这方面有配置吗?
编辑:起初,我认为这是需要设置的配置,以禁止在存在修改但未暂存的文件时在分支之间切换。但根据 Emily 的评论,看来只有当分支之间的文件不同时才会提示,否则不会有提示。
如果我有更改但未暂存(commit)的文件(修改过的文件),Git可以让我切换分支。
这方面有配置吗?
编辑:起初,我认为这是需要设置的配置,以禁止在存在修改但未暂存的文件时在分支之间切换。但根据 Emily 的评论,看来只有当分支之间的文件不同时才会提示,否则不会有提示。
进行快速实验后有以下结论。
假设您目前在分支dev
上,已经修改了foo.txt
文件。未提交更改的情况下,尝试切换到master
分支。会发生以下两种情况中的一种。
如果在dev
中没有master
分支所拥有的提交的foo.txt
文件版本,则不能切换分支而需要先提交更改,因为master
拥有与未提交的更改产生冲突的“新”文件版本。
因此,“检出”master
需要Git更新foo.txt
至master
拥有的更新版本,销毁您未提交的更改。为防止您遗失工作,Git不会改变分支。
否则,对foo.txt
的修改是从master
所知道的版本“之后”进行的,您将能够更改分支。Git无需更新文件,因为master
没有关于该文件的新信息。
基于上述原因,如果您在一个分支上有未提交的更改,而意识到实际上应该在另一个分支上提交更改,则可能无法检出其他分支。
但是,您可以执行以下操作:
git stash save“这是我的更改摘要”
(摘要将显示在git stash list
中)git checkout otherbranch
git stash pop
(这是git stash apply
和git stash drop
的组合)mkdir throwaway; cd throwaway; git init
。进行几个 Git 操作之后,我就学到了新东西,然后可以删除那个目录。 - Nathan Longfoo.txt
是你当前分支上的一个新的、未跟踪(从未提交)的文件,而你又执行了 git checkout other_branch
命令,那么 git 不会对 foo.txt
进行任何操作;因为在其他分支上它没有任何冲突版本,所以 git 会将该文件视为无关紧要。也许你使用的工具还执行了 git clean
命令?https://git-scm.com/docs/git-clean - Nathan Long正如Emily所指出的那样,这是一个特性。只有在执行更改需要修改任何未提交更改的文件时,Git 才会禁止分支更改。如果所有修改过的文件都不受分支检出的影响,Git 将不会发出任何投诉。这意味着无论您检出哪个分支,您都可以始终检出上一个分支,您的工作树将与您离开时完全相同。