Git允许我切换分支而不提交更改

bur*_*erB 27 git

我正在学习Git,通过一个教程.我在分支seo_title,我对文件mission.html进行了未提交的更改.我确实git checkout master希望收到有关未提交提交的更改,未添加更改等的警告,但是它继续进行并使用以下消息切换分支:

M       mission.html
Switched to branch 'master'
Run Code Online (Sandbox Code Playgroud)

然后,当我这样做时,git diff mission.html它向我显示工作目录仍然包含我在检查其他分支时所做的更改.我错过了什么?对于它的价值,我在Windows上使用Git Bash.

编辑:对mission.html的更改尚未添加到暂存索引中.

编辑2:我认为最高投票的答案是正确的,但经过进一步调查,它与我所看到的行为不符.这是对我正在做的更全面的描述:

top_directory(master) > git branch new_branch_1
top_directory(master) > git branch new_branch_2
top_directory(master) > git checkout new_branch_1
Run Code Online (Sandbox Code Playgroud)

(打开notepad ++并修改resources.html,保存)

top_directory(master) > git status
# On branch new_branch_1
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed
#   (use "git checkout -- <file>..." to discard changes in wo
#
#       modified:   resources.html
#
no changes added to commit (use "git add" and/or "git commit
top_directory(new_branch_1) > git checkout new_branch_2
Run Code Online (Sandbox Code Playgroud)

这是我希望git反对并告诉我存储或提交的地方,因为new_branch_1和new_branch_2有不同版本的resources.html,但它只是在没有警告的情况下切换到新分支,它带来了未提交的更改:

M       resources.html
Switched to branch 'new_branch_2'
top_directory(new_branch_2) > git status
# On branch new_branch_2
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   resources.html
#
no changes added to commit (use "git add" and/or "git commit -a")
Run Code Online (Sandbox Code Playgroud)

是否有一种模式或设置可以使其表现为这种方式而不是警告?或者我仍然误解了这种情况?

编辑3:我现在明白了.评分最高的答案是正确的,请参阅我对该答案的最新评论.

Nab*_*Ali 35

您上次尝试使用本地更改切换分支时看到的不同行为现在是由于文件更改不同.

所以,假设我们有一个名为'readme'的分支,你已经对文件进行了一些更改,比方说README.md.

现在,你已经切换回主人.你对其他文件(不是README.md)做了一些工作.现在您有本地更改.如果您尝试切换回"自述"分支而不提交更改,它将允许您.为什么?因为切换到"自述"分支不会覆盖任何本地更改.

但是,如果您对主分支上的README.md文件进行了修改,那么当您尝试执行此操作时

git checkout readme 
Run Code Online (Sandbox Code Playgroud)

你会遇到的

error: Your local changes to the following files would be overwritten by checkout: README.md
Please, commit your changes or stash them before you can switch branches.
Run Code Online (Sandbox Code Playgroud)

因为您对README.md进行了更改,需要合并.


GoZ*_*ner 15

这是正常的行为.如果您不想在新签出的分支上修改文件,请将其存储起来.像这样.

# on branch dev
$ git stash
$ git checkout master

# do stuff on master

# back to dev
$ git checkout dev
$ git stash pop
Run Code Online (Sandbox Code Playgroud)