Почему я не могу переключаться между ветками?


81

Я пытаюсь переключить ветки в git, но получаю следующее сообщение об ошибке:

error: you need to resolve your current index first

Я использую git под xcode4

git status
# On branch DateCode
# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#   both modified:      Whereami.xcodeproj/project.xcworkspace/xcuserdatauser.xcuserdatad/UserInterfaceState.xcuserstate
#
no changes added to commit (use "git add" and/or "git commit -a")
Frappuccinos-MacBook-Pro:whereami

# Необъединенные пути: # (используйте "git reset HEAD <файл> ..." для деактивации) # (используйте "git add / rm <file> ...", если необходимо, чтобы отметить разрешение) #
lampShade

Пожалуйста, отредактируйте свой вопрос, чтобы вставить эту информацию, она не читается в комментариях.
Мат

git reset {{currentBranchName}}тогда git checkout . решит вашу проблему
muthukumar selvaraj 08

Отвечает ли это на ваш вопрос? Ошибки слияния Git
Henke

Ответы:


96

Попробуйте это, если вам не нужны какие-либо слияния, перечисленные в git status:

git reset --merge

Это сбрасывает индекс и обновляет файлы в рабочем дереве, которые различаются между <commit>иHEAD , но сохраняют те, которые различаются между индексом и рабочим деревом (т. Е. Имеют изменения, которые не были добавлены).

Если файл, который отличается от <commit>индекса, содержит неустановленные изменения - сброс прерывается.

Подробнее об этом - https://www.techpurohit.com/list-some-useful-git-commands и ссылка на документ - https://git-scm.com/docs/git-reset


53

В результате вы both modifiedполучите сообщение о git statusконфликтах, возникших в результате слияния. git не позволяет вам менять ветку, пока вы не разрешите эти конфликты. Если вы отредактируете этот файл, вы должны увидеть в нем маркеры конфликтов - в руководстве по git есть руководство по разрешению этих конфликтов . (Поскольку kernel.org в настоящее время не работает, вы можете найти это руководство здесь .)

В качестве альтернативы, если вы считаете, что слияние было ошибкой, вы можете отменить его с помощью: git reset --merge


19

Если вас не интересуют изменения, которые git называет выдающимися, вы можете выполнить принудительную проверку.

git checkout -f {{insert your branch name here}}


3
Это было именно то, что мне было нужно - у меня была тестовая ветка, в которой слияние не удалось с множеством конфликтов, и я просто хотел выбросить ветку. Мне не удалось вернуться в хорошую ветку (проверка не удалась, а git reset --mergeтакже не удалась). Но checkout -fработал отлично.
Чад

6

Я получил это сообщение, когда обновлял новые файлы удаленно, и индекс вышел из строя. Пытался исправить индекс, но разрешение через Xcode 4.5, GitHub.app (103) и GitX.app (0.7.1) не удалось. Итак, я сделал это:

git commit -a -m "your commit message here"

который работал в обход индекса git.

Два сообщения в блоге, которые помогли мне разобраться в Git и Xcode:

  • Рэй Вендерлих о Xcode 4.5 и
  • Оливер Стил с 2008 года


  • 6

    вы можете сбросить ветку с помощью HEAD

    git reset --hard branch_name
    

    затем получить ветки и удалить ветки, которые не удалены от локального,

    git fetch -p 
    

    1

    Перед переключением ветки необходимо зафиксировать или уничтожить все несохраненные изменения.

    Git не позволит вам переключить ветку, если это означает, что несохраненные изменения будут удалены.


    Ошибка и git statusвывод указывают, что это не просто изменения в рабочем дереве, которые могут быть потеряны при изменении ветки - они указывают на то, что слияние не удалось, и конфликты должны быть разрешены в индексе.
    Марк Лонгэр

    1

    Поскольку файл изменен обоими, либо вам нужно добавить его,

    git add Whereami.xcodeproj/project.xcworkspace/xcuserdatauser.xcuserdatad/UserInterfaceState.xcuserstate
    

    Или, если вы хотите игнорировать изменения года, сделайте

    git reset HEAD Whereami.xcodeproj/project.xcworkspace/xcuserdatauser.xcuserdatad/UserInterfaceState.xcuserstate
    

    После этого просто переключите ветку - это должно сработать.

    Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
    Licensed under cc by-sa 3.0 with attribution required.