Git: як відновити об'єднання комітету?


124

З SVN легко повернути об'єкт на об'єкт, але як це зробити з Git?


1
Дублікат

Я не думаю, що саме це має на увазі під питанням. Зворотне злиття у SVN також повертає зміни від комісії до локальних змін, тож ви можете їх редагувати та виконувати знову.
Dormouse

Відповіді:


105

Щоб створити новий комітет, який "скасовує" зміни минулого комітету, використовуйте:

$ git revert <commit>

Також можливо фактично видалити комісію з довільної точки в минулому шляхом скидання і повторного скидання, але ви дійсно не хочете цього робити, якщо ви вже перенесли свої зобов'язання в інше сховище (або хтось інший вийшов з вас) .


31
Ймовірно, вам буде потрібно ввести -m <parent number>варіант, git revertщоб вказати, яку зміну потрібно відновити. Якщо ви хочете скасувати злиття неопублікованої історії, скористайтеся git reset --hard HEAD^1.
Якуб Нарбський

3
Якуб: це правда, якщо ви скасовуєте комісію злиття, але в термінології Subversion "зворотне злиття" насправді є просто назвою для скасування будь-якого виду.
Бен Джеймс

4
Зауважте, що використання -mзасобів майбутнього злиття з нез’єднаної гілки не буде включати зміни до цього об'єднання! Дивіться schacon.github.com/git/howto/revert-a-faulty-merge.txt щодо правильних способів повторного об'єднання нез’єднаної гілки.
Martijn Pieters

125

Щоб повернути злиття Комміт, ви повинні використовувати: git revert -m <parent number>. Так, наприклад, для повернення останнього найпоширенішого з’єднання за допомогою батьківського з номером 1 ви б використали:

git revert -m 1 HEAD

Щоб скасувати об'єднання об'єднання до останнього, ви зробите:

git revert -m 1 HEAD^

Використовуйте, git show <merge commit SHA1>щоб побачити батьків, нумерація - це порядок їх появи, наприкладMerge: e4c54b3 4725ad2

документація щодо злиття git: http://schacon.github.com/git/git-merge.html

обговорення git merge (заплутане, але дуже детальне): http://schacon.github.com/git/howto/revert-a-faulty-merge.txt


36
Як можна отримати "число", пов'язане з батьків? Чи мають гілки власне числовий 'id'?
daniyalzade

7
Використовуйте, git show <merge commit SHA1>щоб побачити батьків, нумерація - це порядок їх появи, наприкладMerge: e4c54b3 4725ad2
суперметод

8
Приклад: git revert -m 1 SHA1Ця команда працювала для того, щоб повернути об'єкт злиття, який був декількома об'єднаннями об'єднань перед заголовком і мав багато комірок під ним.
c.apolzon

3
Хто з батьків? E4c54b3 або 4725ad2?
Дельфін

1
Це все ще не дає достатньої інформації про те, як результати git show співвідносяться з батьківськими номерами. Чи ґрунтується на "порядку їх появи" 1? На основі 0? У цьому прикладі конкретно, що таке SHA1 з батьківського 1? e4c54b3 або 4725ad2?
ковбасник

4

Якщо я вас правильно зрозумів, ти говориш про те, як робити

svn merge -rn:n-1

щоб відмовитися від попередніх зобов’язань, у такому випадку ви, ймовірно, шукаєте

git revert

0
git reset --hard HEAD^ 

Використовуйте вищезазначену команду для відновлення змін об’єднання.


3
Це викидає комісію злиття, яка не робить те, що просить оригінальний плакат. ОП намагається зробити зворотний патч, щоб скасувати попередні зміни, а не стерти історію попередніх змін взагалі.

-1

Якщо ви не хочете взяти на себе зобов’язання або хочете взяти на себе зобов’язання пізніше (для вас все одно буде підготовлено повідомлення про фіксацію, яке ви також можете редагувати):

git revert -n <commit>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.