Подтвердить что ты не робот

Удаление/отмена слияния на Sourcetree

Я сделал довольно мало изменений в своем проекте (я работал над удаленной веткой, а не над главной), я зафиксировал их и создал запрос на извлечение в BitBucket и объединил ветку с главной. Я забыл выдвинуть свои изменения после коммита. Теперь, после попытки переключить текущую ветвь на мою удаленную ветвь и вернуться к фиксации перед слиянием, мне удалось вернуть все свои изменения и сохранить их в другом месте в моей системе. То, что я хочу сделать сейчас, это отменить неудачное слияние, которое я сделал. Каждый раз, когда я нажимаю на слияние и выбираю "Reverse commit", я получаю следующее сообщение об ошибке:

msgstr "ошибка: фиксация - это слияние, но опция -m не указана.

фатально: возврат не удался

Теперь ветки выглядят так:

enter image description here

Я хочу удалить слияние и привести его в такое состояние, чтобы оно больше не показывало master(4 behind).

4b9b3361

Ответ 1

Этот метод основан на удалении истории:

  1. Проверьте ветку, в которой вы допустили ошибку на
  2. Щелкните правой кнопкой мыши на коммите, для которого вы хотите сбросить ветку на
  3. Нажмите "Сбросить текущую ветку для этого коммита"
  4. Выберите режим "Hard" и нажмите "OK"
  5. К сожалению, вам нужен терминал, чтобы сделать этот бит. Введите git push origin name_of_branch --force в терминал (вам может потребоваться ввести имя пользователя и пароль для git repo, чтобы он мог принять команду)

Обновление: Текущая версия дерева исходных текстов поддерживает принудительные нажатия. Это означает, что вам не нужно использовать команду, указанную в шаге 5! При нажатии отображается флажок, обозначенный "сила". Обычно он отключен.

Как включить флажок принудительного нажатия:

  1. "Инструменты" (в синей полосе вверху экрана)
  2. "Параметры"
  3. Вкладка "Git"
  4. "Включить принудительное нажатие" (2-я секция)
  5. "OK"

Установите этот флажок при нажатии, чтобы также исправить ошибку на исходном сервере.

Это, вероятно, самый простой способ сделать это, но так как он основан на удалении истории, если другие работают над проектом, убедитесь, что они все знают, что вы делаете, чтобы никто не сломал репозиторий git.

Ответ 2

Очень жаль, что SourceTree не облегчает вам возврат merge commits (по крайней мере, в Windows SourceTree 1.5.2.0). Однако, возвращая слияние можно легко выполнить из командной строки, но вы хотите верните слияние, добавив еще одну фиксацию, которая обратная результаты слияния, или вы хотите просто удалить фиксацию слияния из история вообще?

Если вы не делитесь веткой master с другими людьми, самая простая вещь сделать это было бы просто сделать жесткий reset, чтобы удалить фиксацию слияния из история. Однако, если у других людей уже есть копия этого объединения, то вы создадите для них дополнительную работу, поскольку они попытаются повторно синхронизировать свои копии master с вашей перезаписанной версией.

Итак, вам нужно выяснить, какой вариант вы хотите использовать. Я дам шаги для обоих, используя командную строку:

Удалить фиксацию из истории

git checkout master
git push origin master --force

Это заменит фиксацию слияния на origin/master текущим состоянием локальной ветки master, тем самым удаляя фиксацию слияния.

Отменить фиксацию с другим обратным фиксатом

git checkout master
git merge origin/master
git revert -m 1 HEAD

Это приведет к локальной синхронизации master с синхронизацией origin/master и то вы можете добавить обратную фиксацию, сообщив git revert, что 1 st - это тот, который следует считать "основной", parent, и он создаст обратную фиксацию относительно изменений, внесенных в из другого родительского коммита.

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

См. также:

Ответ 3

Я нашел другой путь без командной строки, немного некрасиво, но делает свою работу.

Итак, сделайте полный сброс для коммита, который вы хотите откатить, перейдите в папку проекта (с помощью Finder на Mac или Explorer в Windows) и сделайте копию всей папки. Внутри этой папки "Копировать" есть точка, которой вы хотите стать в конце этого процесса.

Хорошо... вернитесь к дереву исходного кода и затем извлеките заголовок (последний коммит в ваш пульт), затем снова перейдите к папке проекта, убедитесь, что вы видите скрытые папки, потому что вы должны видеть папку с именем ". мерзавец"

project folder

Удалите все, но ".git" из вашего текущего проекта, это означает, что в вашем текущем проекте нет ничего, кроме папки с именем ".git", затем перейдите в папку "Копировать" и скопируйте все, кроме папки ".git" и вставьте содержимое внутри вашего текущего проекта (только с папкой ".git")

Готово. Перейдите в исходное дерево и зафиксируйте изменения, ваш проект именно там, где вы хотели, и все изменения удалены.

Конец.


Obs1: Удалите папку "Копировать" сейчас, чтобы очистить ваш компьютер от грязных файлов.

Obs2: Этот процесс не удаляет ваши изменения из Git, коммиты будут там, что вы делаете, удаляя свои изменения и фиксируя их.