Чи є якийсь спосіб моделювання а 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 покаже вам всі модифікації, які будуть об'єднані, якщо ви об'єднаєте свою гілку в базову гілку.
Звичайно, це не покаже вам конфліктів, але це корисний інструмент у злиттях.