git ветвление и фиксация - можете ли вы объяснить теорию этого загадочного (для меня) поведения? - PullRequest
4 голосов
/ 06 января 2012

У меня есть мастер ветка и в ней все нормально. Затем я создаю ветку под названием «Эксперимент» и создаю новый файл. Находясь в моей экспериментальной ветке, я добавляю этот файл с помощью команды git add. Затем я проверяю свою основную ветку. Находясь в моей основной ветке, я запускаю git status и обнаруживаю, что этот файл также был добавлен в мою основную ветку. Затем я запускаю git commit -m "message" в своей основной ветке, и происходит фиксация. Затем я переключаюсь на свою экспериментальную ветку и запускаю git status и обнаруживаю, что файл также был зафиксирован в моей экспериментальной ветке.

Вот то, что я ожидал: при переключении на основную ветку после добавления нового файла я ожидал, что файл там не появится. В конце концов, я не создавал файл в мастер-ветке и не добавлял файл в мастер-ветку. Поэтому, когда я переключаюсь на главную ветку и запускаю git status, почему он находит файл, уже добавленный и готовый к фиксации? И когда я затем фиксирую его в основной ветке, почему я также нахожу его зафиксированным в экспериментальной ветке, когда я переключаюсь назад? Было ли зафиксировано сразу две ветви?

1 Ответ

8 голосов
/ 06 января 2012

Когда вы запускаете git add, файл не подтвержден, он только добавляется в "индекс" Git.Возможно, вы хотели запустить git commit после выполнения git add в экспериментальной ветке.

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

Чтобы решить вашу конкретную проблему:

... и обнаружите, что этот файл также был добавлен в мою основную ветку.не запускайте git commit, тогда файл еще не добавлен в любую ветку .

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