#git
Вопрос:
Я пытаюсь перебазировать свою локальную ветвь против главной ветви. Из моей локальной ветви я выполнил приведенную ниже команду для перебазирования. Я практиковался в использовании утилиты командной строки (т. е. Git Bash) в течение некоторого времени и хотел бы использовать ее для устранения текущей проблемы.
Я могу использовать инструмент кода Visual Studio для принятия текущих / входящих / обоих изменений.. Но есть ли способ выполнить то же самое с помощью Git Bash? Также для приведенного ниже сценария, каков был бы предпочтительный способ исправления?
> git pull --rebase origin master
> git status
interactive rebase in progress; onto 53681c8
Last commands done (2 commands done):
pick 89bb0987 Updated messenger.xml
pick 990bn189 Updated messenger.xml
Next commands to do (9 remaining commands):
pick 6780f98 Updated messenger.xml
pick 9091m969 Updated updated_numbers.xml
(use "git rebase --edit-todo" to view and edit)
You are currently rebasing branch 'feature-jd-bulk-messenger' on '53681c8'.
(fix conflicts and then run "git rebase --continue")
(use "git rebase --skip" to skip this patch)
(use "git rebase --abort" to check out the original branch)
Unmerged paths:
(use "git restore --staged <file>..." to unstage)
(use "git add <file>..." to mark resolution)
both modified: jd-test/admin/messenger.xml
Комментарии:
1. Какой трюк вы используете, чтобы превратить a
pull --rebase
в интерактивную перебазировку ? Это поддерживается?2. @eftshift0 Это плохо сформулированное сообщение, это просто обычный конфликт во время обычной перебазировки.
3. Просто делай, что там написано. Разрешите конфликт
jd-test/admin/messenger.xml
, добавьте его и продолжите перебазирование. В чем вопрос? Это просто потому, что вы не знаете, как редактироватьjd-test/admin/messenger.xml
?
Ответ №1:
Это просто обычный конфликт слияния, изменения в вашей локальной ветке совпадают или перекрывают изменения в истории магистрали, и вам нужно решить, как должен выглядеть результат, потому что Git справедливо не осмеливается угадать.
есть ли способ выполнить то же самое с помощью Git Bash?
Да, решите jd-test/admin/messenger.xml
, как должно выглядеть, добавьте это , и git rebase --continue
какой бы инструмент слияния вам ни понравился, он сможет автоматизировать для вас последовательность редактирования/выбора/этапа. Я использую vimdiff, который справляется с этим с апломбом, разве интеграция с Git VS Code не понимает, что здесь происходит?
Для примера,
git init `mktemp -d`; cd $_
seq 5 >file; git add .; git commit -m-
git branch -t mine
sed 2s,$,a, -i file; git commit -am2
git checkout mine
sed 3s,$,a, -i file; git commit -am3
git rebase
и вы получите конфликт , в file
котором правильным результатом будет принять обе измененные строки как есть, но Git не может быть достаточно уверен в этом, чтобы просто сделать это за вас. git status
здесь появится знакомое сообщение, я могу понять его, поняв, что перебазировка теперь фактически интерактивная, она ждет меня, она взаимодействует со мной. Я бы сделал git mergetool
это здесь.
Если вы собираетесь делать много этого, вы, возможно, захотите включить повторное использование связанных решений: git config rerere.enabled true; git rerere
перед добавлением разрешения в первый раз, после этого Git запустит его для вас, запустив его, Git запомнит новые конфликты и разрешения в индексе на случай, если они снова появятся при последующих перебазировках.