“Git checkout branch1”突然合并了从branch2到branch1的更改,而不是警告我先提交

时间:2018-05-01 18:19:47

标签: git github intellij-idea

假设我正在处理branch1并从branch2创建branch1

直到最近,当我对branch2进行了一些更改并且没有更改为branch1时没有提交它们时,IntelliJ控制台警告我,我首先需要提交更改,否则我不会能够改变。

但是现在,当我在git checkout branch1上使用branch2而没有在branch2上提交我的更改时,由于某种原因我的所有更改都会自动提交并转移到branch1 }。

例如:

我在branch2并修改了一些文件。我忘记提交更改并尝试切换到branch1。这就是发生的事情......

git checkout branch1
Switched to branch 'branch1'
M       src/main/java/Test.java
Your branch is up to date with 'origin/branch1'.

...我在branch2中所做的所有更改都转移到了branch1

我不想要这种行为。当我使用git checkout时,我不想将我在branch2中所做的所有更改转移到branch1。它应该警告我,我忘了承诺,而不是采取改变。

修改

以前,我会收到如下错误消息:

git checkout branch1
error: Your local changes to the following files would be overwritten by checkout:
    Test.java
Please, commit your changes or stash them before you can switch branches.
Aborting

现在该消息被忽略,更改只是自动从branch2合并/转移到branch1,就像上面的示例一样,没有向我显示错误。

2 个答案:

答案 0 :(得分:2)

您在branch2"上描述为"的更改实际上并不在branch2上。它们是对工作集的更改,并且尚未暂存或未提交给任何分支。

如果您的工作集有更改,并且您签出了分支,那么如果这些更改不与其他分支冲突,则这些更改将保留在工作集中。

要避免此问题,您可以在签出分支之前检查未提交的更改(我在结帐前执行git status -sb)。即使您忘记这样做,也可以随时使用git checkout branch2返回branch2,然后提交更改。

答案 1 :(得分:1)

这是默认的git行为。当未提交的更改与已检出的分支之间存在冲突时,git拒绝表示您应首先提交更改。

如果没有冲突,则工作树中未提交的更改将保持不变。没有办法改变这一点。你可以详细阅读它,例如here

IntelliJ只会在可能的情况下处理为您提供智能结账(存储更改 - 结帐 - 解除存储)的案例。