Я только что сделал, git pull --rebase origin master
и возник конфликт.
Во-первых, этот конфликт был в файле, который я не касался, и было возвращено около 10 коммитов. Почему это происходит?
Затем я случайно набрал git rebase --skip
, и он «пропустил этот патч».
Обеспокоенный тем, что я пропустил фиксацию, я проверил новую версию главной ветки и провел различие между веткой, в которой я выполнял перебазирование, и новой главной веткой. Единственные изменения, которые отображаются в различии, - это последняя фиксация, и, глядя в журнал, патч, который был «пропущен», отображается в истории фиксации.
Кто-нибудь может объяснить, что здесь происходит?
git rebase --skip
. Может быть, неправильно? :)Ответы:
Он делает то, что говорит, он пропускает фиксацию. Если вы запустите
rebase --abort
более поздний конфликт во время того же перебазирования, пропущенная фиксация, конечно же, будет отменена.Если ваше изменение уже внесено в апстрим, Git не сможет применить вашу фиксацию (но обычно должен автоматически пропускать его, если патч точно такой же). Ваша собственная фиксация будет пропущена, но изменение все еще будет существовать в текущем HEAD, потому что оно уже было применено выше.
Вам действительно следует убедиться, что вы не удалили важные изменения;) (используйте журнал ссылок, чтобы вернуться в состояние до перебазирования)
источник
--skip
это выход. Пропустить полностью пропустит фиксацию, удалив все изменения, сделанные в этой фиксации.git rebase
как копирование коммитов из одной ветви на другую ветку. Поэтому, когда вы пропускаете фиксацию, исходное содержимое фиксации пропускается и патч не применяется (поэтому все изменения, внесенные в любой файл, не попадут в вашу целевую ветку). Самый простой способ - создать простой репозиторий git с двумя ветвями, несколько коммитов для каждой из них, а затем попытаться перебазировать и пропустить коммит (вы можете использовать,git rebase --interactive
чтобы указать, какие коммиты будут скопированы (pick
) или пропущены (skip
)