3

我在branchX。我在我的工作目录中进行了一些更改。它们都反映在“未上演提交的更改”中。现在我愿意git checkout branchY。有时我会将更改移动到 branchY 的“未暂存的更改”中,例如:

M <some file1 path>
M <some file2 path>

有时 git 会给我这个信息 -Please commit your changes or stash them before you switch branches.

git 如何决定何时反映更改以及何时中止?如果我在未提交的情况下结帐,git 是否应该永远不要将一个分支的“未暂存的更改”更改移动到另一个分支中?

4

2 回答 2

2

您引用的第二条消息 ( Please commit your changes or stash them before you switch branches.) 发生在移动挂起的更改时会在要签出的分支上产生冲突。

当没有检测到冲突时,首先更新工作树关于 HEAD 现在指向的提交,然后在上面重放您的未决更改,您准备添加更多更改或立即提交。

作为旁注,在检查另一个分支之前始终返回干净状态被广泛认为是一种好习惯。提交分支* 或存储更改可能是实现这一目标的最常见方法。

(* 因为这个提交现在只是本地的,当你回到这个分支时,你将有机会修改它或完全删除它。)

于 2018-10-12T13:31:13.013 回答
2

相关文件man git-checkout说:

git checkout <branch>

要准备工作<branch>,请通过更新工作树中的索引和文件并指向HEAD分支来切换到它。保留对工作树中文件的本地修改,以便将它们提交到<branch>.

但是,如果您在工作目录中所做的更改与在 中引入的更改重叠,<branch>则存在冲突。这类似于合并冲突,因此checkout中止。

您可以使用-m(or --merge) 标志继续进行checkout,但您必须解决冲突,就像在合并时所做的那样。

于 2018-10-12T13:40:16.993 回答