Чи є якийсь спосіб моделювання а git merge між двома гілками, поточною робочою гілкою та головним, але не вносячи жодних змін?
У мене часто виникають конфлікти, коли мені доводиться складати git merge. Чи є спочатку змоделювання злиття?
Чи є якийсь спосіб моделювання а git merge між двома гілками, поточною робочою гілкою та головним, але не вносячи жодних змін?
У мене часто виникають конфлікти, коли мені доводиться складати git merge. Чи є спочатку змоделювання злиття?
Відповіді:
Я не думаю, що існує спосіб імітувати те, що буде, поки ви не спробуєте об'єднатись. Однак якщо ви переконайтеся, що вихідний git statusфайл порожній перед тим, як зробити злиття, цілком безпечно просто продовжити і спробувати його. Якщо у вас виникли конфлікти, ви можете негайно повернутися до стану, в якому ви були раніше:
git reset --merge
Оскільки git 1.7.4, ви також можете скасувати злиття, виконавши:
git merge --abort
(Як пояснюється повідомлення про фіксацію, яке додало цю опцію , це було додано для відповідності git rebase --abortтощо).
--no-commitнабагато простіше на мою думку
--no-commitти все ще змінюєш індекс та робоче дерево, що не зовсім "без жодних змін" :) Думаю, що коли люди задають подібний вид питання, це взагалі тому, що вони не усвідомлюють, що найкращий спосіб зрозуміти, як відбудеться злиття, - це просто спробувати злиття , часто тому, що вони не усвідомлюють, наскільки легко повернутися до стану, в якому вони були раніше якщо виникли проблеми.
git merge --abortеквівалентно тому, git reset --mergeколи MERGE_HEADвін присутній", тому все, що простіше запам’ятати :)
Можна використовувати git merge --no-commit для запобігання злиття насправді, а якщо вам не подобається, як відбувається злиття, просто поверніть його до початкового заголовка.
Якщо ви точно не хочете завершити злиття, навіть якщо це швидке перемотування вперед (і, таким чином, не має конфліктів, за визначенням), ви можете також додати --no-ff.
git merge --abortіснує - можливо, ти маєш на увазі git reset --merge?
rebaseнемає --abortдля git merge.
--no-ff. Щоб запобігти появі злиття ff.
--no-ffтут дуже обов'язковий, оскільки --no-commitне зупиняє швидких змін.
Якщо я хочу порівнювати зміни в тематичній галузі з основним, я вважаю найпростішим і найбезпечнішим зробити наступне:
git checkout master
git checkout -b trial_merge
git merge topic_branch
Після завершення злиття легко помітити консолідовану зміну від головного
git diff master
Закінчивши, просто видаліть гілку trial_merge
git checkout master
git branch -D trial_merge
Таким чином, головна гілка ніколи не змінюється.
git checkout --detachі протестувати все, що завгодно. Пізніше, якщо ви хочете зберегти свої зміни, зробіть це git checkout -b new_branch. І якщо ви хочете відмовитись від змін, перевірте будь-яку галузь, яку ви хочете ( git checkout master).
topic_branchвін величезний (як це, мабуть, у випадку, якщо ви в першу чергу ставитеся до цього питання), diff masterрезультат, мабуть, занадто великий для вас, щоб звести яблуко, якщо злиття спричинить конфлікти.
Я використовую :
git merge --ff-only
згідно документації :
Відмовтеся від злиття та виходу з ненульовим статусом, якщо поточна HEAD уже оновлена або злиття не може бути вирішено як швидкий вперед.
Це насправді не є симуляцією, оскільки відбудеться швидке злиття вперед, якщо не буде конфліктів між двома гілками. Але у випадку конфліктів вас проінформують, і нічого не станеться.
Я git merge --abortнещодавно міг користуватися . Однак це можна використовувати лише у випадку конфлікту злиття. Якщо ви впевнені, що не хочете виконувати зобов'язання, то використовуйте інші згадані вище методи.
git merge --abort. Вам слід в майбутньому підтвердити свою відповідь, вказавши, хто написав відповідь, на яку ви звертаєтесь.
Чому б просто не створити гілку, що викидається (git checkout -b), і зробити тестове злиття там?
Я точно не знаю, чи це ваш випадок , але ваше запитання запам’ятало мені, що іноді я запускаю функцію, я виконую ці дні, і я зливаю розробку на ній багато разів.
З цього моменту я втрачаю контроль над точними файлами, які я змінив, і знаю це лише тоді, коли моя функція буде закрита і мій код піде розвиватися.
У цьому випадку хороший спосіб дізнатися, які модифікації ви зробили (крім інших злиття) використовує Sourcetree.
Потрібно натиснути правою кнопкою на базовій гілці та вибрати Diff Against Current:
Тоді sourcetree покаже вам всі модифікації, які будуть об'єднані, якщо ви об'єднаєте свою гілку в базову гілку.
Звичайно, це не покаже вам конфліктів, але це корисний інструмент у злиттях.