在不进行提交的情况下切换Git分支

3
在切换分支前必须提交到git仓库吗?我听说是这样的,因为我可能会丢失更改。但是,在修改文件并检出后,我可以轻松返回到以前的分支,并且没有丢失任何工作。该文件具有M状态。
他们在这里说明,M表示合并(这很奇怪,我认为它应该通知我有关修改的信息)。
$ git checkout master
M   README
Switched to branch 'master'
$ cat README
This is the README file.
This line was added in the working directory while in the test branch.

从“不提交更改就切换到Git:没有冲突”的部分。 M README 是什么意思?
谢谢帮助。
1个回答

2
一个 git checkout 命令不会执行,如果当前有任何修改可能会被覆盖。

https://git-scm.com/book/en/v2/book/01-introduction/images/areas.png

这段文字的翻译如下:

(图片来源于“入门 - Git 基础”)

实际上,提到的示例使用了 git checkout -m(而没有提交),这意味着修改已经合并:

-m
--merge

当切换分支时,如果你对一个或多个文件进行了本地修改,这些修改与当前分支和要切换到的分支不同,命令将拒绝切换分支以保留上下文中的修改。然而,使用此选项,会在当前分支、工作树内容和新分支之间进行三方合并,然后你将进入新分支。
最好在切换之前提交(或存储)当前更改,但是checkout -m可以至少合并这些更改,而不是失败(或在checkout -f的情况下擦除它们)(也请参见“git重置和git checkout有什么区别?”)。

M README是什么意思

"M README" 没有明确的语境,无法确定其含义。
这是未暂存(和未提交)的修改,即正在进行中的工作。
git checkout -m 允许将该修改合并到目标分支中,而不是使简单的 git checkout 失败。
另请参阅 "索引中有什么?有什么已更改?"。

https://git-scm.com/figures/18333fig0201-tn.png


@user107986 这就是想要的效果:在git checkout -m master之前,在测试分支中添加一个冲突:合并更改,然后显示合并冲突。 - VonC
已删除评论并将其放入问题中。 - user107986

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接