Как исправить проблемы в интерактивной перебазировке Git

#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 запомнит новые конфликты и разрешения в индексе на случай, если они снова появятся при последующих перебазировках.