Git - Не могу сменить ветку - PullRequest
2 голосов
/ 27 сентября 2011

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

Что я делаю:

Я начал с добавления его в один из моих проектов и создал 3 ветки:

  • Мастер
  • Стабильная
  • Альфа

Все казалось в порядке. На сегодняшний день Master и Stable были практически одним и тем же кодом. Я работал над Альфой, которая содержала начало некоторых новых функций.

Что пошло не так:

Я хотел закончить тестирование стабильной ветви, чтобы я мог выпустить обновление для приложения iOS. Я случайно переключился на ветку master (это ветка, которую я планирую использовать для выпущенных версий), а затем захотел перейти на стабильную ветку. Однако при попытке изменить я получаю сообщение об ошибке:

"you need to resolve your current index first"

А ветка отказывается меняться. Очевидно, это связано с плохим слиянием ... хотя я даже не помню, чтобы что-то слилось, за исключением нескольких строк кода, когда я настраивал git. Вот вывод «git status»:

# On branch master
# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#   both modified:      Schedule.xcodeproj/project.xcworkspace/xcuserdata/Jordan.xcuserdatad/UserInterfaceState.xcuserstate
#

Я использую Xcode 4 и использую встроенный менеджер хранилища для переключения веток / управления git и т. Д.

Итак, что пошло не так? Почему git дает мне ошибки, даже если я вообще никогда не сливал много (или чего-нибудь?) - и как я могу это исправить и избежать этого в будущем?

Ответы [ 3 ]

2 голосов
/ 27 сентября 2011

Исправлено с помощью:

git reset HEAD <file name of the file stopping merge>

Больше не происходило, добавляя игнорирования и атрибуты в некоторые файлы пакета .xcodeproj:

.gitignore

 # xcode noise
build/*
*.pbxuser
*.mode1v3
*.xcuserstate

# old skool
.svn

# osx noise
.DS_Store
profile

.gitattributes

 *.pbxproj -crlf -diff -merge
0 голосов
/ 12 сентября 2017

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

$ git reset HEAD file path

После сброса файлов вы можете просто оформить их как:

$ git checkout file path

ВНИМАНИЕ: При этом ваши локальные изменения будут потеряны.

0 голосов
/ 27 сентября 2011

Простой подход - сначала запустить git stash, если вас не интересует Schedule.xcodeproj / project.xcworkspace / xcuserdata / Jordan.xcuserdatad / UserInterfaceState.xcuserstate, которым я, вероятно, не был бы.

Как отмечает Стивен (ниже), это не идеальный подход.Другой подход (который, вероятно, не понравится некоторым) состоит в том, чтобы удалить файл из репозитория и зафиксировать это изменение:

git rm -f --cached Schedule.xcodeproj/project.xcworkspace/xcuserdata/Jordan.xcuserdatad/UserInterfaceState.xcuser
git commit

Флаг --cached удерживает его от удаления с жесткого диска,и флаг -f необходим, потому что он был «изменен» (даже если вы думаете, что это не так).

Чтобы подобные проблемы не возникали в будущем, я бы добавил этот файл, а такжевсе другие пользовательские файлы, в файл .gitignore .

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