从一个分支到另一个分支的git checkout

时间:2018-10-12 13:20:30

标签: git

我在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是否应该永远不要将一个分支的“未暂存的更改”更改为另一个分支?

2 个答案:

答案 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,但是您必须解决冲突,就像合并时一样。