Отменить последний коммит / слияние - PullRequest
23 голосов
/ 11 апреля 2011

Я немного испортил мой репозиторий.Я работал над функцией в отдельной ветке.Закончив работу, я переключился на мастера, чтобы объединить его, но мой партнер отправил несколько файлов, которые вступили в конфликт с моими.После слияния, конфликта и появления новых изменений я увидел, что я зафиксировал и более старые изменения моего партнера.

Теперь я хочу повторить этот коммит / слияние.Я попытался git reset --soft HEAD^, но когда я хотел нажать, я получил это сообщение об ошибке Merge the remote changes before pushing again.

Кто-нибудь может мне помочь?

Ответы [ 3 ]

36 голосов
/ 11 апреля 2011

Ваша ветвь функций по-прежнему будет указывать на вашу работу.Вы не потеряете эти изменения.

Как уже говорилось, вы можете сбросить главный обратно с помощью

git reset --hard HEAD^

Если вы хотите получить некоторые конкретные файлы из вашей ветки без слияния, вы можете проверитьих:

git checkout yourbranch -- file1 file2 etc

Если вы хотите получить какие-либо файлы от мастера до слияния, вы также можете проверить их:

git checkout master^ -- file3 file4 etc

Это не идеально, но иногда это то, что нужно,Слияние / может / означает, что вы отклоняете некоторые изменения с обеих сторон в слиянии.Лучший способ добиться правильного слияния - это:

git merge --no-commit yourbranch

от мастера, затем выполнить команды проверки git сверху и, наконец, зафиксировать:

git add . -A
git commit

Когда вы нажимаете эту ветку сейчас, вам нужно будет добавить опцию force

git push --force

или

git push -f

Надеюсь, это поможет.

10 голосов
/ 01 мая 2011

Проблема в том, что вы хотите отменить изменения, которые вы уже отправили в центральный репозиторий. Если бы вы их не выдвинули, то git reset --hard / - soft / - mixed HEAD ^ сработал бы.

Поэтому, когда вы сбросили ваш HEAD, git жалуется, когда вы пытаетесь переместиться к источнику и обновить удаленную ссылку, которая не является предком вашего HEAD. Используйте --force:

git push --force origin master
10 голосов
/ 11 апреля 2011

Хе-хе, ты почти понял это:

git reset --hard HEAD^
...