Що саме робить git rebase --skip?


107

Я щойно зробив git pull --rebase origin masterі виник конфлікт.

По-перше, цей конфлікт був у файлі, якого я не торкнувся, і він становив близько 10 комісій назад. Чому це відбувається?

Потім я випадково набрав git rebase --skip, і він "пропустив цю латку".

Стурбований тим, що я пропустив команду, я перевірив нову версію ведучої гілки і зробив різницю між гілкою, на яку я робив ребайн, і новою гілкою. Єдині зміни, які відображаються в diff, - це остання фіксація, і перегляд журналу, патча, який був "пропущений", відображається в історії фіксації.

Хтось може пояснити, що тут відбувається?


11
Як ви випадково набираєте текст git rebase --skip. Можливо, помилково? :)
manojlds

3
Га! Мав на увазі тип --abort, але з незрозумілої причини він вийшов як --skip. Не думав насправді. :)
mrwooster

9
історія оболонки хороша в цьому (щоб ви могли виконати те, чого не хотіли).
Флоріан Кляйн

Відповіді:


60

Він робить те, що каже, пропускає комісію. Якщо ви запустили rebase --abortпізніше конфлікт під час того ж ребату, пропущений комітет теж буде скасовано.

Якщо ваша зміна вже існувала вгору, Git не зможе застосувати ваше зобов’язання (але зазвичай слід пропустити його автоматично, якщо патч точно такий же) Ваша власна комісія буде пропущена, але зміна все ще буде існувати в поточному HEAD, оскільки вона вже застосовувалася вище за течією.

Ви дійсно повинні переконатися, що ви не видалили важливої ​​вашої зміни;) (скористайтесь рефлогом, щоб повернутися до стану перед початком оновлення)


4
Так чому комісія все ще відображається в журналі? І чому відсутня фіксація зараз виявляється в розрізненні?
mrwooster

3
Так, конфлікт вже був вирішений вище ... чомусь git rebase викликає старі конфлікти злиття ... інша річ, яка мене бентежить? ... чи означає це, що він пропустив конфлікт, але застосував патч, який вирішив конфлікт?
mrwooster

3
Ви пропустили власну комісію, яка мала ту саму зміну, що і комісія вище. Ви пропустили свою комісію, але зміни все ж були внесені (оскільки вони вже існували вгору за течією)
knittl

1
@mittal ні, я не думаю, що --skipце шлях. Пропуск повністю пропустить комісію, відміняючи всі зміни, внесені в цей комітет.
вязання

3
@mittal: подумайте, git rebaseяк копіювання фільмів з однієї гілки на іншу гілку. Отже, коли ви пропускаєте комісію, початковий вміст комітету пропускається, а виправлення не застосовується (тому всі зміни, внесені до будь-якого файлу, не перетворять його у вашу цільову гілку). Найпростіший спосіб - налаштувати просте сховище git з двома гілками, декілька команд на кожній з них, а потім спробувати перезавантажити та пропустити комісію (ви можете використовувати git rebase --interactiveдля визначення, які pickskip
комісії
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.