«Git checkout branch1» неожиданно объединяет изменения из branch2 в branch1 вместо предупреждения о том, что я должен сделать коммит первым - PullRequest
0 голосов
/ 01 мая 2018

Допустим, я работаю над 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!

Я не хочу такого поведения. Я не хочу переносить все изменения, которые я сделал в branch2, в branch1, когда я использую git checkout. Это должно предупредить меня, что я забыл зафиксировать вместо принятия изменений.

EDIT:

Ранее я получал сообщение об ошибке, подобное следующему:

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 голосов
/ 02 мая 2018

Изменения, которые вы описываете как "на branch2", на самом деле не относятся к branch2. Они являются изменениями в вашем рабочем наборе и не были поставлены и не переданы какой-либо ветви.

Если в вашем рабочем наборе есть изменения, и вы извлекаете ветку, эти изменения остаются в рабочем наборе, если они не конфликтуют с другой ветвью.

Чтобы избежать этой проблемы, вы можете проверить незафиксированные изменения перед проверкой ветки (я делаю git status -sb перед любой проверкой). И даже если вы забыли это сделать, вы всегда можете просто вернуться к branch2 с git checkout branch2 и затем зафиксировать изменения.

0 голосов
/ 01 мая 2018

Это поведение git по умолчанию. Когда возникают конфликты между незафиксированными изменениями и извлечением ветки, git отказывается говорить, что вы должны сначала зафиксировать изменения.

Когда нет конфликтов, незафиксированные изменения остаются нетронутыми в рабочем дереве. Нет способа изменить это. Вы можете прочитать об этом в деталях, например. здесь

IntelliJ просто обрабатывает кейс, предлагая вам Smart Checkout (Stash Changes - Checkout - Unstash), когда это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...