Подтвердить что ты не робот

Git позволяет изменять ветку с неустановленными изменениями

Git позволяет мне изменять ветки, когда у меня есть изменения, не поставленные для фиксации (измененные файлы).

Есть ли конфигурация для этого где-нибудь?

Изменить: сначала я думал, что это была конфигурация, в которой мне нужно было запретить изменение между ветвями, если есть измененные неустановленные файлы. Но, по словам Эмили, кажется, что вам подсказывают, отличаются ли файлы между ветвями, а не запрашиваются иначе.

4b9b3361

Ответ 1

Как он решает

Быстрый эксперимент показывает следующее.

Предположим, что вы находитесь на ветке dev, и вы изменили foo.txt. Без фиксации вы пытаетесь проверить master. Будет одна из двух вещей.

  • Если foo.txt был изменен в master в коммит, который dev не имеет, вам не разрешается переключаться без фиксации, потому что master имеет "новую" версию файл, который конфликтует с неустановленными изменениями.

    Чтобы "проверить" master, поэтому потребовалось бы Git обновить foo.txt до более новой версии, которая master имеет, уничтожая ваши неустановленные изменения. Чтобы предотвратить вашу проигрышную работу, она не будет изменять ветки.

  • В противном случае модификация была выполнена "с тех пор, как об этом знает версия master, и вы сможете изменять ветки. Git не нужно обновлять файл, потому что master не имеет новой информации о файле.

Для изменений "возгласы"

Из-за вышеизложенного, если у вас есть неустановленные изменения в файлах на одной ветке и вы действительно хотите зафиксировать изменения на другом, вы можете или не сможете проверить другую ветку.

Вы можете, однако, сделать следующее:

  • git stash save "here a summary of my changes" (резюме появится в git stash list)
  • git checkout otherbranch
  • git stash pop (который представляет собой комбинацию git stash apply и git stash drop)

Ответ 2

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