Git позволяет менять ветки с неустановленными изменениями - PullRequest
59 голосов
/ 16 декабря 2011

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

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

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

Ответы [ 2 ]

131 голосов
/ 16 декабря 2011

Как это решит

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

Предположим, вы находитесь на ветке dev и изменили foo.txt. Не совершая, вы пытаетесь проверить master. Произойдет одно из двух.

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

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

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

Для изменений "упс"

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

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

  • git stash save "here's a summary of my changes" (сводка будет отображаться в git stash list)
  • git checkout otherbranch
  • git stash pop (что является комбинацией git stash apply и git stash drop)
11 голосов
/ 16 декабря 2011

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

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