假设我正在处理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
,就像上面的示例一样,没有向我显示错误。
答案 0 :(得分:2)
您在branch2"上描述为"的更改实际上并不在branch2上。它们是对工作集的更改,并且尚未暂存或未提交给任何分支。
如果您的工作集有更改,并且您签出了分支,那么如果这些更改不与其他分支冲突,则这些更改将保留在工作集中。
要避免此问题,您可以在签出分支之前检查未提交的更改(我在结帐前执行git status -sb
)。即使您忘记这样做,也可以随时使用git checkout branch2
返回branch2,然后提交更改。
答案 1 :(得分:1)
这是默认的git行为。当未提交的更改与已检出的分支之间存在冲突时,git拒绝表示您应首先提交更改。
如果没有冲突,则工作树中未提交的更改将保持不变。没有办法改变这一点。你可以详细阅读它,例如here
IntelliJ只会在可能的情况下处理为您提供智能结账(存储更改 - 结帐 - 解除存储)的案例。