我在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是否应该永远不要将一个分支的“未暂存的更改”更改为另一个分支?
答案 0 :(得分:2)
您引用的第二条消息(Please commit your changes or stash them before you switch branches.
发生在移动待处理的更改会在待签出分支上产生冲突时。
当未检测到冲突时,首先更新有关HEAD现在指向的提交的工作树,然后在上方重播您的未完成更改,您准备添加更多更改或正确提交离开。
作为旁注,一种广泛的做法是,在检查另一个分支之前,始终返回到干净状态是一种好习惯。提交分支*或存储更改可能是实现此目的的最常见方法。
(*由于此提交目前仅在本地,因此您有机会在返回该分支时对其进行修改或将其完全删除。)
答案 1 :(得分:2)
相关文档man git-checkout
说:
git checkout <branch>
要准备在
<branch>
上工作,请通过更新工作树中的索引和文件,并将HEAD
指向分支来切换到该位置。保留对工作树中文件的本地修改,以便可以将它们提交到<branch>
。
但是,如果您在工作目录中所做的更改与<branch>
中引入的更改重叠,则说明存在冲突。这类似于合并冲突,因此checkout
被中止。
无论如何,您都可以使用-m
(或--merge
)标记继续进行checkout
,但是您必须解决冲突,就像合并时一样。