Отмените слияние Git, которое еще не было перенесено - PullRequest
3492 голосов
/ 05 марта 2010

В моей основной ветке я сделал git merge some-other-branch локально, но никогда не выдвигал изменения в исходную мастер. Я не хотел сливаться, поэтому я хотел бы отменить это. При выполнении git status после моего слияния я получал это сообщение:

# On branch master
# Your branch is ahead of 'origin/master' by 4 commits.

На основании некоторых инструкций, которые я нашел , я попытался запустить

git revert HEAD -m 1

но сейчас я получаю это сообщение с git status:

# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.

Я не хочу, чтобы моя ветвь была впереди при любом количестве коммитов. Как мне вернуться к этой точке?

Ответы [ 28 ]

1 голос
/ 08 марта 2010

Я думаю, что вы можете сделать git rebase -i [hash] [branch_name], где [hash] - это идентифицирующий хеш для того, как далеко вы хотите перемотать назад плюс один (или сколько коммитов вы хотите вернуться), а затем удалить строки для коммитов в редактор, который вам больше не нужен. Сохраните файл. Выход. Молиться. И это должно быть перемотано. Возможно, вам придется сделать git reset --hard, но в этот момент это должно быть хорошо. Вы также можете использовать это для извлечения определенных коммитов из стека, если вы не хотите сохранять их в своей истории, но это может оставить ваш репозиторий в состоянии, которое вы, вероятно, не хотите.

1 голос
/ 10 ноября 2016

Если вы совершили слияние:

git reset HEAD~1
# Make sure what you are reverting is in fact the merge files
git add .
git reset --hard
1 голос
/ 29 января 2013
  1. Сначала убедитесь, что вы все совершили.

  2. Затем верните ваш репозиторий в предыдущее рабочее состояние:

    $ git reset f836e4c1fa51524658b9f026eb5efa24afaf3a36
    

    или использование --hard ( это удалит все локальные, не зафиксированные изменения! ):

    $ git reset f836e4c1fa51524658b9f026eb5efa24afaf3a36 --hard
    

    Используйте хеш, который был там до вашего ошибочно объединенного коммита.

  3. Проверьте, какие коммиты вы хотите повторно зафиксировать в верхней части предыдущей правильной версии:

    $ git log 4c3e23f529b581c3cbe95350e84e66e3cb05704f
    
    commit 4c3e23f529b581c3cbe95350e84e66e3cb05704f
    
    ...
    
    commit 16b373a96b0a353f7454b141f7aa6f548c979d0a
    
    ...
    
  4. Примените свои правые коммиты в верхней части правой версии вашего хранилища:

    • При использовании cherry-pick (изменения, внесенные некоторыми существующими коммитами)

          git cherry-pick ec59ab844cf504e462f011c8cc7e5667ebb2e9c7
      
    • Или путем выбора диапазона коммитов:

      • Сначала проверьте правильные изменения, прежде чем объединить их:

        git diff 5216b24822ea1c48069f648449997879bb49c070..4c3e23f529b581c3cbe95350e84e66e3cb05704f
        
      • Сначала проверяйте правильные изменения перед их объединением:

        git cherry-pick 5216b24822ea1c48069f648449997879bb49c070..4c3e23f529b581c3cbe95350e84e66e3cb05704f
        

        где это диапазон правильных совершенных вами коммитов (исключая ошибочно совершенное слияние).

0 голосов
/ 29 мая 2018

В этом случае вам нужно сбросить ветку с помощью git reset --hard <branch_name>. Если вы хотите сохранить изменения перед их сбросом, обязательно создайте новую ветку и git checkout <branch_name>.

Вы также можете сбросить состояние до определенного коммита с помощью git reset --hard <commit_id>.

Если изменения были перенесены, вы можете использовать git revert <branch_name>. Обязательно проверьте, как использовать git revert и git checkout и в других сценариях.

0 голосов
/ 15 июля 2016

Самый простой из самых простых шансов, гораздо проще, чем здесь сказано:

Удалите локальную ветку (локальную, а не удаленную) и снова потяните. Таким образом, вы отмените изменения в своей основной ветке, и любое изменение будет затронуто вами, которое вы не хотите вносить. Начни сначала.

0 голосов
/ 26 апреля 2016

Если вы заметили, что вам нужно вернуться сразу после слияния, и вы ничего не сделали после попытки слияния, вы можете просто выполнить эту команду: git reset --hard HEAD@{1}.

По сути, ваше слияние sha будет указывать на HEAD@{0}, если после слияния ничего не было совершено и поэтому HEAD@{1} будет предыдущим пунктом перед слиянием.

0 голосов
/ 15 марта 2019
  1. git stash

  2. git branch -d the_local_branch

  3. git checkout -t <name of remote>

  4. git stash apply

Это сработало для меня .. !!

0 голосов
/ 05 марта 2010

Вы можете использовать команду git-reset.

git-reset - Сброс текущего HEAD до

указанное состояние. git reset [--mixed |

- мягкий | - жесткий | --merge] [-q] [] git reset [-q] []

[-]… git reset --patch

[] [-] […]

GIT-Reset

...